没源码也能扒光程序逻辑?司法鉴定人带你用两道题入门逆向工程

作者:奇安信洞鉴 发布:2026-08-27 17:30 收录:2026-09-08 10:42 2 次阅读 约 3131 字
摘要:穿透表象,看见真相。
推荐理由:本文涵盖「司法鉴定」、「逆向工程」、「CTF」等多个主题,重点关注 司法鉴定。
拿到一个陌生的可执行文件,没有一行源码,你能搞清楚它到底在电脑里干了什么吗?

这不是黑客的独门绝技,而是电子数据司法鉴定人的日常基本功。

办案的时候,嫌疑人不会乖乖交出源代码,黑产程序更不会把功能写在文件名上。我们手里只有一份冷冰冰的二进制文件——它可能是后缀.exe的可疑程序,可能是藏在系统目录里的dll,甚至可能伪装成一张图片、一个文档。

要剥开它的伪装,读懂它的行为,靠的就是逆向工程。

今天这篇入门实战,我们不讲枯燥的理论框架,直接拿两道经典CTF逆向题上手演示。别觉得CTF和真实办案没关系——这两道题的分析思路,和我们鉴定案件时拆解恶意程序的逻辑几乎一模一样。只不过真实案件里的程序更狡猾、藏得更深,而CTF就是最好的练手靶场。

打开IDA,我们直接开干。



01

工具准备

提前装好这两样工具,就能跟着走完全程:
  • IDA Free:逆向分析的核心工具,免费版足够应对入门题型,官网可直接下载。
  • Python 3:用来写简单的解密脚本,几行代码就能还原加密数据。
注:本文两道例题均改编自BUUCTF、攻防世界等公开CTF平台的经典逆向题型,所有数据均为教学演示使用。



02

例题一:字符串直接比对——最朴素也最有效的一招



题目背景
我们拿到了一个叫“re1.exe”的小程序,双击运行就会弹出窗口让你输入密码,输对了显示Success!,输错了就提示Wrong!。
我们的目标:不碰爆破,不靠猜,直接从程序里找出正确密码。


第一步:先看程序里“写了什么”——字符串扫描
逆向分析的第一招,永远是最朴素也最高效的:先看看程序里藏了哪些可读文字。
把程序拖进IDA,按下快捷键Shift+F12,就能打开字符串窗口——IDA会自动把程序里所有能识别的明文串都列出来,就像翻程序的“内置聊天记录”一样直接。
扫一眼结果,四个字符串一目了然:
  • 提示输入:Please input flag:
  • 错误提示:Wrong!
  • 正确提示:Success!
  • 最扎眼的一个:thisisnot_flag
翻译过来是“这不是flag”,但格式长得完全就是标准的密码样式。做逆向的都懂一个经验:越是故意写着“不是密码”的字符串,越有鬼——开发者最爱用这种小套路误导人,我们偏要顺着它查下去。


第二步:顺藤摸瓜——谁在用这个字符串?
双击这个可疑字符串,再按一下 X键,就能查看它的交叉引用——说白了就是看看程序里哪段代码调用了它。
IDA很快给出结果:在名为 sub_401000 的函数里,有一行代码引用了这个字符串。这个函数,大概率就是判断密码对不对的核心逻辑。


第三步:一键看“人话”——F5反编译
跳转到这个函数,按下IDA最神的快捷键 F5,就能把晦涩的汇编代码翻译成接近C语言的伪代码,普通人也能看懂:
int __cdecl main()    char v0[32];     printf("Please input flag:");     scanf("%s", v0);     if ( !strcmp(v0, "this_is_not_flag") )         printf("Success!");     else         printf("Wrong!");     return 0;}
逻辑简单到一眼看穿:
  1. 程序读取你输入的内容,存到变量里
  2. 直接拿你的输入,和 thisisnot_flag 这个字符串做对比
  3. 一模一样就提示成功,不一样就报错
