Crack App | 某新闻 app 参数 sn 加密逻辑分析
第一时间关注Python技术干货!

图源:网络
今日目标
aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzQwMzYz
爬虫相关的 Js 逆向越来越卷了,吓得我赶紧开始学 App 
抓包分析
今天分析的是这个 app 的首页信息流
使用的抓包组合是charles + postern 抓包如下

通过这个包可以看到返回了title还有新闻相关来源,参数中带有sn
这个参数的长度让人不得不怀疑是不是md5的加密,不过还是要看看加密的逻辑是不是
把apk拖入jadx看看

70 + M 一下就反编译完了,一看就不对劲,jadx中啥都没有,应该是加壳了
查个壳看看

用的是腾讯加固,所以分析之前还是要脱壳看看
App 脱壳
app 脱壳的工具有很多,比如:
yang 神 frida_dump : https://github.com/lasting-yang/frida_dump
寒冰大大的 FART : https://github.com/hanbinglengyue/FART
目前世面上的脱壳工具还是很多的,今天我是用的是 BlackDex ,一款脱壳 App,先试试看能不能脱下来我们需要的内容
打开 BlackDex 然后再打开目标 App 就可以了

脱壳完成就会保存到指定的目录下

用ES文件浏览器打开对应的路径

就看到脱好的dex咯
然后将这些个dex压缩好,剪切到的/sdcard中,然后用命令拉到 pc上
adb pull /sdcard/xxx.zip [pc path]

然后再用jadx分析就好了
ps:压缩的 zip 直接拖到jadx里面就行了
加密参数定位与分析
拖到jadx里面编译之后检索sn=可以找到下面的逻辑
通过上面的逻辑大概可以知道valueOf是时间戳然后str是根据时间戳计算出来的结果
现在看a,a的方法就在下面

这里对z做了一个判断,所以需要返回看下我们抓包里面有没有z代表的token,如果有的话这里就要带上str3也就是token一块计算,如果没有的话就不用
传入了str和z之后就计算出一个str2,这个str2会进入b方法
跟进去看看b,这里的b的逻辑是一个md5,逻辑很清晰

所以真就是我们文章开头猜的那样,最后经过了一次md5计算
知道最后的逻辑是md5之后,就要看看md5的入参是什么,就要用到frida动态调试了
这个时候就有人问了,这些参数明明在上面的逻辑里面都能看到,为什么还要动态调试?
因为静态分析的结果不可信,动态调试输出的结果更加可信,所以要动态调试和静态调试相互印证
Frida hook 动态调试
用下面的 hook 代码
Java.perform(function () {
var aaa = Java.use('类名');
aaa.b.overload('java.lang.String').implementation = function (a) {
console.log("参数===>:"+a);
var result = this.b(a);
console.log("结果===>:"+result);
return result;
};
});
得到的结果如下

发现除了jadx里面能找到的参数之外,后面跟了一串乱码,这一串乱码是怎么来的?
回到jadx里面,可以看到就是NativeSecureparam.readMD5Key();返回的

现在需要分析NativeSecureparam.readMD5Key();是怎么计算出来的,通过这个方法的名字可以知道,这个字符串就是md5的盐值
so 分析
通过jadx可以知道这个方法是一个Native方法

来自libifeng_secure.so,用IDA打开对应的so文件

32 位的 so 报错JUMPOUT,所以直接偷懒用64的
找到对应的函数,点进去,可以看到下面的逻辑

这里要修改一下参数类型,可以看到下面的逻辑

其实就是将一串字符赋值v2并返回,没有其他的操作,回到jadx再看下逻辑就知道其实sn的逻辑就是
md5(版本号 + proid + publishid + uid + loginid(未登录是空) + "" + st + so中的字符串)
md5 就不用算法还原了吧,大家应该都会。
以上就是今天的全部内容了~
公众号配套技术交流群,备注【咸鱼666】,入群交流
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。
对了,看完记得一键三连,这个对我真的很重要。
