环境小记

一、前期准备

1. Windows环境配置

1.1 概述

1.WINDOWS环境配置的难易程度因人而异,很多学员在此步骤上遇到困难。

2.LINUX系统问题较少,原因是使用者较少且版本统一,而WINDOWS系统版本繁多,导致问题多样。

3.WINDOWS系统使用ANSI编码,与常用的UTF-8编码不同,可能导致兼容性问题。

1.2 系统版本选择

1.推荐使用原版WINDOWS 10系统,避免使用精简版,以防出现未知问题。

2.查看系统版本的方法包括使用win ver命令或系统设置中的关于选项。

3.启用超级用户(类似于安卓系统的root用户)可以解决权限问题,避免某些操作失败。

2. cmd和环境变量

2.1 cmd的打开方式

1.cmd是一个常用的终端工具,在逆向工程中经常使用。

2.打开cmd的方式有多种,推荐使用快捷键win键+r键打开。

3.另一种打开方式是在指定路径下直接点击cmd,无需切换路径。

2.2 cmd的基本操作

1.显示当前路径下的所有文件,使用dir命令。

2.清屏操作,使用cls命令。

3.切换目录,使用cd命令。

4.Tab键自动补全路径。

5.复制和粘贴操作,通过右键菜单完成。

6.回到上一级目录,使用cd..命令。

7.上下键选择之前输入过的命令。

8.在cmd中运行文件,包括没有扩展名的文件。

2.4 相对路径和绝对路径

1.绝对路径从盘符开始,如E:\soft\test。

2.相对路径基于当前目录,如..\c或b。

3.CD -d命令用于在不同盘符之间切换。

2.5 环境变量的作用

1.环境变量Path用于指定程序搜索路径。

2.通过将路径添加到Path变量,程序可以在任意目录下运行。

3.环境变量的加载在启动时完成,新开的cmd窗口才能识别新的环境变量。

3.jdk的安装

3.1 jdk的介绍

1.jdk是JAVA开发工具集,包含JAVA虚拟机和一些基本的类库。

2.jdk是jre的基础上增加了开发工具,用于JAVA开发。

3.jdk的版本主要有8和17,其中8和11是长期支持版本。

3.2 jdk的下载和安装

1.jdk可以从Oracle官网或OpenJDK网站下载。

2.下载时需要注册账号并登录。

3.安装时选择合适的操作系统和版本,可以是ese或exe。

3.3 jdk的安装检测

1.安装完成后,通过cmd输入JAVA或JAVA_HOME来检测安装是否成功。

2.如果输入JAVA或JAVA_HOME能显示版本信息,则表示环境配置正确。

5.Windows注意事项

5.1 Windows路径命名规范

1.Windows系统中路径命名应避免使用中文、空格和特殊符号,以防止出现错误。

2.计算机名也应避免使用中文,以确保软件的正常运行。

3.国外软件在Windows系统中对中文路径的兼容性较差。

5.2 环境变量配置

1.安装Python时,建议将Python的安装路径和脚本路径添加到系统环境变量中。

2.通过配置环境变量,可以方便地运行Python解释器和脚本。

3.在Windows系统中,可以使用path变量来添加Python的安装路径和脚本路径。

5.3 计算机名对软件运行的影响

1.计算机名使用中文可能导致某些软件无法正常运行,尤其是国外软件。

2.修改计算机名为英文或数字可以解决某些软件运行问题。

3.在虚拟机中可以方便地修改计算机名以进行测试。

6.Android Studio

6.1 安装与配置

1.Android Studio是一个强大的IDE工具,用于安卓开发和逆向工程。

2.安装过程包括下载安装包和选择安装路径,建议不要将Android Studio安装在系统盘。

6.2 启动与配置

1.启动Android Studio时选择不导入任何配置文件。

2.选择自定义设置,并配置SDK的安装路径。

3.配置模拟器的内存和主题选择。

6.3 SDK的配置与管理

1.通过SDK Manager配置SDK,包括安装不同版本的SDK和工具。

2.选择安装安卓10(API 29)和必要的build tools、NDK和CMake。

3.安装Google USB Driver以连接谷歌手机。

6.4 创建安卓项目

1.选择创建Native C++项目以测试NDK支持。

2.输入项目名称和包名,选择保存路径和语言(Java或Kotlin)。

3.选择最小支持的SDK版本和C++标准。

6.5 工程目录结构

1.项目目录包括工程级别的配置文件和模块级别的代码文件。

2.模块目录结构包括src、main、java和gradle文件。

3.gradle文件中配置SDK版本、build tools版本和编译目标API版本。

6.6 SDK目录结构

1.SDK目录包括build tools、platform tools、USB driver和其他编译和打包工具。

2.build tools用于编译APP,platform tools用于刷机和操控手机。

6.7 配置文件位置

1.Android Studio的配置文件包括gradle和android配置文件。

2.配置文件位于C盘用户目录下,需要手动删除以重置配置。

7.ADB(Android Debug Bridge)

7.1 作用与原理

1.adb可以在电脑端操控手机,主要用于安卓应用安装和调试。

2.adb的原理是通过电脑端的客户端和服务器与手机端的adbd进程进行交互,发送指令并操控手机。

3.adb客户端和服务器在电脑端,而adbd进程在手机端。

7.2 概念与命令

1.超级adb具有root权限,不需要通过SEO申请,可以通过修改adbd源码实现。

2.超级adb可以使用两个命令:adb root和adb remount。

3.adb root使adb在root权限下运行,adb remount将system分区挂载为可读写。

7.3 超级adb配置与环境变量

1.adb在SDK的platform tools目录下,使用前需将该目录添加到环境变量中。

2.通过修改环境变量,可以在任意目录下访问adb命令。

3.添加环境变量后,需重启计算机使其生效。

8. 安卓模拟环境

8.1 安装软件

1.到官网下载9.0模拟器,并安装
https://www.ldmnq.com/

[更新!]适用于几乎所有安卓模拟器(7+)安装magisk的教程-简单无脑向
https://www.52pojie.cn/thread-1583586-1-1.html
(出处: 吾爱破解论坛)

2.下载配置文件

3.安装面具

8.2 Magisk介绍

Magisk 是一套用于定制 Android 的开源软件,支持高于 Android 5.0 的设备。

以下是一些功能亮点:

  • MagiskSU:为应用程序提供 root 访问权限
  • Magisk 模块:通过安装模块修改只读分区
  • MagiskHide:从根检测 / 系统完整性检查中隐藏 Magisk(Shamiko)
  • MagiskBoot : 最完整的安卓启动镜像解包和重新打包工具

#二、工具介绍

1.IDE

