180309 逆向-Section加密(WhaleAndroid03)(2)

54 篇文章 1 订阅

1625-5 王子昂 总结《2018年3月9日》 【连续第524天总结】
A. AndroidSection加密题目 (2)
B.
注意点

adb的冲突

以前当DDMS开启时,cmd中的adb就会被终止
而再开启cmd中的adb的话,DDMS又会被终止
使得我以为adb和DDMS是冲突的

但是查询发现调试JNI_Onload必须在开启DDMS的状态下,又用IDA附加,说明两者是可以同时进行的

另外一条关键性的证据是cmd启动adb时会报一个错

adb server version (32) doesn’t match this client (36); killing…

说明DDMS中也启动了一个adb,而关键在于这两个adb不兼容

查询了一下,发现电脑里有无数个adb,包括Android-sdk、夜神(NOX)都附赠了adb.exe,以前用的时候是随便拖了一个放进Path中的

那么只要使cmd中的adb与DDMS中的adb是同一个就行了
查询DDMS启动的adb是哪个呢?我在它的根目录下找了没有发现,而父目录中的platform-tools\adb.exe虽然同属一个工具包,但是也不是同版本

最后想到用任务管理器来查找该进程的路径:

成功抓住,原来是在SysWOW64中的adb啊
复制到system32中覆盖原来的adb即可同时使用了

JNI_Onload的调试

注意DDMS是已经开启的,否则在jdb启动时会报致命错误 附加JVM失败

之前调试so的时候没有需要断JNI_Onload的情况,所以一直都是adb直接启动android_server,然后IDA附加

这次有需求了,因为解密过程在JNI_Onload之前,应该是.init_array中进行的
首先执行

adb shell am start -D -n com.tencent.demo.cracknet/.MainActivity

将进程以调试模式启动,然后它会在开始之前等待着被附加
此时将IDA附加上去,断在libc.so后要设置debugger option中的中断

如果不设置的话,将会导致
- 找不到libnet.so
- libnet.so中没有导出符号

原因是本程序运行后将会删除(除名?)具有X(可执行)权限的libnet.so区段,使得IDA没有发现JNI_Onload的存在痕迹
如果断到了这个区段,之后会存在一个debug096的区段来取代它,upload函数和JNI_Onload都存在该区段中
查询发现debug区段的意思是

通常,这些是在调试过程中分配的区域。有些与堆相关,有些与操作系统的实现有关,有些可能是由与您交互的另一个进程分配的页面。他们在那里是因为IDA需要为您提供一个接口来查看内存,因为它实际上是在内存中布局的,就像任何其他调试器一样。

将它们与IDA的内置细分设施集成,可以更轻松地与其他组件和第三方插件配合使用。

它们被复制,.debug???因为这些段是可执行文件调试环境的一部分。这些数字只是顺序的,并没有真正的意义。

PS有关这些内容的暗示:IDA不会不断更新它们,并且有时可能需要IDA重新扫描调试过程的内存以确保查看最近的内存快照。至少在IDA 6.6的情况下,情况可能已经改变。

设置完成后在cmd中输入

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

使中断的进程恢复运行,即可断在模块加载的linker上了

第一个断住的就是libnet.so,可以看到此时的符号已经有了
双击JNI_Onload可以跳转到该地址去,但是此时还未解密,只是一堆不可读的数据
理论上来说找到linker的dlopen后,就能找到.init_array加载、解密的地方了
留待明天实践吧233

总之断住以后再运行即可找到libnet和其中的JNI_Onload了

C. 明日计划
Android

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值