Hyperpwn:基于gdb的调试利器,让你的调试过程更轻松
一、Hyperpwn何许人也?
Hyperpwn是师弟开发的一款gdb调试工具的增强插件,入选了Kcon2019的九大神兵之一。我也在看雪的课程上已经给不少人做了使用和演示,相信已经有一些人对于Hyperpwn有了一定的了解。一直打算写一篇关于如何使用Hyperpwn进行android的动态调试的文章,结果由于很忙而拖到了现在。本篇文章也是再次为师弟打call,下面是在Kcon2019大会上的一些介绍:
Hyperpwn在早期对android的gdb调试支持不够完善,导致了出现一些问题。后来在和师弟经过一些完善后,现在已经完美支持了NDK提供的gdb和gdbserver的远程调试功能。
Hyperpwn官方链接 Gayhub
这里以一张gif图来作为对Hyperpwn的开篇介绍吧
Hyperpwn是一个基于Hyper实现的gdb调试插件,用于改善调试过程的结果显示。Hyperpwn在前辈们的基础上更进一步,将调试过程中的gef、pwndbg、peda等调试插件的结果显示进行自动化窗口布局,从而让整个调试过程更人性化。
同时,Hyperpwn引入了调试状态记录功能,对动态调试过程中的每一个状态进行了保存,从而解决逆向调试人员使用手工记录每一个调试状态的寄存器信息、内存信息等内容的繁琐过程。在调试过程中只需要使用ctrl+shift+pageup快捷键便可以查看上一个调试状态信息,使用ctrl+shift+pagedown就可以查看下一个调试状态信息,非常的方便,从而真正做到解放双手。
具体的介绍和安装过程可以去gayhub查看。
二、使用Hyperpwn进行动态调试并脱壳的简单实践
1、将NDK中提供的gdbserver推送入手机,对应在NDK的目录:prebuilt/android-arm/gdbserver以及prebuilt/android-arm64/gdbserver
adb push gdbserver /data/local/tmp,并给予可执行权限:chmod 777 /data/local/tmp/gdbserver
(这里要注意gdbserver的32位和64位的区别)
2、开启端口转发:adb forward tcp:1234 tcp:1234
3、以调试模式开启app,使用gdb-server附加app进程,首先使用ps命令获取待调试的app的进程id,/data/local/tmp/gdbserver :1234 --attach pid
4、接下来就可以使用Hyperpwn愉快的开始对app的debug了。(这里要注意需要使用ndk中提供的gdb,而不是系统的gdb),首先打开Hyper,然后cd到NDK中的gdb目录当中,然后执行./gdb,接下来就可以连接gdbserver进行远程调试了。
下面是一张在绕过某加固的前期的所有反调试后,可以很明显看到堆栈当前存放的解密后的dex在内存中的位置,此时只需要使用memory dump即可将当前dex所在的内存区域dump下来,便完成了对该加固app的简单脱壳。
下面是使用jadx打开dump下来的dex的截图。
三、好了,就到这里了,感兴趣的可以去gayhub按照安装和使用教程搭建环境体验。
|