IDE(集成开发环境)- IDEA

  • IDEA介绍
  1. DEA全程InteliJ IDEA

  2. 在业界被公认为最好的Java开发工具

  3. IDEA是JetBrains公司的产品,总部位于捷克的首部布拉格

  4. 除了支持Java开发,还支持HTML、CSS、PHP、MySQL、Python等

IDE(集成开发环境)- Eclipse

  • Eclipse介绍
  1. Eclipse是开放源代码的、基于JAva的可拓展开发平台
  2. 最初是由IBM公司耗资3000万美金开发的下一代IDE开发环境
  3. 2001年11月贡献给开源社区
  4. Eclipse是目前最优秀的Java开发IDE之一

2. jadx

下载地址:Release 1.3.2 · skylot/jadx

1.jadx是一个常用的反编译工具,更新到1.3版本,功能强大。

2.jadx安装在GitHub上,提供源代码和编译好的版本。 3.安装简单,不需要安装jadx本身,只需安装7-Zip用于解压。

4.安装完成后,通过修改注册表并勾选选项,自动识别jadx。

5.jadx界面默认中文版,可用于反编译APP,生成字面文件和代码。

6.新版本jadx可以直接导出源代码,支持中文显示内存使用栏。

7.通过bat文件可以修改内存使用量,默认4GB,可改为8GB。

8.jadx支持搜索类名和源代码,具有调试功能,需配置ADB。

9.反混淆功能建议关闭,以免更改类名导致问题。

3.gda

下载地址:http://www.gda.wiki:9090/

使用free版本

4. jeb

JAD与JEB的比较

1.JAD可能反编译出的代码绿色注释部分不完整,反编译能力较弱。

2.JEB反编译能力更强,适用于JAD反编译失败的APP。

3.在JAD或JEB无法反编译的情况下,可以尝试使用定制ART虚拟机直接输出运行过程中的SMILE代码和寄存器参数进行分析。

JEB的安装与使用

1.下载JEB 4.2版本,解压后将jab.exe替换到bin目录下。

2.双击jab.exe打开软件,接受协议并生成key。

3.确保替换掉原jb.exe文件后,生成的东西才有用。

4.软件界面延迟到2033年,可以通过拖入文件进行反编译。

5.在Edit菜单下选择Language,可以切换到中文界面。

6.反编译出的JAVA代码可以在Smart Code区域查看,搜索和跳转功能也十分便捷。

7.JEB需要使用到JDK,并且JDK的大小目前最大为4GB,可以通过配置文件进行修改。

5. apktool

官方地址https://maximoff.su/**apktool**/?history=1&lang=zh

6.frida

本次安装涉及Frida 的两个组件,一个是安装到手机或模拟器中的: frida-server,另外就是装在电脑上用于逆向分析的:frida-tools

frida-server 安装

安装方法参考:最新2023:Frida完美安装方案_frida-server下载-CSDN博客

关键步骤:

将解压之后的文件push到设备中,指定到 /data/local/tmp 路径下重命名为 frida-server。

终端输入

1
2
PS D:\> adb push C:\Users\xxx\Desktop\frida-server-15.2.2-android-x86_64 /data/local/tmp/frida-server
C:\Users\xxx\Desktop\frida-server-15.2.2-android-x86...le pushed, 0 skipped. 19.4 MB/s (99542760 bytes in 4.882s)

命令行运行android设备中的frida-server。

1
2
3
4
5
PS D:\> adb shell   // 进入手机
VOG-AL00:/ # su // 确定手机是root权限
VOG-AL00:/ # cd /data/local/tmp // 进入到tmp目录下
VOG-AL00:/data/local/tmp # chmod 777 frida-server // 给执行权限,可读可写可执行
VOG-AL00:/data/local/tmp # ./frida-server //正式启动frida-server

提示:执行完毕后为运行状态。这个shell不能关闭,关闭了frida就停止了。

应用参考:Android之Frida框架完全使用指南_android frida-CSDN博客

安装 FRIDA-DEXDump

从 GitHub 仓库克隆项目并安装:

手动下载frida-dexdump

1
2
3
git clone https://github.com/hluwa/FRIDA-DEXDump.git
cd FRIDA-DEXDump
pip3 install -r requirements.txt

参考:Frida 安装 - 吾爱破解

逆向过程中,借助Frida 可以更快的实现软件的逆向破解,Frida不仅可以实现Android应用的逆向,对于IOS应用,Windows应用同样可以实现不错的效果本文可能由于frida 代码的不断更新,可能出现某些错误或者过时,大家尽量以官方文档为主:

本次安装涉及Frida 的两个组件,一个是安装到手机或模拟器中的: frida-server,另外就是装在电脑上用于逆向分析的:frida-tools

frida-server 安装

frida-server 本质上是一个二进制文件,将其拷贝到需要进行hook的系统中运行即可,下面以Android系统为例:

首先需要从 github 的仓库中下载编译好的 frida-server 文件。仓库地址:https://github.com/frida/frida

从Release中下载对应版本的文件即可。frida-server的命名规则为:frida-server-{版本号}-{支持的系统}-{CPU架构}.{压缩文件扩展名}

认准自己手机或模拟器的架构下载即可。例如我是 arm64 的 Android 手机,那么我就下载 frida-server-16.4.5-android-arm64.xz 即可

下载到合适的frida-server后,使用adb push命令将二进制文件推送到目标设备中:

1
adb push frida-server /data/local/tmp/

如果推送不成功,也可以先推送到 /sdcard/ 目录后,再使用 adb shell将 frida-server 复制到 /data/local/tmp/ 目录下

1
2
3
4
# 进入shell后,使用 su 命令切换到 root 用户
su
# 如果手机/模拟器提示需要授权,请在手机上点击授权即可,请留意手机
mv /sdcard/frida-server /data/local/tmp/

推送完成后,使用:adb shell命令进入shell,并赋予 frida-server 可执行权限

1
2
3
4
5
6
# 进入shell后,使用 su 命令切换到 root 用户
su
# 如果手机/模拟器提示需要授权,请在手机上点击授权即可,请留意手机
cd /data/local/tmp/
# 赋予 frida-server 可执行权限
chmod 777 frida-server

上述工作都做完后,可以启动 frida-server

1
2
3
4
5
6
# 进入shell后,使用 su 命令切换到 root 用户
su
# 如果手机/模拟器提示需要授权,请在手机上点击授权即可,请留意手机
cd /data/local/tmp/
# 赋予 frida-server 可执行权限
./frida-server

frida-server启动后不会有任何屏幕的提示信息。请注意这个命令行窗口不要关闭,如果命令窗口关闭后,frida-server 也会关闭

frida-tools 安装

需要注意的是,上文提到的 frida-server 需与 frida 版本保持一致,安装 frida-tools 时又会自动安装 frida 。那么如何得知 frida-tools 版本呢?

