当前位置: 首页 > news >正文

逆向工程学习日志(第五天):常见加密算法特征识别与 Python 打包程序的逆向边界

本文记录逆向工程学习第五天的内容。主要涉及 AES、RSA、MD5、TEA 四种常见加密/哈希算法的基本常识与逆向识别方法,以及使用 PyInstaller 将 Python 脚本打包为 Windows 可执行文件(EXE)的实践与局限。此外,对后续学习方向进行了调整,计划将国产 AI 工具纳入辅助分析和研究对象。

一、常见加密算法的基础认知

本日以理论学习和特征识别为主,不涉及具体算法的数学推导。重点记录各算法在逆向分析中可用于识别的“签名”或行为特征。

算法类型关键特征(逆向视角)
MD5哈希输出固定 128 位(16 字节);初始化常量(A=0x67452301, B=0xefcdab89, …);循环中会使用正弦整数表(K 表)
AES对称加密典型轮函数包含 SubBytes(S 盒)、ShiftRows、MixColumns、AddRoundKey;S 盒固定(可搜索 0x63, 0x7c 等字节序列);密钥扩展常数 Rcon
RSA非对称加密涉及大整数运算(如模幂);常见常量 65537(0x10001)作为公钥指数;在二进制中通常通过大数库(OpenSSL、mbedtls)间接识别
TEA对称分组加密常数 Delta = 0x9E3779B9;循环中多次异或、移位、相加操作;32 轮迭代(典型实现)

上述特征中,常量和 S 盒是最可靠的静态识别线索。在不依赖魔数(如文件签名)的情况下,准确分辨算法需要理解其结构。本日仅完成初步整理,详细原理留待后续深入学习。

二、使用 IDA 提取所需数据

在逆向分析过程中,经常需要从二进制文件中提取特定数据(如密钥、常量表、密文)。本日练习了以下方法:

  1. 定位数据:通过字符串窗口(Shift+F12)查找可疑常量,或通过交叉引用(Xrefs)追踪数据使用位置。
  2. 复制字节序列:在 IDA 的十六进制视图中选中一段数据,使用 Edit > Export data 或直接复制为十六进制文本。
  3. 提取到脚本:利用 IDA Python 导出数据。示例:
    importidc start=0x00402000end=0x00402040data=idc.get_bytes(start,end-start)withopen("extracted.bin","wb")asf:f.write(data)

三、PyInstaller 打包 EXE 的逆向观察

使用 pyinstaller --onefile script.py 将简单的 Hello World Python 脚本打包为单个 EXE 文件。随后尝试用 IDA 或文本编辑器打开该 EXE,发现以下现象:

  • 无法直接找到 “hello world” 字符串。
  • 文件体积显著增大(数 MB 到数十 MB)。
  • 存在大量疑似 Python 运行时库和打包后加密/压缩的数据段。

原因分析:PyInstaller 默认将 Python 解释器、依赖库、字节码(.pyc)以及主脚本打包进 EXE,并在启动时解压到内存或临时目录。字节码本身可以被反编译(如 uncompyle6),但整个 EXE 的结构并非原生 PE 可执行文件,其入口点是一个加载器,因此静态分析难以直接定位原始代码字符串。这属于打包器/封装器(Wrapper)而非传统加壳,但其对逆向造成的阻碍类似。

结论:以当前能力,逆向 PyInstaller 打包的 EXE 难度较高,且投入产出比不高,因此暂不将其作为练习目标。该实验确认了逆向工程的适用范围——原生编译语言(C/C++/Rust/Go)仍是主要分析对象。

四、当前遇到的问题

  1. PyInstaller 打包程序难以分析
    如前所述,打包后的 EXE 结构复杂且包含运行时解压机制,无法直接提取原始字符串和逻辑。这警示在学习初期应优先聚焦于原生编译代码。
  2. 加密算法在不依赖魔数时的准确分辨
    AES 的 S 盒和 TEA 的 Delta 常数可作为有力特征,但 MD5 的常量与某些自定义哈希可能混淆,RSA 则更多依赖大数运算模式而非固定常量。准确识别需要对算法实现有更深理解。
  3. 未按计划完成自写 CrackMe
    原计划本日编写一个包含加密逻辑的 CrackMe 并逆向,因理论学习内容和 PyInstaller 实验耗时较多而推迟。已纳入后续两天必须完成的任务。