答案直接出来了:正确密码就是「thisisnot_flag」。
💡鉴定人笔记:这道题看着像“新手送分题”,但它对应的是真实办案里最常见的一种套路:关键数据直接硬编码在程序里,不做任何加密。我们在实际鉴定中,经常用这招快速挖出恶意程序内置的远控服务器地址、端口号、写死在代码里的加密密钥、预设的配置文件路径、内嵌的C2域名等等。记住这个四步流程:Shift+F12搜字符串→找可疑内容→Xref追调用位置→F5看完整逻辑。绝大多数简单程序,走完这四步,基本就能摸透它的核心功能了。



03

例题二:XOR加密比对——密码藏起来了怎么办?



题目背景
再看第二道题“re2.exe”,同样是输密码的程序。但这次我们按Shift+F12扫字符串,除了提示语和对错提示,半点儿像密码的内容都找不到。
开发者学聪明了:密码不再明文放在程序里,而是加密后藏了起来,直接搜字符串根本搜不到。这也是恶意程序最常用的隐藏手段。


第一步:先看主逻辑——F5一眼看穿加密方式
老规矩,定位到main函数按F5,先看整体逻辑:
int __cdecl main()    char input[64];     int i;     printf("Please input flag:");     scanf("%s", input);     for ( i = 0; i < strlen(input); ++i )         input[i] ^= 0x55    if ( !memcmp(input, enc_flag, 23u) )         printf("Success!");     else         printf("Wrong!");     return 0;}
不用细看每一行,抓住核心循环就够了:程序会把你输入的每个字符,挨个和0x55做一次「异或(XOR)」运算,处理完之后,再和一个叫enc_flag的数组做对比。
换句话说:你输入的明文→异或加密→和密文比对错。


第二步:搞懂原理——异或的“双面性”
这里要提异或运算一个最关键的特性:自反性。
说人话就是:用同一个数异或两次,就会变回原来的样子。比如明文^密钥=密文,那密文^密钥=明文。
程序做的事是把明文加密成密文,我们只要反过来,用同样的密钥再算一遍,就能直接把密文还原成明文密码——根本不需要暴力破解。


第三步:挖出密文数据
在IDA里双击enc_flag,就能跳转到对应的数据段,看到加密后的完整密文,一共23个字节:
32h, 65h, 65h, 31h, 0Ah, 3Fh, 65h, 37h0Ah, 27h, 66h, 23h, 66h, 27h, 26h, 66h0Ah, 64h, 26h, 0Ah, 33h, 20h, 3Bh
现在我们有了密文,也知道了密钥是0x55,剩下的就是写几行代码解密。


第四步:几行Python代码,直接还原明文
写一个最简单的解密脚本,把每个字节都和0x55异或一遍:
# 密文(从IDA中提取)enc_flag = [     0x320x650x650x310x0A0x3F0x650x37    0x0A0x270x660x230x660x270x260x66    0x0A0x640x260x0A0x330x200x3B,]# XOR 解密flag = ""for byte in enc_flag:     flag += chr(byte ^ 0x55)print(f"flag: {flag}")
运行之后,直接得到明文密码:
g00d_j0b_r3v3rs3_1s_fun
💡鉴定人笔记:XOR异或加密是门槛最低、但恶意程序最爱用的加密手段。真实办案中,我们经常在这些场景遇到它:加密远控服务器的URL,防止杀毒软件直接扫到恶意域名;加密内置的账号密码、加密密钥,避免被直接提取;加密恶意代码本体(shellcode),躲避特征查杀;混淆配置文件里的敏感字段。对应的逆向思路也很固定:F5找到加密算法 → 提取密文和密钥 → 写脚本反向解密出明文。XOR是最简单的情况,真实案件里还会遇到AES、RC4甚至自定义加密算法,但核心思路完全不变——先搞懂它怎么加密的,再反过来推明文就行。



04

两道题,摸清逆向入门的核心路径

