Crack App | 某新闻 app 参数 sn 加密逻辑分析
共 1923字,需浏览 4分钟
·
2022-05-17 10:55
第一时间关注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】,入群交流
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。
对了,看完记得一键三连,这个对我真的很重要。