ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【0day安全实验一】1.4 Crack小实验:用IDA Pro与OllyDbg定位校验分支并改到TaoToken

【0day安全实验一】1.4 Crack小实验:用IDA Pro与OllyDbg定位校验分支并改到TaoToken 1. 从一段密码校验代码说起逆向入门为什么要先学 Crack 小实验如果你刚开始接触逆向工程大概率会被 IDA Pro 里密密麻麻的汇编和 OllyDbg 里跳来跳去的寄存器劝退。我建议你别一上来就啃加壳的商业软件先拿一个自己写的、逻辑最简单的密码校验程序练手。这个 Crack 小实验就是干这个的用 VC 6.0 编译一个十几行的 C 程序然后用 IDA Pro 静态定位关键校验分支用 OllyDbg 动态跟踪寄存器与跳转最后用 LordPE 算文件偏移、用 UltraEdit 改一个字节让程序逻辑彻底反过来。这个实验能让你真正搞懂三件事第一高级语言里的if/else在汇编层面长什么样第二虚拟内存地址VA和文件偏移地址FOA到底怎么换算第三为什么改一个字节就能让程序行为反转。这三件事是后面所有逆向工作的地基。实验环境建议用 Win7 32 位虚拟机因为 OllyDbg 和 LordPE 在 64 位系统上兼容性一般VC 6.0 也是老古董32 位环境最省心。工具清单IDA Pro 32、OllyDbg、LordPE、UltraEdit。目标程序就是一个控制台 exe输入1234567显示通过输入别的显示错误。写代码的时候有个细节要注意verify_password函数返回strcmp的结果main里用if(valid_flag)判断。strcmp相等返回 0不等返回非 0所以valid_flag为 0 时走“正确”分支。这个逻辑在汇编里就是一个test加一个条件跳转找到那个跳转改掉它游戏就结束了。编译时用 VC 6.0 的默认 Release 或 Debug 都行Debug 版更好跟因为符号和栈帧清晰。生成 exe 后先跑一遍确认行为输入1234567出 congratulations输入1111111出 incorrect password。确认无误再拖进 IDA。这里插一句很多新手卡在“找不到关键分支”。IDA 的流程图Graph View是救星按空格在图形和汇编之间切换找那个分叉的菱形节点通常就是if的入口。点进去看条件跳转指令记下它的虚拟地址这个地址就是后面 OllyDbg 下断点的依据。整个实验的核心链路是IDA 找地址 → OllyDbg 验证跳转 → LordPE 算偏移 → UltraEdit 改字节 → 运行验证。每一步都有明确的输入输出不会让你猜。做完这一遍你对 PE 文件结构和 x86 条件跳转的理解会从“背概念”变成“手上过”。2. TaoToken 前置准备把工具链的 API 端点统一到一条 Key 通道这个 Crack 实验本身是纯本地逆向不依赖网络。但实验做完之后你可能会想能不能把逆向分析里用到的辅助工具、脚本、或者后续的自动化分析流程统一走一个 API 端点来管理比如你写了个 Python 脚本批量提取 PE 节信息或者用某个模型辅助解释汇编片段这些请求如果散落在各个平台Key 管理会很乱。TaoToken 在这里的角色就是一个统一的 API 通道把不同模型的调用收敛到一个 Base URL 和一把 Key 上。先说清楚TaoToken 不是逆向工具也不替代 IDA 或 OllyDbg。它是一个 API 聚合入口官网是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 端点是https://taotoken.net/api。你可以在它的控制台里创建 API Key然后让支持自定义 Base URL 的客户端或脚本指向这个端点。为什么逆向场景会用到它举个例子你分析一个二进制时想把某段汇编贴给模型让它解释“这段代码在做什么”如果直接用官方 SDK你得为每个模型单独配 Key、单独处理计费。用 TaoToken 的话Base URL 统一成https://taotoken.net/apiModel ID 按需切换Key 只有一把。对于写自动化分析脚本的人来说少维护几套凭证就是省时间。前置准备分三步。第一步打开官网注册并登录进入控制台。第二步在 API Keys 页面创建一个新 Key复制保存后面配置要用。第三步确认你要用的客户端支持自定义 Base URL。目前主流的方式是设置环境变量比如OPENAI_BASE_URL或ANTHROPIC_BASE_URL具体取决于你用的工具。如果你用的是 Claude Code 这类编码 Agent它的配置方式通常是改settings.json或环境变量。TaoToken 提供了对应的接入文档路径在官网的 doc 页面。Coding Plan 适合长期编码和 Agent 场景模型对话适合临时验证模型输出API Keys 页面则是拿 Key 的地方。这三个入口按需使用不要只记首页。有一点要提醒TaoToken 的 API 端点是https://taotoken.net/api注意结尾没有斜杠配置时别多加。Key 的权限在控制台里可以限制建议按项目分 Key方便排查问题。如果你只是做本地逆向实验不涉及网络请求这一章可以先跳过等需要自动化辅助时再回来配。配置完成后你可以用一条最简单的 curl 验证连通性。命令里把$TAOTOKEN_KEY换成你实际的 KeyModel ID 换成控制台里支持的模型名。返回 200 且 body 里有正常响应就说明通道通了。这一步不做的话后面写脚本时遇到 401 会浪费很多时间。3. 可复制配置IDA 定位、OllyDbg 断点与 TaoToken 端点设置这一章给你可以直接抄的配置和操作步骤。先声明逆向部分针对的是你自己编译的练习程序不要用于任何未授权的软件。3.1 IDA Pro 静态定位关键跳转把 exe 拖进 IDA Pro 32等待自动分析完成。在 Functions 窗口找到verify_password和main。双击main按空格切到 Graph View。你会看到call verify_password之后有一个test eax, eax或cmp指令紧接着一个条件跳转。这个跳转就是if(valid_flag)的汇编实现。点击那个分叉节点再按空格切到汇编视图。记下条件跳转指令的虚拟地址实验里是0x004010D5指令是je74 开头。这个地址和字节值后面都要用。IDA 底部状态栏会显示当前地址右键可以复制。3.2 OllyDbg 动态断点与跳转验证打开 OllyDbgFile → Open 载入同一个 exe。按CtrlG输入0x004010D5回车跳转。在对应的je指令上按F2下断点断点会变红。按F9运行程序控制台提示输入密码时输入一个错误密码比如1111111回车。此时 OllyDbg 会断在0x004010D5。看下方预执行区会显示Jump is not taken因为je的条件不满足valid_flag非 0ZF0。双击这条je指令把助记符改成jne点 Assemble 写入。此时预执行区变成Jump is taken。按F9继续程序输出 congratulations。这就是动态验证改跳转方向逻辑反转。3.3 LordPE 计算文件偏移VA 是0x004010D5装载地址ImageBase是0x00400000.text节的 VirtualAddress 和 PointerToRawData 在实验里都是0x00001000所以 RVA 0x000010D5FOA RVA - VirtualAddress PointerToRawData 0x000010D5。也就是说这条指令在文件里距离开头0x10D5字节。打开 LordPE点 PE Editor选择 exe查看 Sections。找到.text节记下 VirtualAddress 和 PointerToRawData。用公式FOA VA - ImageBase - SectionVirtualAddress SectionPointerToRawData算一遍确认结果。不同编译选项下节偏移可能不同以 LordPE 显示为准。3.4 UltraEdit 改字节用 UltraEdit 打开 exeCtrlG跳转到0x10D5。你会看到74je 的操作码把它改成75jne 的操作码。保存文件。注意改之前备份原 exe改完运行输入1234567应该显示错误输入其他应该显示正确。3.5 TaoToken 端点配置片段如果你要把辅助脚本的请求指向 TaoToken配置如下。环境变量方式export OPENAI_BASE_URLhttps://taotoken.net/api export OPENAI_API_KEY你的TaoTokenKey如果用 JSON 配置文件比如某些客户端的 settings.json{ base_url: https://taotoken.net/api, api_key: 你的TaoTokenKey, model: 你控制台里可用的ModelID }如果用 TOML比如某些 CLI 工具[api] base_url https://taotoken.net/api api_key 你的TaoTokenKey model 你控制台里可用的ModelID三件套缺一不可Base URL、Key、Model ID。只填 Base URL 不填 Key 会 401只填 Key 不填 Model 会报模型不存在。配置完先跑一条最小请求验证。4. 验证请求与成功结果从断点命中到字节修改生效验证分两层逆向实验本身的验证和 TaoToken 通道的验证。先做逆向验证因为这是本篇的主线。第一层验证OllyDbg 断点命中。载入 exeCtrlG到0x004010D5F2下断F9运行输入错误密码。如果断点没命中说明地址不对或者程序有重定位。检查 IDA 里看到的地址是否和 OllyDbg 里一致注意 ImageBase 是否被修改。命中后预执行区显示Jump is not taken这是预期结果。第二层验证修改跳转后行为反转。在 OllyDbg 里把je改成jneAssembleF9继续。程序应该输出 congratulations。这一步成功说明你找对了分支。如果输出没变检查是否改错了指令或者程序里有多个校验点。第三层验证文件修改持久化。用 UltraEdit 把0x10D5处的74改成75保存。关闭 OllyDbg直接双击 exe 运行。输入1234567显示 incorrect password输入1111111显示 congratulations。这说明文件偏移计算正确修改已经写入磁盘。第四层验证TaoToken 通道连通。用 curl 发一条请求curl -s -o /dev/null -w %{http_code} \ -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_KEY \ -H Content-Type: application/json \ -d {model:你的ModelID,messages:[{role:user,content:ping}]}返回200说明通道正常。返回401检查 Key返回404检查路径和 Model ID。这一步和逆向实验独立但如果你后续要写自动化分析脚本这个验证必须过。成功结果的标准逆向部分exe 行为完全反转且可复现TaoToken 部分curl 返回 200 且 body 有正常响应。两个都过了这篇的实操目标就达成了。有个细节UltraEdit 保存后如果 exe 还在运行修改可能不生效。确保进程已退出再改。另外某些杀软会拦截对 exe 的修改实验时临时关闭或加白名单。5. 本篇常见错排查401、local proxy failed、reading choices 与 OAuth这一章按真实报错来。逆向部分的报错和 API 部分的报错分开列对照排查。5.1 逆向部分断点不命中OllyDbg 里CtrlG跳转后地址显示0x004010D5但F9运行后没断。原因通常是 ASLR 或 ImageBase 被改。检查 OllyDbg 的模块窗口看 exe 的实际加载基址。如果基址不是0x00400000用实际基址加 RVA 重新算地址。VC 6.0 默认不开启 ASLR但某些系统设置会强制重定位。改字节后程序崩溃把74改成75后运行直接闪退。原因可能是改错了位置或者0x10D5不是指令起始字节。回到 IDA 确认指令边界je是两字节指令74 xx只改第一个字节74为75第二个字节跳转偏移不动。如果改了偏移字节跳转目标会错乱。LordPE 算出的偏移和 UltraEdit 对不上检查.text节的 VirtualAddress 和 PointerToRawData 是否相等。实验里都是0x1000所以 FOA 等于 RVA。如果不等必须用公式算不能直接拿 VA 减 ImageBase。5.2 API 部分401 UnauthorizedKey 没填、填错、或者带了多余空格。检查Authorization头格式是Bearer KeyBearer 和 Key 之间一个空格。TaoToken 控制台里重新复制 Key注意不要复制到换行符。local proxy failed客户端配置了本地代理但代理没启动或者 Base URL 写成了http://localhost:xxxx。检查环境变量里有没有残留的HTTP_PROXY以及 Base URL 是否是https://taotoken.net/api。这个报错和网络环境有关确保能正常访问外网。reading choices 相关报错通常是响应体解析失败比如返回的不是 JSON 而是 HTML 错误页。用 curl 加-v看原始响应。如果返回 502 或 503可能是上游模型暂时不可用换一个 Model ID 重试。OAuth 报错某些客户端默认走 OAuth 流程但 TaoToken 用的是 API Key 认证。在客户端设置里把认证方式改成 API Key不要选 OAuth。Claude Code 的配置里如果出现 OAuth 相关字段删掉或改成 Key 方式。模型不存在Model ID 拼写错误或者控制台里没有开通该模型。去 TaoToken 控制台确认可用模型列表复制准确的 Model ID。大小写敏感不要自己造名字。排查顺序建议先 curl 验证通道再查客户端配置最后查网络。curl 通了说明 Key 和端点没问题问题在客户端curl 不通说明 Key 或端点有问题。这样能快速缩小范围。6. 把实验习惯迁移到日常统一 Key 通道与逆向工作流这个 Crack 小实验的价值不在“破解”本身而在于它把 PE 结构、汇编跳转、地址换算这三块知识串成了一条可操作的链路。做完之后你再看其他二进制找关键分支的思路是一样的IDA 静态定位OllyDbg 动态验证LordPE 算偏移十六进制编辑器改字节。把 TaoToken 的 API 通道配好是为了后续的自动化辅助。比如你写一个脚本批量提取 exe 的节信息然后把可疑的汇编片段发给模型做初步解释这些请求统一走https://taotoken.net/apiKey 只有一把Model ID 按需切换。Coding Plan 适合长期跑 Agent 的场景模型对话适合临时验证API Keys 页面负责发 Key。接入文档在官网 doc 路径遇到配置问题先看文档。实际工作中逆向分析往往需要反复试错。我的习惯是每改一个字节前先备份每算一个偏移先用 LordPE 核对每配一个 API 端点先用 curl 验证。这三个习惯能省掉大量“为什么没生效”的排查时间。最后给一个实用技巧UltraEdit 改完 exe 后用certutil -hashfile target.exe SHA256对比修改前后的哈希确认文件确实变了。OllyDbg 里改的是内存UltraEdit 改的是磁盘两者要分开验证。TaoToken 那边Key 建议按项目分控制台里可以给每个 Key 加备注方便回溯。实验做完把 exe 和修改记录归档下次遇到类似的校验逻辑直接翻记录比重新分析快得多。逆向是个积累活工具链顺手了效率自然上来。
返回列表