Android逆向so文件,调试加解读

来源:互联网 发布:淘宝开店代销怎么做 编辑:程序博客网 时间:2024/05/21 17:01

http://bbs.pediy.com/showthread.php?p=1324254#post1324254


本科刚毕业,实在无聊想学学破解,还是个弱菜,接触ida还不到2个月,破解程序都不到5个,但是还是很努力的在玩破解,无聊时看到这个apk,开始这个文件的破解。

apk下载地址http://pan.baidu.com/s/1eQ29ypk
这是个android程序,程序本事很大,主要是里面的 .psb.m 文件(请教大神这是啥引擎),这个文件是被压缩后解密的,非常恶心,大概源文件用psb开头 压缩后用(psb开头 加密后用mfl。
程序拿到手,弱菜(就是我)第一反应是dex2jar-0.0.9.15 后 jd-gui.exe 然后配合apktool修改,可是看到jar里面没啥值钱的东西~~~.psb.m这字段都木有,也不在string里面,怀疑是so文件内实现的~~~~(非常不敢怀疑so文件比smali难多了),打开lib-main.so(非常大)
 名称:  1.png查看次数: 0文件大小:  19.0 KB
里面很像加密解密,所有文件也在数据段里面有~~~只能硬着头皮看了~~~里面疑似加密解密的文件太多~~看需要花好长时间~~~看了半天一个函数(具体不好意思说),发现不是相关代码~~~决定开始动态调试~~~
一开始准备用下面这个方法调试http://bbs.pediy.com/showthread.php?t=178659&highlight=android+%E5%90%AF%E5%8A%A8+%E5%8A%A8%E5%89%8D。发现进不去,根本就没有lib-main.so,是不是没有加载,这个还请大神解答
我赌他不是一开始就把所有文件处理完,所以用《已解答: 关于用ida远程调试android native c 的so文件的问题》  这个帖子的方法
 点击图片以查看大图图片名称:2.png查看次数:17文件大小:7.1 KB文件 ID :92895
手机端打开程序(若打不开请装谷歌配件)
然后进23946端口 ~~其中有个解析太慢直接canel
 点击图片以查看大图图片名称:3.png查看次数:11文件大小:59.2 KB文件 ID :92896
Shift+f2
 点击图片以查看大图图片名称:4.png查看次数:7文件大小:6.5 KB文件 ID :92897
找Code段~~~(也只有code段这么大)
然后在所有你怀疑的地方加偏移7547b000(有些人不是这偏移)下断点放f2,f9后按按手机屏幕,然后f9配合f7,f2调试
在13a258这个函数发现目标
 点击图片以查看大图图片名称:5.png查看次数:16文件大小:3.5 KB文件 ID :92898
名称:  6.png查看次数: 0文件大小:  27.6 KB
 mfl字段
怎么找到13a258~~这只能说看着函数样子和名字找的~~其实我一开始是查找,psb.m字段~~然后发现那函数不对~~花了很大代价~~~这个得请教大神
在这个函数的末尾13a298也设下断点,按一下f9 mlf对应的hex view立即变成(psb,确定是解密函数。
 点击图片以查看大图图片名称:7.png查看次数:6文件大小:10.9 KB文件 ID :92900
 点击图片以查看大图图片名称:8.png查看次数:7文件大小:14.2 KB文件 ID :92901
这个函数也太大了~~~~无奈二分查看~~~神马时候hex view改变
名称:  9.png查看次数: 0文件大小:  1.8 KB
 发现是这些vld造成的
锁定vld
名称:  10.png查看次数: 0文件大小:  3.0 KB
 
不停的调试和看代码
还像就是从第8位源文件和一个解密段互相异或,中间多数是数组下标判断越界的改变~~~
Dump出解密段shift+f2
 点击图片以查看大图图片名称:11.png查看次数:7文件大小:11.7 KB文件 ID :92904
名称:  12.png查看次数: 1文件大小:  4.5 KB
 
搜索d9Gd 发现源文件是font_ahoge_main.psb.m(也可以dump)
尝试写了异或程序发现成功(这句话说起来简单,尝试+调试了好几次呢)
 名称:  13.png查看次数: 1文件大小:  4.1 KB

现在关键是解码段是怎么来的
发现虽然前面的代码很长,但是很快跳到了(这个我没花很长时间~现在想起来真是侥幸)
 名称:  14.png查看次数: 1文件大小:  8.4 KB
这一行,在这一行前面下断点
发现r1是对应这一段
 名称:  15.png查看次数: 0文件大小:  2.1 KB
跳到755b54ec这段上时,这是r0指向的栈
 名称:  16.png查看次数: 0文件大小:  2.0 KB
我以前手动编过md5的加密~~很熟悉这就是标准的md5加密~~不熟悉的也可以自己看
 名称:  17.png查看次数: 0文件大小:  2.2 KB
到了755b5508就成了Rj9Pegoh4font_ahoge_main.psb.m(不断尝试可以知道都是Rj9Pegoh4+小写文件名)的md5值~~yeah
然后就到了
 名称:  18.png查看次数: 0文件大小:  3.0 KB
这个函数~~~f9后发现很重要(大多数函数我都是跳过后才发现很重要再回头看)
 名称:  19.png查看次数: 0文件大小:  3.9 KB
这中间函数也很重要
F5发现是
 点击图片以查看大图图片名称:20.png查看次数:15文件大小:12.7 KB文件 ID :92913
调试时发现传入的参量为0x12bd6aa和存储位置
 名称:  21.png查看次数: 0文件大小:  10.0 KB
Dump下写了个相同的模拟出来
 名称:  22.png查看次数: 0文件大小:  5.8 KB
后面也都是体力活f5后再调试~~模拟出_ZN7MRandomC1EPKjj
 名称:  23.png查看次数: 0文件大小:  12.1 KB
再模拟同样模拟出这个
 
 名称:  24.png查看次数: 0文件大小:  3.3 KB
点击图片以查看大图图片名称:25.png查看次数:18文件大小:18.1 KB文件 ID :92918
最后解密段终于好了~~~~yeah
最后解密就好了~~~在加密回去时mfl头文件还有4个字节是解压缩后的大小~~~关于怎么解压缩我就不说了~~反正也是这种方法~~~~还请各位破解的愉快~~~ 
1 0
原创粉丝点击