前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android动态调试(1)

Android动态调试(1)

原创
作者头像
无情剑客
修改2020-12-10 14:15:13
1.2K0
修改2020-12-10 14:15:13
举报
文章被收录于专栏:Android逆向

为什么不用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

代码语言:javascript
复制
r2 frida://BH9500C2JR/com.taobao.taobao

其中BH9500C2JR通过frida-ls-devices获取。

Spawn process

代码语言:javascript
复制
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.js to remember that's the code to be run inside the target.

代码语言:javascript
复制
[0x00000000]&gt; \. agent.js
[0x00000000]&gt; \dc
resumed spawned 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也只是时间问题。

公众号

更多内容,欢迎关注我的微信公众号: 无情剑客。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • r2frida
  • 概术
  • 安装
  • 介绍
  • Attach process
  • Spawn process
  • 命令
  • 版本命令
  • 获取信息的命令
  • 搜索命令
  • 动态调试
  • 其他命令
  • 脚本
  • 调试libnative-lib.so
  • 参考
  • 写在最后
  • 公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档