首先打开 frida 仓库:https://github.com/frida/frida, 在 Release 中寻找 frida 版本并查找到 frida 的发布日期

获取到 frida 发布日期后,打开 frida-tools 仓库:https://github.com/frida/frida-tools 寻找上述 frida 发布日期的相同或之后的一个 frida-tools 版本,请记住这个版本号!

以 Windows 系统为例,电脑中需要存在Python环境:

使用以下命令安装 frida-tools:

1
2
 复制代码 隐藏代码
pip3 install frida-tools=={frida-tools版本号}

注意:

安装 frida-tools 时会自动安装 frida 所以不要像网上某些教程教的一样分别安装, 不然有可能会出现安装失败或安装后运行时报错等问题!

如果安装时出现网络连接问题,或者一些与网络相关的错误,请多试几遍,也可使用以下方法:

  • 使用 -i 参数指定软件源:pip3 install frida-tools=={frida-tools版本号} -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 使用 --proxy 参数: pip3 install frida-tools=={frida-tools版本号} --proxy='socks5://127.0.0.1:7890'

安装完成后,使用命令frida-ps 命令验证是否安装成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\Users\LemonGo97> frida-ps
PID Name
----- ----------------------------
832 chrome.exe
27076 chrome.exe
30132 chrome.exe
22788 chrome.exe
21040 cmd.exe
30480 cmd.exe
1872 cmd.exe
13060 conhost.exe
1880 dllhost.exe
8544 explorer.exe
13700 frida-ps.exe
15032 nvcontainer.exe
26740 rundll32.exe
27464 rundll32.exe
26948 rundll32.exe
2076 rundll32.exe
9824 sihost.exe
9860 svchost.exe
9868 svchost.exe
9928 svchost.exe
11208 svchost.exe
20020 svchost.exe
10020 taskhostw.exe
10084 taskhostw.exe
...

执行命令后出现的就是当前机器的进程列表,证明 frida-tools 单独运行是没问题的。那么如何测试是否能正确的与运行在手机或模拟器中的frida-server通信呢?

将手机与电脑连接后,按照上文说的启动 frida-server ,在命令行中使用 frida-ps -U命令查看手机进程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:\Users\LemonGo97> frida-ps -U
PID Name
----- --------------------------------------------
683 ATFWD-daemon
24558 adbd
672 adsprpcd
686 alipayservice
11860 android.process.acore
22740 android.process.contacts
11653 android.process.media
690 audiod
664 bspCriticalLog
662 cnd
680 cnss-daemon
12137 com.amap.android.location
12262 com.android.incallui
24490 com.android.keyguard
22711 com.android.mms
12125 com.android.phone
14538 com.android.providers.downloads

如果执行结果如上所示,那么基本上 frida 安装已经成功了,如果出现错误,请仔细检查以上的所有步骤是否正确。

7.BinaryNinja

8.010 Editor

16进制文件编辑工具,以16进制方式打开文件。

总的(包含linux和windows以及破解软件):
链接:https://pan.baidu.com/s/1HoJfYRzuYD57BgjRmtVW-g?pwd=1ynu
提取码:1ynu

参考:010editor的安装与基本操作-CSDN博客

9.Ghidra

参考:逆向分析工具GhidraMCP 吾爱破解

   [《Ghidra简介及使用方法》学习 - 吾爱破解](https://www.52pojie.cn/forum.php?mod=viewthread&tid=1793425&highlight=Ghidra)

下载地址

从 GitHub Releases 下载对应系统的压缩包(如 ghidra_11.0_PUBLIC_YYYYMMDD.zip)。

解压文件

  • Windows:使用 WinRAR、7-Zip 或系统自带解压工具。

  • Linux/macOS

    1
    unzip ghidra_11.0_PUBLIC_*.zip -d ~/ghidra

安装依赖

Java 环境

Ghidra 需要 **Java 11+**(推荐 OpenJDK 11):

  • Windows/macOS

  • Linux

    1
    2
    sudo apt install openjdk-11-jdk  # Ubuntu/Debian
    sudo dnf install java-11-openjdk # Fedora

验证 Java 版本

1
java -version  # 输出应包含 "openjdk 11.0.x"

启动 Ghidra

Windows

  1. 进入解压后的目录 ghidra_11.0/
  2. 双击运行 **ghidraRun.bat**(可能需要管理员权限)

Linux/macOS

  1. 打开终端,进入解压目录:

    1
    cd ~/ghidra/ghidra_11.0
  2. 赋予执行权限并启动:

    1
    2
    chmod +x ghidraRun
    ./ghidraRun

首次配置

  1. 选择工作目录
    • 首次启动时,Ghidra 会提示设置项目目录(默认 ~/ghidra_projects)。
  2. 接受许可协议
    • 阅读并同意 Ghidra 的许可条款。

基础使用

(1)创建项目

  1. 点击 **File > New Project**。
  2. 选择 **”Non-Shared Project”**(个人项目),输入项目名称(如 MyFirstProject)。

(2)导入文件

  1. 在项目窗口中,右键点击项目名 → **Import File**。
  2. 选择要分析的二进制文件(如 .exe.elf.dll)。
  3. 保持默认选项,点击 **”Import”**。

(3)分析代码

  1. 双击导入的文件,Ghidra 会提示是否分析 → 点击 **”Yes”**。
  2. 选择分析选项(默认勾选所有),点击 **”Analyze”**:
    • 反编译:查看伪代码(按 F 聚焦到函数)。
    • 字符串搜索:在 Defined Strings 列表查找线索(如 flag{)。
    • 交叉引用(XRefs):右键点击函数或变量 → **”References”**。

(4)常用快捷键

  • F:聚焦到当前函数。
  • G:跳转到地址。
  • Ctrl + F:在当前视图搜索文本。
  • ;:添加注释。

高级功能

(1)脚本与插件

  • 脚本:在 Window > Script Manager 中运行 Python 脚本(如自动解密算法)。
  • 插件:将插件放入 ghidra_11.0/Ghidra/Extensions 目录并重启。

(2)版本控制

  • 支持通过 Git 管理项目(需手动配置)。

(3)反编译优化

  • 在反编译窗口右键 → “Rename Variable”“Retype Variable” 提高可读性。

常见问题

(1)启动报错 “No suitable Java version found”

  • 原因:未安装 Java 11 或环境变量配置错误。
  • 解决
    • 检查 java -version 是否为 JDK 11。
    • 手动指定 Java 路径(编辑 ghidraRun 脚本)。

(2)分析卡死

  • 原因:大文件分析内存不足。
  • 解决
    • 修改 ghidraRun 中的内存参数(如 MAXMEM=4096M)。

(3)中文乱码

  • 解决
    • 在反汇编视图右键 → “Options > Listing Fields” → 修改字体为支持中文的字体(如宋体)。

学习资源

10.HxD_Hex

HxD Hex Editor 是一款功能强大的十六进制编辑器和磁盘编辑器,它可以让你直接查看和编辑二进制文件的内容。你可以使用HxD Hex Editor来分析、修改和处理各种数据格式,包括程序文件、磁盘映像、内存转储以及其他二进制文件。

下载地址:HxD | https://mh-nexus.de/en/hxd

功能介绍

  1. 以十六进制表示方式显示文件内容,并允许直接编辑其中的字节

  2. 支持将数据按特定数据类型进行解析和显示,方便对结构化数据进行编辑和分析。

    视图 >> 位置显示数制、数据显示、字节分组大小

  3. 可用于比较两个文件的差异,以找出变更或修改的部分。

    将两个图像的数据进行对比

  4. 可以执行文本或二进制数据的搜索和替换操作,帮助定位和修改特定的数据。

    搜索 >> 搜索(Ctrl+F)……

  5. 支持将数据导入到文件中或将文件导出为不同的数据格式

    文件 >> 导出 >> ……

  6. 能够处理非常大的文件,并且在编辑和浏览时保持快速响应。

了解更多详情:https://mh-nexus.de/en/hxd/

用途
HxD Hex Editor通常用于以下几个方面:

1)帮助软件开发人员进行反汇编、调试和逆向工程。查看和修改程序的二进制代码,以理解其内部结构、修复漏洞或进行功能定制。

2)对于受损的文件或存储介质,HxD Hex Editor可以帮助您直接浏览并修复数据错误。查看和编辑二进制数据来识别并修复文件中的损坏部分,如磁盘映像、内存转储等。

