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

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查看次数: 3文件大小:  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查看次数:	40文件大小:	7.1 KB文件 ID :	92895
手机端打开程序(若打不开请装谷歌配件)
然后进23946端口 ~~其中有个解析太慢直接canel
  点击图片以查看大图图片名称:	3.png查看次数:	25文件大小:	59.2 KB文件 ID :	92896
Shift+f2
  点击图片以查看大图图片名称:	4.png查看次数:	20文件大小:	6.5 KB文件 ID :	92897
找Code段~~~(也只有code段这么大)
然后在所有你怀疑的地方加偏移7547b000(有些人不是这偏移)下断点放f2,f9后按按手机屏幕,然后f9配合f7,f2调试
在13a258这个函数发现目标
  点击图片以查看大图图片名称:	5.png查看次数:	38文件大小:	3.5 KB文件 ID :	92898
名称:  6.png查看次数: 0文件大小:  27.6 KB
 mfl字段
怎么找到13a258~~这只能说看着函数样子和名字找的~~其实我一开始是查找,psb.m字段~~然后发现那函数不对~~花了很大代价~~~这个得请教大神
在这个函数的末尾13a298也设下断点,按一下f9 mlf对应的hex view立即变成(psb,确定是解密函数。
  点击图片以查看大图图片名称:	7.png查看次数:	16文件大小:	10.9 KB文件 ID :	92900
  点击图片以查看大图图片名称:	8.png查看次数:	15文件大小:	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查看次数:	20文件大小:	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查看次数: 2文件大小:  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查看次数: 1文件大小:  3.0 KB
这个函数~~~f9后发现很重要(大多数函数我都是跳过后才发现很重要再回头看)
  名称:  19.png查看次数: 0文件大小:  3.9 KB
这中间函数也很重要
F5发现是
  点击图片以查看大图图片名称:	20.png查看次数:	39文件大小:	12.7 KB文件 ID :	92913
调试时发现传入的参量为0x12bd6aa和存储位置
  名称:  21.png查看次数: 0文件大小:  10.0 KB
Dump下写了个相同的模拟出来
  名称:  22.png查看次数: 3文件大小:  5.8 KB
后面也都是体力活f5后再调试~~模拟出_ZN7MRandomC1EPKjj
  名称:  23.png查看次数: 0文件大小:  12.1 KB
再模拟同样模拟出这个
 
  名称:  24.png查看次数: 0文件大小:  3.3 KB
点击图片以查看大图图片名称:	25.png查看次数:	61文件大小:	18.1 KB文件 ID :	92918
最后解密段终于好了~~~~yeah
最后解密就好了~~~在加密回去时mfl头文件还有4个字节是解压缩后的大小~~~关于怎么解压缩我就不说了~~反正也是这种方法~~~~还请各位破解的愉快~~~*转载请注明来自看雪论坛@PEdiy.com 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 混淆SO文件是指对Android native执行文件(.so文件)中的函数和数据进行密和混淆,以保护代码的安全性和隐私性。与Java代码混淆不同的是,SO文件的混淆是在编译阶段完成的,而不是在打包和发布阶段。 在Android开发中,NDK(Native Development Kit)是一款可用于编写本地代码的工具集。使用NDK开发的应用程序使用SO文件来提供C/C++函数和库。由于NDK代码不会在应用程序中进行编译,因此它们没有类似于Java代码的混淆和密工具。因此,为了强SO文件的安全性,需要使用其他的工具来进行混淆。 现在有许多开源的SO混淆工具可供使用。例如,Android NDK提供了一个名为LLVM混淆器的工具,它使用一些与Java代码混淆器不同的技术来优化指令流和掩盖代码逻辑。此外,其他SO混淆工具如YASC、MOVfuscator、O-LLVM等也可以用于混淆SO文件。 SO文件混淆可以通过多种方式实现。例如,针对代码文件进行重命名或修改,删除未引用的函数和数据,密和混淆重要内容等。此外,也可以通过将硬编码的值替换为映射的值,使用一些外部定义的数据结构来防止反汇编和静态分析等技术来实现混淆。无论采用何种方法,SO文件混淆对于保护代码的安全性和隐私性都具有重要意义。 ### 回答2: 使用Android Studio中的ProGuard工具可以对一个应用程序的Java class文件进行混淆,但是它并不支持对Native代码的混淆。由于so文件编译后的二进制文件,没有人可读的,对so文件进行混淆通常都是为了防止逆向工程而不是优化程序的运行或缩小它的大小。 现在有一些第三方工具可以用来对so文件进行混淆,比如Bangcle、Qihoo 360、Baidu和信鸽。这些工具通过改变so文件的代码结构、函数名称和变量名等方法来混淆so文件,使之更难以阅读和理解。 混淆so文件是有一定风险的,因为这可能会导致应用程序的崩溃和功能异常。此外,混淆so文件可能会和某些平台实现产生不兼容的问题。但是如果您确实担心你的so文件受到攻击,那么混淆so文件可能是一个值得考虑的安全策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值