最近在逆向apk的时候发现关键的加密算法被放进了so库里,毕竟直接用java写这种代码太容易被破了,放在so里面更安全些。既然这样,那也只好动态调so了,查资料研究了几个小时终于搞定了,现记录如下:

1.基本配置

IDA,adb,android_server,模拟器。这里用的是IDA6.5。

android_server在IDA的目录下面,需要用adb push至模拟器:

还要增加权限:

然后到data目录下执行android_server:

默认开启23946端口:

ha5

打开另一个shell设置端口转发:

 2.IDA动态调试

在模拟器中运行要被调试的apk,确定要被调试的so加载进内存后打开 Remote ARMLinux/Android debugger:

ha6

hostname中填写localhost,端口号添android_server打开的端口23946,无需密码:

ha3

选择attach至调试的apk进程:

ha0

然后选择要调试的so,注意该so加载在内存中的基地址(这里是4B4ED000):

ha7

这时会跳转至so模块的基地址,开启另一个IDA静态加载该so模块查看要跟踪的函数的偏移,基地址+偏移 就是这个函数在这个进程中的实际地址。点快捷键g,选择要跳转的地址,然后F2下断点,运行程序,继续运行模拟器中的apk,停在断点处,接下来就是一般的逆向分析了。

ha8

 

观看更多有关 的文章?

*

+
跳转到评论