爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET

爱加密和梆梆加固的破解方法

By Bob Pan

梆梆与爱加密都使用了将原有的dex隐藏, 在运行时解压, 并且通过修改app的类加载器的方式实现加固. 参考: AndoridAPK反逆向解决方案:梆梆加固原理探寻

然而, 不管如何隐藏dex, 最终在运行时都必须释放到内存, 所以本文的思路是从内存中找到解密后的dex文件, 进而得到加固前的apk.

爱加密

爱加密的app并没有做反调试的保护. 打开app之后直接使用gdb连接, 然后用gcore, 产生core dump.

使用ps查看pid

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET_第1张图片

使用gdb连接pid

使用gcore产生core dump

 

将产生的core.1033复制回电脑, 并使用编辑器打开, 通过类名找到dex中string-data段, 然后通过查找’dex.035’可以找到多离string-data最近的个dex头. dex文件头偏移32的整形值就是dex的文件长度. 使用dd命令可以从内存中抠出dex.

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET_第2张图片

通过类名找string-data段

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET_第3张图片

找到最近的dex文件头(0x4f87a08)和dex文件大小0x07c0

使用dd抠出dex

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET_第4张图片

这个文件是个完整的dex文件, 并且可以被dexdump直接打印

梆梆

梆梆加固的程序做了anti-ptrace, 表现为使用gdb --pid 连接不上对应的进程, 利用kernel-model打印ptrace的记录, 可以看出梆梆

l  使用了3个进程互相ptrace.

l  发送错误指令来检查ptrace是否被劫持(反回值是-3行, 尝试让1568进程继续执行, 但是1568并未被ptrace, 必须出错),

l  利用ptrace修改另一个进程的数据(action是5的行).

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET_第5张图片

ptrace系统调用的记录, 右边是ptrace的参数

虽然连不上1552, 但是dalvik是一个多线程的程序, 里面包含主进程, gc线程, binder线程等, 虽然我们用gdb连不上主线程, 但是我们可以连上其他线程, 这些线程的tid在/proc/[pid]/task/目录下.

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET_第6张图片

爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET_第7张图片

Gdb连接任意一个tid

拿到coredump后与爱加密一样做相同的处理, 可以拿到dex.

总结

爱加密和梆梆通过隐藏dex确实可以让大部分静态分析工具找不到执行代码, 但是在动态运行的时候无可避免的需要将dex在内存中还原. 虽然梆梆做了反调试, 但是通过其他方式也同样可以获取其内存. 通过本文的方法分析其内存然后恢复dex, 更进一步可以完全恢复原始apk. 从这个角度说, 爱加密和梆梆的加固形同虚设.

 



来自为知笔记(Wiz)


你可能感兴趣的:(爱加密和梆梆的加固的破解方法 - pxb1988的专栏 - 博客频道 - CSDN.NET)