美文网首页
【iOS逆向】如何验证签名

【iOS逆向】如何验证签名

作者: Geeks_Chen | 来源:发表于2019-07-05 10:25 被阅读0次

前沿

当你爬取某app的数据,发现所有接口中都有一个动态改变的参数,那么这个参数应该就是签名参数,一般都是通过一些算法组装生成的

1 连接越狱设备
frida-ps -Ua
屏幕快照 2019-04-20 下午3.03.51.png

2 找到目标进程

com.Xtone.ExpressionKingdom

3 IDA找到目标函数

3.1 追踪trace
frida-trace -U 9124 -m "+[NSURL URLWithString:]"
3.2 通过IDA找到目标函数,进行追踪
frida-trace -U 9124 -m "-[XTBaseRequest getWithURLString:parameters:success:failure:]"

frida-trace -U 9124 -m "-[XTBaseRequest addMustParamsToParams:]"

注意:
追踪多个函数的写法

frida-trace -U 9124 -m "+[NSURL URLWithString:]" -m "-[XTBaseRequest getWithURLString:parameters:success:failure:]"

执行完命令,会在根目录生成一个文件名为handlers 的文件

屏幕快照 2019-04-20 下午3.13.11.png

对应的js文件,可以修改参数,打印log

再次终端执行追踪

WechatIMG417.jpeg

目前已经追踪到关键函数,回到IDA找到对应函数的汇编代码,进行分析

WechatIMG414.jpeg

汇编分析

WechatIMG417.jpeg

sign算法还原:

python版

# coding=utf-8
import time
import hashlib

class testMd5():

    timestamp = int(round(time.time() * 1000))
    print('当前时间戳 :' + timestamp)
    # 待加密信息
    str = 'bqmsapiv2' + str(timestamp)
    # 创建md5对象
    hl = hashlib.md5()
    # 此处必须声明encode
    # 若写法为hl.update(str)  报错为: Unicode-objects must be encoded before hashing
    hl.update(str.encode(encoding='utf-8'))

    print('MD5加密前为 :' + str)

OC版

- (NSString *)getSignCode{
    //加盐
    NSString *str = @"bqmsapiv2";
    //获取当前时间戳
    NSString *timeStamp = [self currentTimeStr];
    NSLog(@"timeStamp:%@",timeStamp);
    //拼接
    NSString *resultStr = [NSString stringWithFormat:@"%@%@",str,timeStamp];
    //md5
    NSString *md5Str = [self md5WithString:resultStr];
    //lower
    NSString *signStr = [md5Str lowercaseString];
    
    return signStr;
}

//获取当前时间戳
- (NSString *)currentTimeStr{
    NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];//获取当前时间0秒后的时间
    NSTimeInterval time=[date timeIntervalSince1970]*1000;// *1000 是精确到毫秒,不乘就是精确到秒
    NSString *timeString = [NSString stringWithFormat:@"%.0f", time];
    return timeString;
}

- (NSString *) md5WithString:(NSString *) str{
    const char *cStr = [str UTF8String];
    // 设置字符加密后存储的空间
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    // 参数三:编码的加密机制
    CC_MD5(cStr, (UInt32)strlen(cStr), digest);
    NSMutableString *result = [[NSMutableString alloc] initWithCapacity:16];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i ++) {
        [result appendFormat:@"%02x",digest[i]];
    }
    return result;
}

相关文章

网友评论

      本文标题:【iOS逆向】如何验证签名

      本文链接:https://www.haomeiwen.com/subject/vhkshctx.html