Dwarf调试器介绍

Dwarf介绍

Dwarf是一个基于Frida开发的调试器,它继承了Frida敏捷、优雅、支持多平台的特性,而GUI界面则是基于PYQT5构建。
它具有强大的静态分析能力(基于Radare2和Unicorn),以及强大的动态分析能力(Frida提供的各种API),且扩展性很强,可以安装插件,更新也很快,作者是极其靠谱的iGio90,因此值得尝试和使用。项目地址:https://github.com/iGio90/Dwarf
这一篇博文是我的学习笔记。

安装和运行

前置条件

  1. Python3,必须是py3,2不行
  2. Frida环境
  3. 电脑上adb命令可以正常使用
  4. 测试机有root权限

安装

不管通过git还是其他什么方式,把最新的Dwarf源码下载下来即可。

运行

官方教程中建议:进入Dwarf目录,运行dwarf.py,屏幕会展示Frida的引导界面,然后一步一步往下。
但由于国内网络状况,这并不是一个好的选择,因为Dwarf实在是太热情了,它会首先核实你的Frida是不是最新版,如果不是最新版就去Git上给你下载,其次,如果你server没启动,它会帮你启动server,但它期待你的server位于 /system/bin|xbin 目录下,但我们Frida server一般在/data/local/tmp目录下,因此即使你有server,它也会找不到,然后去Git帮你下载。。。因此很容易在某一步卡死。
在这里插入图片描述
我们只需要稍微修改一下代码或者配置就行。
一.修改Dwarf-master\dwarf_debugger\dwarf.py代码中这一句,这样Dwarf就不会试图去更新server版本,这种做法的缺点是Dwarf版本更新后我们需要重新修改代码。

local_update_disabled = _prefs.get('disable_local_frida_update', False)
//修改为True
local_update_disabled = _prefs.get('disable_local_frida_update', True)

或者我们可以一劳永逸,通过以下代码找到Dwarf的用户偏好表,preferences.json主要用于记录用户的一些偏好设置,比如调试器背景颜色,是否自动更新server,字体大小,展示风格等等。

import os
from pathlib import Path

home_path = str(Path.home()) + os.sep + '.dwarf' + os.sep + 'preferences.json'
print(home_path)

修改为 {“dwarf_ui_theme”: “light”, “disable_local_frida_update”: true}

两种方法其实都是在修改preferences表,Dwarf自动更新的问题就被解决了。

但Dwarf太过热情的为我们安装和启动server的毛病还在,我们可以自己启动server,并通过命令行参数配置的方式直接运行Dwarf来避免其他的麻烦。

1.启动frida-server
在这里插入图片描述
2.命令行参数方式运行Dwarf,在Pycharm命令行或者cmd中都可以。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此即成功运行,下面我们简单说一下参数配置,最简单的形式如下
dwarf.py -t android com.packageName

  • 必填参数-t,"-t android/ios/xxx",即选择Hook注入的平台,选项有android, ios, local, remote,如果不提供则默认为本机,比如我是windows。
  • 可选参数-s,"-s xxx.js"提前加载Frida脚本,在遇到针对Frida的反调试时很有用。
  • 可选参数-bs,"-bs",即break-start,在程序刚启动时断点,可以用于Hook一些加载时机较早的函数。
  • 可选参数-ds, “-ds”,即debug-script,在命令行输出详细的日志,主要是Frida api的各种打印信息,对于了解Dwarf实现各项功能使用到的Frida API很有帮助。
  • 必填参数-包名/PID,在命令行最后或者任意位置加上包名,即我们需要Hook的目标App。需要注意的是,你可以不加这个参数,最后通过GUI界面的方式去选择需要Hook的包名/进程,但条件蛮苛刻,需要frida server位于 /system/bin或者xbin下,且有充分权限,同时server为最新版,因此我们不采纳这种方式。当你输入包名时,它使用Frida的Spawn方式启动并注入进程,如果输入Pid,则使用Attach附加的方式启动。两者各有优劣,Spawn方式注入的时机早,同时可以避开一些加固的反调试,但可能会卡顿或者无法启动,Attach模式要求待测试App已启动,并会附加到现有进程上,更加自然和写意。我更喜欢Attach方式,待测试App包名为com.example.goal,我们需要获取它的pid,frida-ps显然是最优雅快捷的方式。
    在这里插入图片描述
    frida-ps会列举出可以Hook的进程,需要注意frida和ps之间没有空格(我经常犯这个错),-U代表通过USB连接的设备(Android手机),这个参数不能少,如果没有效果,可以尝试-R(即Remote)。Windows平台上筛选命令为findstr,Linux等使用grep。
    在这里插入图片描述在这里插入图片描述
    关于Dwarf如何启动的内容大致就这些,下一篇我们使用一下它的具体功能。
    (我写的好啰嗦)
发布了23 篇原创文章 · 获赞 112 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38851536/article/details/104626822
今日推荐