3)HxD Hex Editor提供了强大的数据分析和处理功能,一些游戏会使用二进制文件格式来存储游戏数据。

11.upx

12.XVolkolak

13.radare2

Linux环境

安装radare2

1
2
3
4
5
6
7
8
9
sudo apt install -y gcc make cmake curl git  gcc-multilib
git clone https://github.com/radare/radare2.git
cd radare2
./sys/install.sh

# 卸载

make uninstall
make purge

window环境

参考:

在Windows平台下的使用radare2进行调试-外文翻译-看雪

在Windows上安装Radare2并配置r2pipe库的步骤如下:

下载正确的文件

访问 Radare2 5.9.8 发布页面,在 Assets 部分找到以下文件:

  • radare2-5.9.8-w64.zip
    • 这是 64 位 Windows 系统的预编译版本,适用于天选2笔记本(现代笔记本通常为 64 位系统)。

安装步骤

  1. 下载文件:点击 radare2-5.9.8-w64.zip 下载压缩包。

  2. 解压文件:将压缩包解压到任意目录(例如 C:\radare2)。

  3. 配置环境变量

    • 将 Radare2 的 bin 目录(如 C:\radare2\bin)添加到系统 PATH 环境变量。
    • 步骤
      1. 右键点击“此电脑” → 属性 → 高级系统设置 → 环境变量 → 编辑系统变量 Path → 添加 C:\radare2\bin
  4. 验证安装

    • 打开命令提示符(CMD 或 PowerShell),输入:

      1
      r2 -v
    • 输出应显示版本信息:radare2 5.9.8 ...

  5. 打开命令提示符(CMD)或PowerShell,并导航至Radare2所在目录。使用以下命令:

    1
    cd C:\radare2
  6. 在该目录下执行以下命令来运行Radare2:

    1
    r2.exe
  7. 这将启动Radare2交互式环境。

    验证Radare2是否正确安装。在Radare2交互式环境中,输入?help命令查看帮助文档。

    接下来,您可以通过pip来安装r2pipe库。请确保您已经安装了Python和pip。

    打开命令提示符或PowerShell,并运行以下命令来安装r2pipe库:

    1
    pip install r2pipe

    安装完成后,您可以在Python脚本中导入并使用r2pipe库与已安装的Radare2进行交互了。

以上是在Windows上安装和配置Radare 2及r2pipe库的基本步骤。根据系统和安装方式,可能会有细微差异,请参考官方文档或社区支持寻求更详细的帮助。

安装程序都将radare2.exe以及其他工具放在C:/users /username ``/ AppData目录中。 我必须从命令行将目录切换到该文件夹才能使用可执行文件。 为了从命令行的任何位置访问该文件,必须将该目录添加到$ PATH环境变量中。 这计算机用来查找可以从系统的任何位置运行的命令和应用程序的变量。
要设置你的$ PATH变量,你可以通过以下两种方法之一来完成。 您可以通过转到系统属性 ->高级 ->环境变量来使用Windows GUI进行更改,单击路径变量并单击编辑。 然后你可以添加你的radare2文件的目录。

命令行使用方法

Radare2 在命令行下有一些小工具可供使用:

  • radare2:十六进制编辑器和调试器的核心,通常通过它进入交互式界面。
  • rabin2:从可执行二进制文件中提取信息。
  • rasm2:汇编和反汇编。
  • rahash2:基于块的哈希工具。
  • radiff2:二进制文件或代码差异比对。
  • rafind2:查找字节模式。
  • ragg2:r_egg 的前端,将高级语言编写的简单程序编译成x86、x86-64和ARM的二进制文件。
  • rarun2:用于在不同环境中运行程序。
  • rax2:数据格式转换。

radare2/r2

