前沿
当你爬取某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:]"
屏幕快照 2019-04-20 下午3.13.11.png执行完命令,会在根目录生成一个文件名为handlers 的文件
对应的js文件,可以修改参数,打印log
WechatIMG417.jpeg再次终端执行追踪
WechatIMG414.jpeg目前已经追踪到关键函数,回到IDA找到对应函数的汇编代码,进行分析
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;
}
网友评论