【系列:CCG Crypto CrackMe 逆向全解析 · 第 1 篇】
导读2001 年CCGChina Cracking Group的 Blowfish 放出了一个 CrackMe声称本题多解。这个系列将完整记录破解它的全过程——从最基础的字节解析到自定义壳的算法复原到最后跑出一个能通过真实程序验证的 Keygen。系列的第一条原则很朴素任何结论都必须能用代码复现本系列都是围绕破解过程中一步步推导过程来写的。第一篇我们先不谈算法只把手里这个 123,904 字节的文件用最笨的方法过一遍。逆向分析的第一步不是猜壳猜算法而是把文件当成一堆确定的字节。这篇文章不做任何推测只用 Python 逐字段解析一个 crackme 样本的 PE 结构每个数字都附带可运行的代码看完你也能自己验证一遍。很多逆向教程一上来就说这是 UPX 壳“这是自定义加密”。但这些判断的依据是什么大多数时候答案是经验和直觉不是当场验证的事实。这篇文章想做一件更基础的事打开crackme_crypto.exe只用struct和open把能确定的东西一条条读出来。不下结论只呈现数字。文件大小从来不是大概网上流传的说法是这个样本大约124KB。用代码量一下就知道这种四舍五入的说法从一开始就是错的。importos pathcrackme_crypto.exesizeos.path.getsize(path)print(size)# 123904123904 字节不是 124000也不是 126976124×1024。逆向工作里大约没有意义只有精确的字节数才能拿来做后续比对。PE 头的位置不用猜文件里写着DOS 头的第 0x3C 字节处存的就是 PE 头的偏移量e_lfanew。这是 PE 格式规定死的不需要经验判断。importstructwithopen(path,rb)asf:dataf.read()e_lfanewstruct.unpack(I,data[0x3C:0x40])[0]print(hex(e_lfanew))# 0xe0pe_sigdata[e_lfanew:e_lfanew4]print(pe_sig)# bPE\x00\x00e_lfanew 0xE0跳到这个偏移四个字节正好是PE\0\0。这两个值互相印证偏移对了签名也对了说明这是一个结构完整的 PE 文件而不是拼接出来的伪装文件。COFF 头里的三个数字决定了后面怎么读PE 签名之后紧跟的 20 字节是 COFF 文件头里面的Machine、NumberOfSections、SizeOfOptionalHeader三个字段直接决定了后续解析要怎么走。coff_offsete_lfanew4machine,num_sectionsstruct.unpack(HH,data[coff_offset:coff_offset4])size_opt_headerstruct.unpack(H,data[coff_offset16:coff_offset18])[0]print(hex(machine))# 0x14cprint(num_sections)# 6print(hex(size_opt_header))# 0xe0Machine 0x14C对应 32 位 x86 架构。NumberOfSections 6告诉我们后面要读几个节区表条目。SizeOfOptionalHeader 0xE0告诉我们可选头占多少字节从而算出节区表从哪里开始。这三个数字不是背景信息是接下来每一步计算的输入参数。入口点从 RVA 到实际虚拟地址,只差一次加法可选头里最关心的是入口点。这里涉及两个数字AddressOfEntryPoint相对虚拟地址和ImageBase镶像基址两者相加才是程序运行时真正跳转到的地址。opt_offsetcoff_offset20magicstruct.unpack(H,data[opt_offset:opt_offset2])[0]entry_rvastruct.unpack(I,data[opt_offset16:opt_offset20])[0]image_basestruct.unpack(I,data[opt_offset28:opt_offset32])[0]entry_vaimage_baseentry_rvaprint(hex(magic))# 0x10bprint(hex(entry_rva))# 0x44bd6print(hex(image_base))# 0x400000print(hex(entry_va))# 0x444bd6Magic 0x10B说明这是 PE3232位格式不是 PE32。ImageBase 0x400000是默认加载基址。两者相加AddressOfEntryPoint的 RVA0x44BD6换算成实际虚拟地址就是0x444BD6。这个地址意味着什么现在先不下结论。它只是一个确定的数字后续调试器里下断点会用到。六个节区六组数字,先只记录节区表紧跟在可选头之后起始偏移是opt_offset size_opt_header。每个节区头固定 40 字节按顺序读就行。sec_table_offsetopt_offsetsize_opt_headerforiinrange(num_sections):offsec_table_offseti*40namedata[off:off8].rstrip(b\x00)virtual_size,virtual_addressstruct.unpack(II,data[off8:off16])size_raw,ptr_rawstruct.unpack(II,data[off16:off24])print(name,hex(virtual_address),hex(virtual_size),hex(size_raw),hex(ptr_raw))跑出来是六组固定的数字节区名称VirtualAddressVirtualSizeSizeOfRawDataPointerToRawData0UPX!0x10000x120000xA4000x10001UPX!0x130000x10000x8000xB4002UPX!0x140000xA0000x6000xBC003UPX!0x1E0000x20000x6000xC2004.rsrc0x200000x230000xF2000xC8005UPX!0x430000x30000x2A000x1BA00注意一个细节五个节区的名字字面就是UPX!四个字符第 4 个节区叫.rsrc。同时VirtualSize和SizeOfRawData之间的差距在几个节区里相当大。这些名字和数字本身不能证明任何事——名字字段可以被任意改写大小差异也可能有多种原因。它们只是文件里当场读出来的字符串和整数。这组数字要说明什么留到下一篇。文件末尾的六个字节节区数据之外文件还有个容易被忽略的角落——最后几个字节。taildata[-6:]print(tail)# bBF2000print(tail.decode())# BF2000文件末尾的最后 6 个字节解码成 ASCII 正好是BF2000这六个字符。它出现在文件的最末尾不属于任何节区的正常数据范围。这六个字符是什么含义为什么会出现在这个位置这篇不做推测。它是下一篇要处理的第一个问题。先把地基打稳回顾一下这次拿到的确定信息文件大小 123904 字节PE 头偏移0xE0架构0x14C6 个节区入口点实际地址0x444BD6。这些都是当场用代码验证过的事实不依赖任何转述。节区表里五个UPX!名称和一个.rsrc还有文件末尾那六个字符BF2000这两组线索先记下来,不着急下结论。逆向的第一原则很简单先把能用代码确认的东西全部确认完再去谈假设和推理。你在分析文件时通常是先看结构还是先跑一遍再说小结本文是CCG Crypto CrackMe 逆向全解析系列的开篇只做了一件事把crackme_crypto.exe的 PE 结构逐字段解析出来不下任何算法结论。文件大小精确为123,904 字节而不是网上常见的约124KBPE 头、COFF 头、Optional 头的关键字段全部现场验证Machine0x14C、NumberOfSections6、入口点实际地址0x444BD66 个节区表条目全部逐字段读出5 个命名为UPX!1 个为.rsrc文件末尾 6 字节解码为BF2000这些都只是事实还不是结论。5 个UPX!节区是否真的是 UPX 压缩BF2000这 6 个字符意味着什么下一篇开始回答。下一篇预告《字符串侦察从 find() 命中到编译器身份识别》——在不碰任何反汇编工具的前提下我们将展示如何通过字符串搜索和上下文分析从这个文件里挖出编译器遗留的源文件路径直接锁定程序使用的密码学算法组件。参考文献与引用Microsoft PE/COFF 格式官方规范learn.microsoft.com/windows/win32/debug/pe-format——本文所有字段偏移量和结构定义均依据此规范pefile — Python PE 解析库[github.com/erocarrera/pefile](https://github.com/erocarrera/pefile觉得有用点个关注持续获取优质内容。