参数很多,这里最重要是 file。如果想 attach 到一个进程上,则使用 pid。常用参数如下:

  • -A:相当于在交互界面输入了 aaa
  • -c:运行 radare 命令。(r2 -A -q -c 'iI~pic' file
  • -d:调试二进制文件或进程。
  • -a,-b,-o:分别指定体系结构、位数和操作系统,通常是自动的,但也可以手动指定。
  • -w:使用可写模式打开。

rabin2

拿到一个二进制文件时,第一步就是获取关于它的基本信息,这时候就可以使用 rabin2。rabin2 可以获取包括 ELF、PE、Mach-O、Java CLASS 文件的区段、头信息、导入导出表、数据段字符串、入口点等信息,并且支持多种格式的输出。

下面介绍一些常见的用法:

  • -I:最常用的参数,它可以打印出二进制文件信息,其中我们需要重点关注其使用的安全防护技术,如 canary、pic、nx 等。(filechekcsec -f
  • -e:得到二进制文件的入口点。(`readelf -h`)
  • -i:获得导入符号表,RLT中的偏移等。(readelf -r
  • -E:获得全局导出符号表。
  • -s:获得符号表。(readelf -s
  • -l:获得二进制文件使用到的动态链接库。(ldd
  • -z:从 ELF 文件的 .rodare 段或 PE 文件的 .text 中获得字符串。(strings -d
  • -S:获得完整的段信息。(readelf -S
  • -c:列出所有类,在分析 Java 程序是很有用。

最后还要提到的一个参数 -r,它可以将得到的信息以 radare2 可读的形式输出,在后续的分析中可以将这样格式的信息输入 radare2,这是非常有用的。

rasm2

rasm2 是一个内联汇编、反汇编程序。它的主要功能是获取给定机器指令操作码对应的字节。

下面是一些重要的参数:

  • -L:列出目标体系结构所支持的插件,输出中的第一列说明了插件提供的功能(a=asm, d=disasm, A=analyze, e=ESIL)。
  • -a:知道插件的名字后,就可以使用 -a` 来进行设置。
  • -b:设置CPU寄存器的位数。
  • -d:反汇编十六进制对字符串。
  • -D:反汇编并显示十六进制对和操作码。
  • -C:汇编后以 C 语言风格输出。
  • -f:从文件中读入汇编代码。

rahash2

rahash2 用于计算检验和,支持字节流、文件、字符串等形式和多种算法。

重要参数:

  • -a:指定算法。默认为 sha256,如果指定为 all,则使用所有算法。
  • -b:指定块的大小(而不是整个文件)
  • -B:打印处每个块的哈希
  • -s:指定字符串(而不是文件)
  • -a entropy:显示每个块的熵(-B -b 512 -a entropy

radiff2

radiff2 是一个基于偏移的比较工具。

重要参数:

  • -s:计算文本距离并得到相似度。

  • -AC:这两个参数通常一起使用,从函数的角度进行比较。

  •   -g
      
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149

    :得到给定的符号或两个偏移的图像对比。

    - 如:`radiff2 -g main a.out b.out | xdot -`(需要安装xdot)

    - `-c`:计算不同点的数量。

    #### rafind2

    rafind2 用于在二进制文件中查找字符模式。

    重要参数:

    - `-s`:查找特定字符串。
    - `-e`:使用正则匹配。
    - `-z`:搜索以`\0`结束的字符串。
    - `-x`:查找十六进制字符串。

    #### ragg2

    ragg2 可以将高级语言编写的简单程序编译成 x86、x86-64 或 ARM 的二进制文件。

    重要参数:

    - `-a`:设置体系结构。
    - `-b`:设置体系结构位数(32/64)。
    - `-P`:生成某种模式的字符串,常用于输入到某程序中并寻找溢出点。
    - -r:使用原始字符而不是十六进制对。
    - ragg2 -P 50 -r`
    - -i:生成指定的 shellcode。查看-L。
    - `ragg2 -a x86 -b 32 -i exec`
    - `-e`:使用指定的编码器。查看 `-L`。

    #### rarun2

    rarun2 是一个可以使用不同环境、参数、标准输入、权限和文件描述符的启动器。

    常用的参数设置:

    - `program`
    - `arg1`, `arg2`,…
    - `setenv`
    - `stdin`, `stdout`

    #### rax2

    rax2 是一个格式转换工具,在二进制、八进制、十六进制数字和字符串之间进行转换。

    重要参数:

    - `-e`:交换字节顺序
    - `-s`:十六进制->字符
    - `-S`:字符->十六进制
    - `-D`, `-E`:base64 解码和编码

    ## 14.Strings

    ## ZipRepair

    ## x64dbg

    x64dbg 是一款开源的、目前仍在积极开发中的 x32/x64 位动态调试器。其界面及操作方法与 [OllyDbg](https://www.52pojie.cn/thread-350397-1-1.html) 类似,和 OllyDbg 不同的是它可以对 64 位程序进行调试。此外,其开放式的设计给了此软件很强的生命力。通过爱好者们不断的修改和扩充,使其功能越来越强大。
    该调试器(目前)有三部分:DBG、GUI、Bridge:
    DBG 是调试器的调试部分。它处理调试技术(使用 TitanEngine 引擎,近来还新增了 Gleebug 引擎),并为 GUI 提供数据。
    GUI 是调试器的图形部分。它建立在 Qt 上,并提供用户交互界面。
    Bridge 是 DBG 和 GUI 部分的通信库(将来也许是在更多的部件之间)。Bridge 可用于在新建功能上工作,而无需更新代码的其他部分。

    **汉化修订说明:**

    1. 对 x64dbg 帮助文档的主要内容进行了汉化,并按照最新版进行了修订、补译。对界面字体以及布局重新进行了设置。将默认调用在线英文帮助更改为调用本地中文帮助文件。
    2. 为帮助用户更好地了解 x64dbg 反汇编后的 CPU 汇编指令信息,对汇编指令的“助记符摘要”全部进行了汉化。对“助记符帮助”进行了部分汉化。汇编指令的汉化参考了“清华大学出版社”出版的《汇编语言程序设计教程》(第4版) 中术语,因此可能与其他软件的汉化术语略有不同。
    3. 对 Scylla 插件等进行了全面汉化。
    4. 对 x64dbg 官方中文版的汉化错误及不一致处进行了修订,并与帮助文档的关键词进行了统一。
    5. 对中文版界面的字体进行了重新设置,使其更为美观。
    6. 对“暗黑”主题界面颜色的默认值进行了调整,使代码显示更为清晰。并对主题的“选项>外观”对话框中的“颜色”和“字体”标签的排列错位进行了调整。
    7. 本次更新集成了可在“CPU”界面搜索中文字符串引用的 x64dbg_tol 插件。
    8. 本次更新版本修改了启动条件,改为直接以管理员权限启动。
    9. 本次去除了新版本主程序的数字签名,解决了某些 DLL 文件的非标字串不能汉化的问题。

    在x64dbg中设置条件断点 – by elecs@看雪学院
    https://bbs.pediy.com/thread-251385.htm

    x64dbg Plugin Manager 第三方人员开发的插件管理器
    https://github.com/horsicq/x64dbg-Plugin-Manager

    官网:https://x64dbg.com/

    x64dbg官方下载地址(软件原版已经自带简体中文语言)
    https://github.com/x64dbg/x64dbg/releases
    https://sourceforge.net/projects/x64dbg/files/snapshots

    x64dbg 简体中文版(Jan 6 2024): https://www.lanzouu.com/iuFXx1l65ush

    ## IDA pro

    参考:[IDA Pro 9 安装和插件配置-安全工具-看雪](https://bbs.kanxue.com/thread-285604.htm#msg_header_h1_1)

    ### IDA Pro 9.0.241217 SP1

    打包了配置好的IDA9 SP1,设置IDAPython路径即可使用

    附件:

    - IDAPlugins.zip

    - IdaPro9Beta-Keygen-iRabbit.py

    - IDA Professional 9.0.7z

    链接: https://pan.baidu.com/s/1eCmxbP6nNHm5qz41rFbetg?pwd=5hdq

    参考如下步骤

    1. 运行ida-pro_90sp1_x64win.exe安装ida
    2. 修改IdaPro9Beta-Keygen-iRabbit.py文件的部分内容,复制到ida根目录
    3. python运行keygen,自动修补
    4. 修改patched文件后缀,替换ida.dll和ida32.dll(注意保存原始文件)

    ### IDA Pro 9.1.250226

    相比之下9.1修了不少bug,分析程序更快更丝滑,还有signatures-bundle和IDA Feeds可以使用

    实测9.0的patch脚本可用于9.1,并且大部分9.0的插件可用于9.1,由于二者配置方法类似便不多赘述

    更新部分如下(2025/04/14):

    1. 初始化IDA

    参考Binwalker师傅编写的7.7绿色版的IDA_InitTool

    使用python实现禁用IDA自动更新和设置IDAPython路径的功能(默认使用嵌入的python3.11.9

    2. 配置和使用IDA Feeds插件

    泄露文件中包括了符号库signatures-bundles-9.1.zip,物尽其用配置了一波该插件

    3. 配置和使用IDA MCP插件

    实测自动化分析效果和WPeChatGPT差不多,但能看到分析过程,需要注意消耗的token更多

    提供配置好的IDA9.1压缩包,初次使用前运行InitIDA.exe后即可使用(WPeChatgpt需要手动配置api和模型)
    IDA Professional 9.1.7z 链接: https://pan.baidu.com/s/16Hk9FjEygb1yohUzblxdFw?pwd=8put 提取码: 8put



    ## **GDB(Linux)**

    1. 安装:

    sudo apt install gdb
    1
    2
    3

    2. 基础命令:

    gdb ./target # 加载程序 break main # 在main函数下断点 run # 运行 ni # 单步执行 info registers # 查看寄存器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318



    # IDA Pro快速上手

    参考:[IDA Pro的使用CSDN](https://blog.csdn.net/Python_0011/article/details/146866529)

    来源:BUUCTF 题目:easyre

    ## 打开软件

    打开IDA,会看到 "New" 和 "Go" 两个选项。"New" 是直接打开程序,"Go" 是先启动 IDA 界面。

    选 "Go",启动后,在菜单栏里点 "File" -> "Open",找到要分析的程序。然后会跳出个窗口,默认设置就好。

    ### 加载文件配置窗口

    这个界面是一个IDA Pro或类似的逆向工程软件在加载可执行文件时显示的配置对话框。以下是各部分的解释:

    **1. 文件加载信息**

    - **`Load file F:\AA-Reversing\BUUCTF\easyre\easyre.exe as`**
    表示正在加载的可执行文件路径和名称(`easyre.exe`),并询问以何种格式解析该文件。
    提供的选项包括:
    - **Portable executable for AMD64 (PE) [pe.dll]**:将文件解析为64位PE格式(Windows可执行文件)。
    - **MS-DOS executable (EXE) [dos.dll]**:将文件解析为MS-DOS格式(旧版兼容模式)。
    - **Binary file**:直接以二进制文件形式加载(无自动解析)。

    **2. 处理器类型(Processor type)**

    选择目标文件的CPU架构,通常工具会根据文件头自动识别,但也可手动调整。例如:

    - **Intel Pentium protected with MMX**:保护模式下的x86指令集(常见于Windows/Linux可执行文件)。
    - **Intel Pentium real with MMX**:实模式(常见于DOS程序)。
    - **MetaPC**:通用反汇编模式。
    - **Intel 860**:较少见的架构(通常不用于常规逆向)。

    **3. 加载段配置(Loading segment/offset)**

    - **Loading segment 0x0000000000000000**
    指定代码段的起始地址(通常PE文件会从`0x00400000`开始,此处可能是默认值或手动输入)。
    - **Loading offset 0x0000000000000000**
    指定文件在内存中的偏移量(与段地址配合使用)。

    **4. 分析选项(Analysis/Options)**

    - **Enabled**:是否启用自动分析(如识别函数、字符串等)。
    - **Create segments**:自动创建代码/数据段。
    - **Load resources**:加载PE文件的资源部分(如图标、字符串表)。
    - **Fill segment gaps**:填充段之间的空隙(对齐内存)。
    - **Create FLAT group**:将段合并为平坦内存模型(简化地址计算)。
    - **Manual load**:手动加载(高级用户自定义配置)。

    **5. 底部按钮**

    - **OK**:确认配置并加载文件。
    - **Cancel**:取消加载。
    - **Help**:查看帮助文档。

    **用户操作建议**

    1. **保持默认选项**:如果是标准的Windows PE文件(如`easyre.exe`),直接选择`Portable executable for AMD64`并点击`OK`。
    2. **手动调整**:若文件特殊(如加壳、混淆),可能需要修改处理器类型或关闭自动分析。
    3. **错误处理**:如果加载后代码混乱,可能是架构选错,需重新尝试其他选项。

    这个界面主要用于确保工具正确解析文件结构和指令集,是逆向工程的第一步。

    ### **DWARF调试信息** 配置窗口

    检测到目标文件中包含 **DWARF调试信息** 时弹出的配置对话框。

    DWARF是一种常见的调试数据格式(主要用于ELF文件,如Linux/gcc编译的程序),包含函数名、变量类型、源代码行号等高级信息。以下是各选项的详细解释:

    **1. 核心选项**

    - **`Global names`**
    加载全局变量和符号的名称(如`g_counter`)。勾选后,逆向时能看到更有意义的变量名。
    - **`Functions`**
    **(默认勾选)** 加载函数名和边界信息(如`main()`、`sub_401000`会被替换为原始函数名)。
    - **`Use function bounds`**
    严格按DWARF信息定义函数范围(避免工具错误分割函数)。

    **2. 类型与调用约定**

    - **`Types (uncheck for speed)`**
    **(默认勾选)** 加载变量/结构体的类型信息(如`int`、`char*`)。取消勾选可加快加载速度,但会丢失类型提示。
    - **`Apply calling conventions`**
    **(默认勾选)** 应用DWARF中记录的调用约定(如`cdecl`、`fastcall`),确保反汇编的调用逻辑准确。
    - **`Allow __usercall`**
    **(默认勾选)** 支持非标准调用约定(如用户自定义的寄存器传参方式)。
    - **`Function prototypes are definitive`**
    **(默认勾选)** 强制使用DWARF中的函数原型(覆盖工具的自动推断)。

    **3. 源代码关联**

    - **`Import file names/line numbers`**
    关联源代码文件名和行号(需DWARF中包含编译路径信息)。勾选后,反汇编窗口可能显示类似`/home/user/src/main.c:10`的注释。

    **4. 底部按钮**

    - **`Yes`** 确认加载DWARF信息(推荐勾选所需选项后点击)。
    - **`No`** 忽略DWARF信息,仅按二进制文件分析。

    **用户操作建议**

    1. **常规逆向**:保持默认勾选(尤其是`Functions`和`Types`),以获取最大信息量。
    2. **性能优先**:若文件较大,可取消`Types`或`Import file names/line numbers`加速加载。
    3. **混淆/优化代码**:若DWARF信息可能被篡改(如某些CTF题目),可关闭`Function prototypes are definitive`,避免误导。
    4. **无源码调试**:即使勾选`Import file names/line numbers`,若DWARF中路径无效,则不会显示行号。

    ### **为什么重要?**

    DWARF信息能极大提升逆向效率,例如:

    - 直接显示`main()`而非`sub_401000`。
    - 恢复结构体字段名(如`struct.user.name`)。
    - 识别库函数调用(如`strcpy`的参数类型)。
    但需注意:**发布版本通常剥离DWARF**,此界面多见于开发/调试版本。

    ## 窗口介绍

    主窗口界面:

    - **函数窗口 (Functions window):**

    在左侧的就是函数窗口,所有的后汉书都在此窗口列出。

    拿到一个题目,一般从main函数开始,但main函数通常不会直接显示出来,所以需要点击窗口后用Ctrl+F搜一下。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/IDA_Functions%20window.png)

    - **汇编窗口 (IDA views):**

    这块是汇编代码的地盘,有两种显示方式:

    1.图形模式

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/ImageBed@main/202507031543842.png)

    2.文本模式

    在图形模式下,右键选 "Text view" 或者按空格键就能切换到文本模式。

    展示汇编代码和地址。![](https://cdn.jsdelivr.net/gh/tangxtang1119/ImageBed@main/202507031543843.png)

    - **伪代码窗口:**

    在汇编窗口文本模式中,对着函数按 `F5`,就能看到伪代码,把汇编语言变成了更易读的伪代码。

    ![image-20250505180517503](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/IDA_views%E4%BC%AA%E4%BB%A3%E7%A0%81.png)

    - **十六进制窗口:**

    虽然叫“十六进制窗口”,但它其实能显示各种格式,还能当十六进制编辑器用。默认情况下,它会显示程序的十六进制代码和对应的 ASCII 字符,每行 16 个字节。可以同时打开好几个十六进制窗口。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505051809928.png)

    - **消息窗口:**

    会显示 IDA 输出的信息,比如文件分析状态、操作错误等等,就像 Pycharm 的 Console 控制台。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505051810911.png)

    - **导航栏:**

    导航栏就是那条彩色的水平带,它能线性地展示被加载文件的地址空间。默认情况下,它会显示整个二进制文件的地址范围。右击导航栏,会显示一个提示,告诉你光标所在位置对应二进制文件中的哪个位置。

    简单来说,点哪儿跳哪儿,不同的颜色代表不同的数据段,比如 data 段、text 段等等。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505051811379.png)

    ## 修正

    IDA在加载文件的时候会有些错误,需要手动纠正。

    1. 函数修正:

    通常以 push ebp/rbp 指令开头的地址是函数的起始地址,但 IDA 有时会认错。这时候,在起始地址的汇编代码处,按快捷键 P (或者右键选 "Create Function"),就能把它变成函数。

    2. 指令修正:

    如果 IDA 把某些指令识别错了,选中后按快捷键 D 就能手动修正。

    3. 数据修正:

    在数据段,一个数据的长度可能是 1/2/4/8 字节,用快捷键 D 可以修改类型。如果某部分数据是字符串但没被正确识别,按快捷键 A 就能把它变成 ASCII 字符串。

    ## 注释和重命名

    - **重命名:**

    在 IDA 里,你可以修改变量名、函数名等等,方便理解代码。在需要重命名的地方右键,选 "Rename" 就行。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505051817181.png)

    - **注释:**

    快捷键 `;` 可以在反汇编窗口加注释,快捷键 `/` 可以在反编译窗口加注释。IDA 还能自动给不常用架构的代码加注释,在 "Auto comments" 那里勾选就行。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505051825870.png)

    ## 交叉引用

    - **代码交叉引用:**

    表示一个指令把控制权交给另一个指令,能帮忙了解指令和指令、指令和函数之间的调用关系。

    - **数据交叉引用:**

    用于追踪二进制文件访问数据的情况,能让知道指令和数据之间有啥关系。这部分需要比较扎实的汇编知识。

    ## 常用快捷键

    - F5:

    在汇编窗口里按 F5,能生成对应函数的伪代码。

    * Ctrl+F5:

    可以把伪代码导出保存下来。

    * Shift+F12:

    在汇编窗口里按 Shift+F12,能打开字符串窗口。所有字符串都在这儿展示,你可以搜一些关键字符串。双击某个字符串,就能跳到汇编窗口中该字符串对应的位置。用 Ctrl+F 可以查找字符串。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505051953784.png)

    - **Ctrl+X (交叉引用):**

    在汇编窗口中,用 `Ctrl+X` 可以查看哪些函数引用了这个字符串或数据。点 "OK" 会跳到相应位置。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505051955880.png)

    - **Alt+T (文本搜索):**

    IDA 文本搜索相当于在反汇编列表窗口文本模式下搜索子字符串。搜到字符串后,会自动跳到汇编窗口中对应的位置。

    它只会查找完整的词,包括操作码助记符或常量。

    选 "Find all occurences",IDA 会在一个新窗口里显示所有搜索结果,方便你快速定位。

    - **跳转地址:**

    汇编窗口左边是地址,右边是汇编代码。

    在浏览代码的时候,可能会迷路。或者你知道想去的目标地址,但反汇编窗口里没有可供双击导航的名称。这时候,用 `G` 就能跳到指定位置。

    - **N (重命名):**

    可以把一些函数名或者变量名改成方便理解的名字。

    - **Ctrl+Z (撤回操作):**

    不小心改错了,Ctrl+Z回到上一步。

    ## 数据类型转换快捷键

    当flag 是 16 进制 ASCII 值时,可以靠快捷键搞定。

    - D (转换成数据形式):

    分析数据时,有时候需要把字符串转换成数据。

    * A (转换成字符形式):

    转换成字符串。

    * C (转换成汇编代码):

    转换成汇编代码。

    * U (转成原始字符):

    转换成最原始的状态。

    * Shift+E (导出数据):

    导出数据,选中后按 Shift+E,选你想导出的方式。

    - **数据转化形式:**

    分析伪代码时,有时候要对数据进行类型转化。右键数据,会出现这些选项:

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505052002733.png)

    - Hexadecimal: 十六进制
    - Octal: 八进制
    - Char: 字符
    - Enum: 枚举

    main函数翻成伪代码后:

    ````java
    int __fastcall main(int argc, const char **argv, const char **envp)
    {
    int b; // [rsp+28h] [rbp-8h] BYREF
    int b_1; // [rsp+2Ch] [rbp-4h] BYREF

    _main();
    scanf("%d%d", &b_1, &b);
    if ( b_1 == b )
    printf("flag{this_Is_a_EaSyRe}");
    else
    printf("sorry,you can't get flag");
    return 0;
    }
    ````

    分析出 `main` 函数的逻辑是:**输入两个相同的数字 → 输出 flag**

    ## **解题方法**

    ### **方法 1:直接运行程序并输入相同数字**

    1. **运行程序**(如果是 Windows 的 `.exe`,直接双击;如果是 Linux 的 ELF,用 `./program` 运行)。

    2. **输入两个相同的数字**,比如:

    123 123
    1
    2
    3

    3. **程序输出 flag**:

    flag{this_Is_a_EaSyRe}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117

    ### **方法 2:直接修改二进制文件(硬编码绕过检查)**

    如果不想手动输入,可以修改汇编代码,让程序直接输出 flag(适用于逆向题目):

    1. 用 **IDA/Ghidra** 找到 `if (b_1 == b)` 的判断部分。
    2. 把 `JNE`(跳转如果不相等)改成 `JMP` 或 `NOP`,让程序直接执行 `printf("flag{...}")`。
    3. 保存修改后的程序,运行即可直接得 flag。



    # IDA Pro MCP 逆向分析利器

    参考:[AI逆向50页长文掌握 IDA Pro MCP 逆向分析利器](https://bbs.kanxue.com/thread-286813.htm)

    ## 步骤一:准备大模型 API Key

    要使用 IDA Pro MCP,首先需要一个大模型服务的 API Key。

    ### DeepSeek

    - **官方网站:** [https://www.deepseek.com/](https://bbs.kanxue.com/elink@cc8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2V1k6h3g2H3M7$3g2W2K9#2)
    - **API 管理平台:** [https://platform.deepseek.com/usage](https://bbs.kanxue.com/elink@fa1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3L8r3q4@1k6X3!0J5L8g2)

    根据平台的指引完成实名认证和充值,在API管理页创建一个新的API Key。

    `务必妥善保管API Key,防止泄露!!!`

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/ImageBed@main/202507031543844.png)

    在充值后,在liunx系统使用curl命令测试api是否可用。

    将 `<DeepSeek API Key>` 替换为自己的 Key

    ````
    curl https://api.deepseek.com/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <DeepSeek API Key>" \
    -d '{
    "model": "deepseek-chat",
    "messages": [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
    ],
    "stream": false
    }'
    ````

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505220917980.png)

    如果终端成功输出了 AI 的回复消息,则表示 DeepSeek API Key 配置成功.

    ## 步骤二:选择并配置 MCP 客户端

    ### 客户端一:VS Code 插件 (Cline / RooCode)

    Cline 和 RooCode 是两款支持 MCP 的 VS Code 插件,可以将 VS Code 作为 IDA Pro MCP 的客户端。

    #### 安装

    “扩展”,插件cline或RooCode

    #### 初始化配置

    进行初始化配置,主要是设置大模型API Key

    1. 打开其中一个插件的设置界面,点击插件图标(或是用命令面板Ctrl+Shift+P/Cmd+Shift+P走索插件名称找到。)

    2. 选择“使用自己的PAPI Key”(Use your own API key)

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505220931666.png)

    3. 配置 API Key

    根据选择的 API 服务商进行配置:

    - **DeepSeek:**
    - 选择 `API Provider` 为 `DeepSeek`。
    - 在 `API Key` 字段中填入 DeepSeek API Key。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505220933934.png)

    **语言设置(Preferred Language)**

    - **简体中文**:强制工具(如Cline插件)始终以中文与你交互,即使你的提问包含其他语言。
    - **作用场景**:例如当你输入英文问题时,工具仍会用中文回答。

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505220957109.png)

    ## 步骤四:部署 IDA Pro MCP (Windows)

    1. **配置python环境**

    Windows 环境需要安装 Python 3.11 或更高版本

    已安装python使用的版本为3.12.6

    2. **切换 IDA Pro 的 Python 环境**

    告知 IDA Pro 使用安装的 Python 3.12.6,cmd中执行

    ````
    "F:\IDA Professional 9.1\idapyswitch.exe" --force-path "E:\python\python3,dll"
    ````

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/Pictures@master/202505221043566.png)

    成功执行后通常没有输出。

    3. **安装 ida-pro-mcp Python 包**

    下载 `uv` 包

    #### 分步安装依赖

    如果直接安装失败,先安装小体积依赖包,再尝试安装 `uv`:

    # 先安装其他小包(如有必要) pip install numpy pandas -i https://pypi.tuna.tsinghua.edu.cn/simple # 再安装 uv pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    使用 Python 的 pip 来安装 `ida-pro-mcp`。

    之后所有 pip 安装都会默认使用清华源,**永久配置镜像源**(推荐)

    ````
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    ````

    **临时指定镜像源**:在命令中添加 `-i` 参数:

    pip install --upgrade git+https://github.com/mrexodia/ida-pro-mcp -i https://pypi.tuna.tsinghua.edu.cn/simple
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39

    4. **安装 MCP 插件到 IDA Pro**

    执行安装命令将插件复制到 IDA Pro

    使用命令查找`ida-pro-mcp.exe` 可执行文件的路径。

    ````
    pip show -f ida-pro-mcp
    ````

    输出信息:

    ````
    Name: ida-pro-mcp
    Version: 1.3.0
    ...
    Location: E:\python\Lib\site-packages# <--- 包安装位置
    Requires: mcp
    Required-by:
    Files:
    ..\..\Scripts\ida-pro-mcp.exe# <--- 可执行文件相对路
    ..\..\Scripts\idalib-mcp.exe
    ida_pro_mcp-1.3.0.dist-info\INSTALLER
    ...
    ````

    可得绝对路径:E:\python\Scripts\ida-pro-mcp.exe

    执行安装命令:

    ````
    "E:\python\Scripts\ida-pro-mcp.exe" --install
    ````

    ![](https://cdn.jsdelivr.net/gh/tangxtang1119/ImageBed@main/202507031543845.png)

    ​ **MCP 服务器配置生成**,这是 **MCP 服务器的标准配置模板**,需手动添加到对应工具的配置文件中。

Installed IDA Pro plugin (IDA restart required)
Plugin: C:\Users\tangxtang\AppData\Roaming\Hex-Rays\IDA Pro\plugins\mcp-plugin.py


- **核心功能已部署**,插件文件已复制到 IDA 的插件目录。
- 需要 **重启 IDA** 才能生效。
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2025 唐小唐
  • 访问人数: | 浏览次数: