逆向工具随笔

逆向工具盘点

X64DBG

插件安装方式

置于根目录下plugins目录

记录一个xdbg过vmprotect保护的反调试插件HyperHide

记录一个提供类似IDA的反编译功能的插件MapoAnalyzer

ApiBreakPoint

显示各种系统API,方便下断点

ClawSearch

在xdbg中提供类似CE搜索的简单功能

xAnalyzer

粗略看了下,至少包含自动标注,即注释函数调用的参数的功能

抓包

HTTP Debugger

IDA用法

IDA

64位生成伪代码的参考性较低,32位相对较高

IDA的启动

New新建文件

可以打开动态库,exe,静态库,中间文件(obj),apk等等二进制文件

go仅仅打开ida

Processor type选MetaPC:表示自动猜测处理器

绿色的球表示分析完成

image-20221031212129770

当前模块的信息在IDA View窗口拖到最上面可以看到,如下:

image-20221031225103394

IDA的基本菜单

文件file下

file-load file

  • IDS/IDT file 符号文件
  • PDB file 调试信息文件
  • DBG file 调试信息文件
  • TDS file 调试信息文件(少见)
  • FLIRT signature file 签名文件
  • Parse C header file C的头文件

Produce file 生成文件

  • MAP file 映射表文件

  • ASML file 反汇编文件

  • INC file 汇编当中用到的头文件

  • LST file 列出一个类似映射表的文件

  • EXE file 生成exe文件

  • DIF file 两个二进制文件的差异,在git中经常用到的文件

  • C file 生成一个C文件

  • html file

  • flow chart 流程图(gdl文件) 哪些函数怎么调用到我这里来

  • call graph 函数调用关系图(gdl文件) 调用了哪些函数

    上面的gdl文件可以通过ida目录中的qwingraph.exe来打开看到图

  • IDC file 脚本文件(脚本文件一般用python写的)

savesave as可以保存成IDB文件,即 ida的数据库

take database snapshot 使用数据库快照

编辑edit下

  • Begin selection 选择两个点,选中中间的代码(可以在view中跨图选中代码)
  • Export data 导出数据,选择东西,点这个导出数据可以转换成各种类型的数据
  • Code 鼠标选中的行按照代码解析
  • Data 鼠标选中的行按照数据解析
  • Struct var 鼠标选中的行按照结构体变量解析
  • Strings 鼠标选中的行按照字符串解析,子目录有很多种类的字符串选择.
  • Array 鼠标选中的行按照数组解析
  • Undefine 取消选中的原本的解析
  • Rename 重命名 (可以选择包含到名字列表中,即作为公用名称,但这样就要注意不能重复设置同名了)
  • Operand type 操作数类型修改 (操作数代表了某个含义的变量,可以通过Manual,自行输入含义,方便理解)
  • Comments 注释 分号注释会覆盖掉冒号注释和反斜杠注释
  • Segments 段 子目录中的Rebase program为重新设置基址.
  • Structs 结构体 自定义结构体解析,修改联合体成员,强制解析为0偏移结构体等等
  • function 函数 删除函数(解析错误,不是函数识别错了),set function end设置函数结尾,Stack variables识别为本地变量,rename register重命名寄存器,change stack pointer改变栈指针,set type设置函数类型
  • patch program 修补程序 其中可以盘点全部修改项
  • Other 指令涂色
  • Plugins 插件

jump跳转

  • jump to operand跳转到操作数,比如说jnz loc_18001F150,双击也能跳转,选该项也可以跳转

  • jump in a new window在一个新窗口跳转,同上,只是开一个新窗口

  • jump to previous position跳转到上一个位置

  • jump to next position 跳转到下一个位置

  • empty navigation stack 清空导航堆栈,就无法跳转到上一个与下一个了

  • jump to pseudocode 跳转到伪代码,用于在汇编与伪代码之间的跳转,方便比对

  • jump to address 跳转到地址(很常用)

  • jump by name 按函数和变量名称跳转

  • jump to function跳转到函数

  • jump to segment 跳转到段

  • jump to segment register 跳转到段寄存器

  • jump ot problem 跳转到ida解析有问题的地方

  • list cross references to 列出引用了选中位置的位置

  • list cross references from 列出选中位置引用了的位置 (列出参考选定操作数的引用位置)

  • jump to xref to operand 跳到引用操作数(跳转到应用到操作数的位置)

  • jump to entry point 跳转到入口点

  • jump to file offset 跳转到文件偏移地址

    image-20221031212106379

  • mark position 标记位置

  • jump to marked position 跳转到标记位置

  • clear mark 清理标记

