Android动态调试之不使用IDA
2020-12-10 20:32:03 Author: www.freebuf.com(查看原文) 阅读量:137 收藏

为什么不用IDA,因为贵。 为什么不用gdb,因为lldb的出现,取代gdb只是迟早的事情,可以说gdb是Depracated。

在 Android逆向之ARM64静态分析对app的中的so进行了静态分析,这篇文章介绍两种动态调试的方式,一种是radare2,另一种是lldb。

r2frida

概术

Radare2 and Frida better together. 两个强大的工具放在一起,必然会产生更为强大的能量,可以称为"Best Dynamic Debugging Tool ",最主要是免费。其本质是Radare2的插件。

安装

唯一的一个缺点,安装过程堪称灾难。我用r2pm -ci r2frida进行的安装。目前只能在Linux下使用。笔者使用Nodejs最新的稳定版本才安装成功。

缺少库文件的问题,解决办法如下,这里只是举例,具体情况可能不一样,笔者是ssl库链接不了。

/usr/bin/ld: 找不到 -ldhnetsdk

1)找到本地的libGL.so 文件路径 ,在终端执行:locate libdhnetsdk.so命令: /usr/local/ahuasdk/libdhnetsdk.so 2)建立链接: sudo ln -s /usr/local/ahuasdk/libdhnetsdk.so /usr/lib/libdhnetsdk.so

介绍

选择淘宝来介绍。

Attach process

r2 frida://BH9500C2JR/com.taobao.taobao

其中BH9500C2JR通过frida-ls-devices获取。在这里插入图片描述

Spawn process

r2 frida://spawn/usb/BH9500C2JR/com.taobao.taobao

这种情况下是以suspend模式启动app,因此屏幕会卡住。这样就可以hook程序启动的时候或之前的操作,比如onCreate。通过=!dc可恢复。

命令

所有r2frida的命令都必须以\或者=!开头 。

版本命令

获取Frida版本的命令\?V在这里插入图片描述

获取信息的命令

\i: Shows target information\ii* : List imports in r2 form.\il: List libraries. Commonly used with the symbol ~, which is the internal grep of r2.\iE : List exports of library, filtering by library name.iEa () : Show address of export symbol.\isa[*] () : Show address of symbol\ic: List classes

部分结果如下:在这里插入图片描述

搜索命令

\/ keyword: Search hex/string pattern in memory ranges (see search.in=?) 以JSON格式显示,搜索关键字rooted,命令为: \/j rooted在这里插入图片描述

动态调试

这是r2frida最强大的功能。

\dt (<addr>|<sym>) ...: Trace list of addresses or symbols. Similar to frida-trace

\dmas: Allocate a string inited with on the heap

\dmal: List live heap allocations created with dma[s]在这里插入图片描述通过px还看不出来什么,通过下图就唔唔沟看出这是UTF-8编码。在这里插入图片描述dt命令的简单使用:在这里插入图片描述

其他命令

dpt: List threads

dr: List thread registers

e[?] [a[=b]]: List/get/set config evaluable vars

env: Get/set environment variable

脚本

JS code to be run in the target can be loaded with \. script.js.A common practice is always to call this script agent.jsto remember that's the code to be run inside the target.

[0x00000000]&gt; \. agent.js
[0x00000000]&gt; \dc
resumedspawned process.

调试libnative-lib.so

通过smali代码可知libnative-lib.so文件是在中被加载的,在onCreate方法中被调用的。在这里插入图片描述因此在hook onCreate方法来下断点。

参考

https://www.qqxiuzi.cn/bianma/Unicode-UTF.php https://frida.re/docs/home/ https://github.com/enovella/r2frida-wiki

写在最后

r2frida在so调试方面基本可以替代IDA的,至于Smali的调试会在后面的文章中涉及。lldb这个利器本来是IOS上面的,用来取代gdb的,目前Google在Android中也大力推广,取代gdb也只是时间问题。

公众号

更多内容,欢迎关注我的微信公众号: 无情剑客。在这里插入图片描述


文章来源: https://www.freebuf.com/articles/mobile/257380.html
如有侵权请联系:admin#unsafe.sh