这两道题刚好对应了逆向分析最基础的两条路径,也是你以后分析任何程序的两个核心抓手:
  • 明文硬编码模式:靠字符串搜索就能快速定位,适合快速摸底简单程序,对应真实场景里的硬编码URL、密钥、配置路径。
  • 简单加密存储模式:需要先读懂加密逻辑,再反向解密还原数据,对应真实场景里的加密通信、加密载荷、混淆字符串。



05

通用逆向分析流程

最后给你整理一套万能的入门分析流程,拿到任何陌生程序都能按这个顺序走:
  1. 拖进IDA加载程序,先完成基础识别
  2. Shift+F12扫一遍所有字符串,快速建立第一印象,看看程序“说了什么”
  3. 找到主函数/程序入口点,F5反编译,先搞懂整体逻辑框架
  4. 跟着关键字符串、关键函数追交叉引用,定位核心功能代码
  5. 遇到加密/编码内容,提取算法、密文、密钥,写脚本反向还原
  6. 静态分析搞不定的,就开动态调试,设断点看程序运行时的真实数据



06

鉴定人视角:CTF练手和真实办案,差在哪?

很多人会问:练CTF对真实办案有用吗?
我的答案是:方法论完全通用,但战场强度天差地别。
CTF题目是“出题人故意留好线索”,只要找对路子一定能解出来,目标就是拿到那一串flag,花几小时到几天不等,做错了大不了重来。
但真实的司法鉴定不一样:
  • 我们的目标不是找flag,是搞清楚程序的完整功能、行为链路、危害后果
  • 对面的开发者不会给你留线索,反而会用尽加壳、混淆、反调试手段藏住自己
  • 分析周期可能长达数周,最终输出的不是一个字符串,是一份具备法律效力的鉴定意见书
  • 最关键的是:结论不能错,错了就可能影响案件走向,甚至造成冤假错案
但反过来,CTF永远是最好的训练场。你在CTF里练熟的每一步操作、每一种思路,到了真实办案里都能用得上。训练场练熟了,上战场才不会慌。



07

结语

两道入门CTF题,从明文搜索到加密反推,你已经走完了逆向分析最核心的两条路径。
记住这个最朴素的分析顺序:
拿到程序 → 先扫字符串摸家底 → 反编译看整体逻辑 → 交叉引用追核心代码 → 遇到加密就反向解密。
这套方法不只能解CTF题。以后你遇到一个伪装成系统组件的可疑DLL,一个偷偷连境外服务器的EXE,一个把自己代码全加密的恶意软件,都能用同样的思路,一层一层剥开它的伪装。
逆向工程的本质,从来不是破坏,而是穿透表象,看见真相。这也是每一个鉴定人,一直在做的事。
奇安信集团旗下有北京、上海、西安三家司法鉴定所:北京网神洞鉴科技有限公司司法鉴定所、上海盘石洞鉴科技有限公司司法鉴定所与陕西西安洞鉴云侦声像资料司法鉴定所。其中,上海所是上海第一家通过 CNAS 认证认可的民营计算机类司法鉴定机构。三所均通过了CMA资质认定,是目前国内少数能够通过自主研发软件进行取证与分析的电子数据司法鉴定机构,具有独立的实验室场所,其中包括:案件受理区、数据恢复区、手机取证区、计算机取证区、屏蔽室、无尘工作间和物证室,并配备多种国内外先进的技术检验及辅助设备。经过多年的时间积累和发展,现拥有一批胜任鉴定工作的专业技术人员,以专业的技能和丰富的经验,来开展声像资料和电子数据司法鉴定工作。开展的鉴定服务范围包括:声像资料鉴定、电子数据司法鉴定、计算机证据固定和获取、手机终端取证与分析、数据恢复、密码破解以及涉及电子设备的民事调查等。

转载声明:本文转载自原发布平台 (作者:奇安信洞鉴), 原文标题《没源码也能扒光程序逻辑?司法鉴定人带你用两道题入门逆向工程》, 查看原文。 版权归原作者及原发布平台所有,本站仅作收录与展示,未对正文内容作实质性修改; 若涉及侵权请联系本站处理。