前言
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搜索到关键字符