相关新闻

STM32 HAL库驱动IIC段码屏实战:HT1621配置与软件模拟IIC详解

STM32 HAL库驱动IIC段码屏实战:HT1621配置与软件模拟IIC详解

1. 项目概述与核心价值 最近在做一个需要显示多路参数的小型设备,选来选去,最后用上了一块基于HT1621驱动芯片的LCD段码屏。这种屏成本低、功耗小,在温控器、电表、小家电上很常见。但实际驱动时发现,网上资料要么是51单片机的&am…

2026/7/30 5:30:22 阅读更多 →
本地代码大模型评测实战(四):8个坑和1个崩溃

本地代码大模型评测实战(四):8个坑和1个崩溃

本地跑模型的8个坑(和1个崩溃恢复的故事) 系列目录 篇1: 模型选型 篇2: 评测框架 篇3: 数据挖掘的13个发现 篇4: 8个坑和1个崩溃 ← 当前 篇5: 公平对比的5个陷阱 发布后将链接替换为实际 URL 系列:本地代码大模型评测实战 第4篇 如果你正打…

2026/7/30 5:30:22 阅读更多 →
无审查模型与国内通用模型对比

无审查模型与国内通用模型对比

珍爱生命,遵纪守法,请勿在互联网随意传播不良信息!无审查模型,是一类非合规模型,请勿在互联网上进行发布和使用!!与国内通用模型对比会话记录如下:1、提示词:我要通过hac…

