网站首页 > 基础教程 正文
为什么不用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.js to remember that's the code to be run inside the target.
[0x00000000]> \. agent.js
[0x00000000]> \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也只是时间问题。
公众号
更多内容,欢迎关注我的微信公众号: 无情剑客。
- 上一篇: Metasploit渗透测试之MSFvenom
- 下一篇: 使用Hexo在github上搭建静态博客
猜你喜欢
- 2024-11-25 Deno 1.30 正式发布
- 2024-11-25 用 WasmEdge 和 Rust 在边缘云上构建高性能且安全的微服务
- 2024-11-25 通过浏览器工作台启动本地项目
- 2024-11-25 r2frida:基于Frida的远程进程安全检测和通信工具
- 2024-11-25 NPM 使用介绍
- 2024-11-25 使用Hexo在github上搭建静态博客
- 2024-11-25 Metasploit渗透测试之MSFvenom
- 2024-11-25 浅析CTF中的Node.js原型链污染
- 2024-11-25 首个SSRF漏洞开篇学习
- 2024-11-25 github webhook自动化部署
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)