小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金
前言
get 和post 布尔值参数处理:如果后台Bool 参数没有同时支持【 0,1】 ;和【 true false】,get请求的时候 就需要特殊处理。
I、使用NSNumber传BOOL值的处理
使用NSNumber 传BOOL值参数时,需要区分get 和Post进行处理。
1.1 问题分析:
使用NSNumber 传BOOL值的时候,get 和post对应的参数不一致
[params setValue:[NSNumber numberWithBool:self.viewModel.multipleSwitchCellTableViewCellModel.IsSon] forKey:@"IsSon"];//
这个代码使用Post 会将请求参数IsSon 自动转为true/false
但是get 请求的时候就是默认0和1 不会进行将参数IsSon 自动转为true/false
1.2 解决方案
如果后台get请求没有同时支持【 0,1】 ;和【 true false】,只支持true false的时候,就需要特殊处理。
- get请求的正确处理
// get 不会自动转为 "IsSon": true,// "IsSon": false,
//get 需要自己处理
if(self.viewModel.multipleSwitchCellTableViewCellModel.IsSon){
[params setValue:@"true" forKey:@"IsSon"];//
}else{
[params setValue:@"false" forKey:@"IsSon"];//
}
II、扩展:敏感逻辑的保护
2.1 、把函数名隐藏在结构体里,以函数指针成员的形式存储
把函数名隐藏在结构体里,以函数指针成员的形式存储。
编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛
// Created by devzkn on 18/09/2017.
// Copyright © 2017. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface KNUtil : NSObject
/**
把函数名隐藏在结构体里,以函数指针成员的形式存储。
编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛
*/
typedef struct _util {
void (*checkKNSign)(char *keys[], unsigned char *output);
}CheckKNSignUtil_t ;
#define ShareKNUtil ([KNUtil sharedUtil])
+ (CheckKNSignUtil_t *)sharedUtil;
- 调用方法
ShareKNUtil->checkKNSign(key, output);
2.2、使用宏进行替换字符串
- 根据前缀搜索出需要混淆的类名、方法名, 生成对应的宏文件
#define run OmWJoTZfCqoPshvr
#define iosre egnjoOFDrFiQVRgr
静态分析时hopper等反汇编工具无法根据string搜索到关键字符
III、see also
更多资讯和服务请关注#小程序:iOS逆向
,只为你呈现有价值的信息,专注于移动端技术研究领域。