五、学习方向调整

本日没有产生明确的“成功瞬间”,但在实践过程中对后续学习进行了重新规划:

  • 逆向能力检测:将尝试逆向一个 PyInstaller 打包的 EXE 作为阶段性能力测试(非短期目标),以检验对打包器/壳的分析水平。
  • 国产 AI 工具的引入:计划将国产大语言模型(如 DeepSeek、通义千问、Kimi等)同时作为辅助分析工具(解释汇编指令、提供算法识别建议)和被研究对象(分析其客户端/API 的逆向工程可能性)。这既是学习资源优化,也是拓宽目标场景的尝试。

六、后续两天计划(巩固与复盘)

  • 编写至少一个自制的 CrackMe(C/C++),加入简单的异或或 TEA 加密验证逻辑,然后使用 IDA + x64dbg 完整逆向出解密流程。
  • 寻找 1-2 道 CTF 逆向方向的入门级别题目(如攻防世界、BUUCTF 平台),独立完成并写出解题思路。
  • 复盘前五天内容:
    • PE/ELF 文件头关键字段记忆测试
    • 常用汇编指令(条件跳转、test、lea、xor 清零)的快速识别
    • IDA 快捷键与 pwndbg/x64dbg 命令的整理成速查表

总结

第五天侧重于加密算法识别特征和 PyInstaller 打包机制的分析实践。理论方面整理出了四种常见算法的逆向识别要点;工具实践方面确认了原生编译代码与打包脚本代码在逆向难度上的显著差异。未能完成原定的 CrackMe 编写任务,但及时调整了学习方向,将后续重心放在巩固基础、CTF 实战和自写 CrackMe 的完整演练上。

http://www.cnnetsun.cn/news/2520334.html

相关文章:

  • CANN模型编译与离线部署全攻略
  • 海克斯大乱斗:普攻英雄“锻体”收益的严谨数学分析
  • AI安全新范式:用逆向推理与因果推断定位系统性风险
  • 面试:如果让你设计一个客服 Agent,你会如何划分四大组件的职责?
  • D盾深度集成IIS:Windows Web服务器原生级Webshell防护方案
  • Frida Hook SSL_read/SSL_write 实现HTTPS明文流量捕获
  • Agentic o3调度器与Gemma/Nemotron-H推理范式演进
  • Unity跨平台发布失败的根因分析与七步排查法
  • Hugging Face实战备忘录:开发者必备的AI开发OS层指南
  • AI-native开发:从工具使用者到智能体编排工程师的范式跃迁
  • 医疗数据中心AI:面向临床确定性的边缘智能架构
  • TensorFlow Federated核心原理:联邦计算契约与类型系统解析
  • 房地产数字沙盘价格与服务商选型指南,2026年开发商采购参考
  • GPT-4的1.8万亿参数与2%激活:MoE稀疏推理实战解析
  • 服务器GPU直通故障根因与五层协同调试指南
  • GitLab CVE-2025-1477:URI编码绕过身份验证的应急防护指南
  • 深度学习学习率调度器原理与工业级实战指南
  • AI资讯简报如何成为工程师的技术决策雷达
  • 把AI的能力拆成乐高积木:如何让Agent真正干成复杂的事
  • 开源Agent框架能跑通Demo,但离企业生产还差五个能力
  • 真实系统弱口令爆破的三大硬核细节:Payload位置、滑动窗口与请求指纹
  • Phi-3.5与Minitron小模型技术路径深度对比
  • 滤光片原理与应用:从光谱管理到光学系统性能提升
  • TensorFlow手写单词识别:CNN-LSTM-CTC实战指南
  • 从零搭建 AI 搜索引擎:我给装上了智能记忆,还踩了这些坑
  • 三方物流城市配送仓运配一体化解决方案(基于JeeWMS·模块化可拆分部署版)
  • AI信息筛选操作系统:从过载到可验证的工程实践
  • 并发数据结构设计与无锁编程实践
  • Meta 裁员约 8000 人:弥补 AI 巨额投资,削减人力成本
  • 为什么 Android App 启动会白一下?——一篇讲透 Android SplashScreen 启动机制演进