第 3 天:逆向工程¶
为什么要逆向工程?¶
- 不开源
- 寻找商业机密
- 找到漏洞
- 破解,修改
- 分析协议
- 好奇心……
开始¶
阅读汇编代码如同大海捞针……并且还有驱动、库文件等乱七八糟的干扰项。
想要逆向?它们还有防御机制。
程序的被动防护:加壳、混淆……
程序的主动防护:检测逆向工具、反调试手段……
怎么变成一个好的逆向打手呢?¶
工具¶
静态分析工具¶
- 反编译器
- Hex Editor(010Editor)
动态分析工具¶
- Debugger
IDA¶
(我超,我学汇编的时候怎么就没有这么强大的工具!?)
快捷键¶
在程序图和汇编代码之间切换:Space。
按汇编代码生成一份(pseudocode)C 伪代码:F5。
伪代码并不一定是完全正确的,可能有各种各样的错误。比如把函数的传参分析错。
给伪代码的字段重命名:N。
修改伪代码函数的定义:Y。
查找所有对于这个变量 / 函数的引用:X。
dq
长度为 8 字节。就是 quadra (4) 个 word。
更多子功能:Views
-> Open Subviews
。
查找 strings:Shift+F12。
修改汇编代码:Edit
-> Patch Program
-> Assemble
。
保存:Edit
-> Patch Program
-> Apply Patches...
。
给 struct 添加成员变量:D。在 IDA 没有正确识别出 struct 的时候,得手动添加。
LODWORD,HIDWORD 等:给个 8 字节的变量的低 4 个字节、高 4 个字节赋值。
把解析设成 undefined:U。
让 IDA 解释成代码段:C。即 code。
让 IDA 把代码段当成一个函数来分析:P。
跳转到地址:G。
动态调试¶
软件断点:在代码段里面的断点。
硬件断点:可以检测某个变量的变化的断点。
使用 API 给的接口进行修改¶
比如,当源代码进行了一个混淆,就可以写个 python 把那些内容混淆回来。
x96dbg¶
= x32dbg + x64dbg
今天的作业¶
警告
抄袭行为是严厉禁止的。
Reverse1¶
提示
IDA 和 IDA64 不是同一个东西。
attachment¶
提示
加密是可逆的。
另外,flag 格式确实是 flag{...}
。你得到的东西和它有什么关系呢?
Reverse2¶
提示
IDA 的 string 功能好像还不够好。
那个 MessageBox 有两个传参分别是窗口标题和窗口内容。与窗口标题和窗口内容在一块儿的,一般是什么呢?
Start¶
请帮帮我!
main 函数已经找到 3 个了,其中一个是钓鱼的,一个有 bug,剩下一个里面有非常可怕的加密过程。
你也不能指望一个第一天才会写 Hello World 的人去打 NOIP 吧?
题解没有就算了,连个 Hint 都不给,做你妈呢。