search搜索

(省略意义不明和意义不大的项)

  • immediate value 搜索立即数
  • text 搜索文本
  • sequence of bytes 搜索字节序
  • error operand 跳转到ida认为解析有误的操作数
  • search direction 搜索方向,点击可以改变搜索方向

view视图

  • Open subView 打开子视图,就是打开子窗口
    • Proximity browser临近浏览器,实际上就是个附近调用关系的视图
    • generate pseudocode生成伪代码 ;
    • hex dump 16进制数据展示;
    • exports 导出函数窗口 ;
    • imports 导入函数窗口(可用于判断导入了哪些函数,因此确定导入了哪些库);
    • Names 名称窗口,窗口内小图标绿色的F表示内部实现的函数,浅蓝色f表示外部实现的函数,绿色箭头图标表示完全外部实现的,D表示数据,A表示字符串
    • functions 函数窗口 粉红色表示外部函数,青色表示库函数等等..
    • Strings 字符串窗口
    • Signatures 签名,可以获取一些信息,甚至利用别人的签名
    • struct 结构体窗口
    • function calls 函数调用窗口,包含其他函数调用自身,和自身调用其他函数两个窗口
    • Patched bytes 修补的字节窗口
  • Graphs 图像
    • function calls 函数调用全流程图
    • Xrefs to 调用到选中函数的流程图
    • Xrefs from 选中函数调用了哪些函数的流程图
  • toolbars 工具栏
  • calculator 计算器
  • graph overview 图形概览 (用于汇编的view窗口的概览)
  • datebase snapshot manager数据库快照管理

AI插件

下面两插件目前能确定的是支持7.7,最新版实测不支持

Gepetto插件

使用方式:将Gepetto-1.1文件夹整个移动到IDA目录下plugins目录下,然后将gepetto-locales和gepetto.py移动到plugins文件夹中

WPeChatGPT插件

基于Gepetto,国内开发的WPeChatGPT

与二进制文件直接对话的项目

开源地址

该项目依赖于RetDec项目

RetDec自行编译

从源码编译RetDec:这样可以使用系统现有的OpenSSL版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 克隆RetDec仓库
git clone https://github.com/avast/retdec.git
cd retdec

# 2. 安装必要的依赖
brew install cmake python3 autoconf automake pkg-config libtool openssl@3

# 3. 创建构建目录
mkdir build && cd build

# 4. 配置CMake,指定使用系统的OpenSSL
cmake -DOPENSSL_ROOT_DIR=$(brew --prefix openssl@3) ..

# 5. 编译
make -j$(sysctl -n hw.ncpu)

# 6. 安装
sudo make install

在linux和mac上均测试

mac上显示openssl无法找到,和x86有关系,然而使用brew安装openssl@1.1却显示已经弃用

linux上一切配置似乎都正常,但是无法连接上网络,打印如下:

1
2
3
4
5
6
7
8
9
10
[14:07:27] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by                                                      command_line.py:33
'NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f2097a177c0>: Failed to establish a new connection: [Errno 101] Network is
unreachable')': /v1/embeddings
[14:09:41] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by command_line.py:33
'NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f2097a17d00>: Failed to establish a new connection: [Errno 101] Network is
unreachable')': /v1/embeddings
[14:11:54] Retrying langchain_community.embeddings.openai.embed_with_retry.<locals>._embed_with_retry in 4.0 seconds as it raised APIConnectionError: Error communicating command_line.py:33
with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/embeddings (Caused by
NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f2097a17970>: Failed to establish a new connection: [Errno 101] Network is
unreachable')).

通用注入框架

参考bilibili视频