iOS网络请求小知识: get 和post 布尔值参数处理

1,961

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文同时参与 「掘力星计划」     ,赢取创作大礼包,挑战创作激励金

前言

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逆向,只为你呈现有价值的信息,专注于移动端技术研究领域。