2026/7/30 5:30:22 阅读更多 →

最新新闻

单片机毕设项目: 基于嵌入式开发板的室内环境阈值自定义控制系统,基于 STM32F103 的室内温甲醛联动排风报警系统设计(010101)

单片机毕设项目: 基于嵌入式开发板的室内环境阈值自定义控制系统,基于 STM32F103 的室内温甲醛联动排风报警系统设计(010101)

文章目录20 个相关毕业设计备选题目项目研究背景硬件总体方案核心功能技术路线项目演示关于我们项目案例源码获取博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金…

2026/7/30 5:40:26 阅读更多 →
光楔原理与应用全解析:从核心公式到工程实践

光楔原理与应用全解析:从核心公式到工程实践

1. 项目概述:从“光楔”这个不起眼的元件说起在光学系统设计的浩瀚世界里,我们常常把目光聚焦在镜头、反射镜、棱镜这些“大件”上。但真正决定一个系统性能上限的,往往是一些看似不起眼、却扮演着关键角色的“小零件”。光楔,就是…

2026/7/30 5:40:26 阅读更多 →
HR数字化转型:从工具替换到流程重构,中大型企业如何走出转型深水区

HR数字化转型:从工具替换到流程重构,中大型企业如何走出转型深水区

引言:投入不少,效果有限,HR数字化转型卡在哪里过去五年,几乎所有中大型企业都在推进HR数字化转型。采购系统、上线平台、部署工具,预算表上的数字不断增长,技术供应商的名字换了一轮又一轮。然而&#xff0…

2026/7/30 5:40:26 阅读更多 →
Linux创造虚拟串口

Linux创造虚拟串口

方案一:socat(推荐,最简单、无需编译内核模块、临时即用)# Debian/Ubuntu/银河麒麟 sudo apt update && sudo apt install socat -ysudo apt install socat -y 是什么意思?sudo 以 ** 管理员(root …

2026/7/30 5:40:26 阅读更多 →
Obsidian数据迁移终极指南:如何将Notion、Evernote等笔记应用快速导入Obsidian

Obsidian数据迁移终极指南:如何将Notion、Evernote等笔记应用快速导入Obsidian

Obsidian数据迁移终极指南:如何将Notion、Evernote等笔记应用快速导入Obsidian 【免费下载链接】obsidian-importer Convert your data to Markdown files you can use in Obsidian. Works with Apple Notes, OneNote, Evernote, Notion, Google Keep, and many oth…

2026/7/30 5:40:26 阅读更多 →
基于SpringBoot的果园生产溯源管理系统(源码+LW+部署讲解)

基于SpringBoot的果园生产溯源管理系统(源码+LW+部署讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/7/30 5:39:26 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