这个题目里面的方程看的我要吐了 🤮 可以说是非常恶心的题目,本来我只是打算用来试试 M1 Mac 做 Windows 逆向的体验啊 😭

短短续续做了很久的一个题目。主要考察动态调试,过 Windows 反调试函数和利用 Z3 solver 库解方程。以及对 c++ 代码逆向的适应

过反调试函数

当你拿到这个题目的时候想要开调试来看看一些数据在运行的时候是如何变化的。结果你发现这个题目有一个反调试函数

Untitled

不过问题不大,这种反调试函数,我们首先是要找到他的汇编代码

因为我改过汇编了所以这个地方跳转指令不一样

因为我改过汇编了所以这个地方跳转指令不一样

可以看到我们需要跳过下面的那个 do not debug me 部分的代码

Untitled

所以在跳转指令上使用 keypatch 插件,将其像我一样修改为 jmp 指令即可

Untitled

Untitled

最后在 edit 菜单栏选项中选择这个保存

Untitled

动态调试

首先是有几个数据,在静态分析的时候看不到,需要动态调试才行。动态调试可以选择使用 x64 dbg,也可以使用 ida。我觉得 ida 很舒服,就是用 ida 来调试的。

IDA pro 在 wine 下的表现简直完美,用来调试也没有崩溃 bug 什么的。

主要是需要获取这个上面的 qword_7FF662856048 数据

主要是需要获取这个上面的 qword_7FF662856048 数据

虽然不是很明白 windows 的机制,反正这个东西在运行调试的时候的值是 i_will_check_is_debug_or_not, 但是在本地静态查看的时候是看不到这个值的。

这个题目的坑还有这个