Android安全–一次简单的脱壳Dump dex实践
source link: https://blogread.cn/it/article/7713?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Android安全–一次简单的脱壳Dump dex实践
这篇脱壳是参考别人自己进行的一次简单的实践,主要是为了了解脱壳的流程以及工具的使用。
下面直接进入正题吧:
例子下载地址:
链接: http://pan.baidu.com/s/1c08Ufeg 密码: n8dc
首先把apk后缀改成.zip打开,发现dex文件只有1.23kb,所以真正的代码肯定不在这里,而是在运行中解密出来动态加载的。
话不多说,直接上工具,首先找到IDA目录dbgsrv下面的android_server文件,然后push到手机上面,然后加上可执行权限,再运行。如图所示:
运行后在端口23946端口监听。
安装apk文件。
端口转发,让IDA可以连接本地端口进行远程调试。
以调试模式启动程序:
adb shell am start -D -n 包名/包名+类名
程序的入口类可以从每个应用的AndroidManifest.xml的文件中得到,AndroidManifest.xml文件可以使用apktool工具反编译得到。
然后打开IDA,attach要调试的进程:
hostname设为本机127.0.0.1
找到应用的进行,并记下进程号:
进程号为2696,使用 forward jdwp:<pid> 转换端口以连接到指定的 JDWP 进程。
使用jdb附加调试应用程序。
然后找到程序加载的模块libdvm.so,找到其中的函dvmdexfileopenpartialPKviPP6DvmDex,在这个函数下断点。
为什么要在这个函数下断点,因为这个函数是加载dex文件的,R0就是加载的dex文件的地址。
然后点击IDA的继续,程序便会断在这个函数上面。
这时查看R0的值,然后显示其内存如下:
我们看到了dex文件的标志。
然后打开idc脚本,修改dump的内存起始地址和结束地址,起始地址就是R0的值,结束地址就是R0加上dex文件的大小,然dex文件的大小在dex header的0×20处,也就是0xFAEB4。
点击run,之后会在D盘下面生成一个1M左右的dex文件,这就是我们dump出来的dex文件。
使用dex2jar转成jar文件,再使用jd-gui.exe打开,得到程序代码:
也可以把dex文件替换回去,打包运行。
就是一个简单的例子,也是为了让自己加深印象,熟悉工具的使用,希望大家能够自动手动脱下壳~
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK