SCTF 2019 -- Who is he
是无壳 Unity 程序,直接动调。
直接用 x64dbg 调试会有问题 (具体为什么我也不清楚),用 scyllahide 插件隐藏调试器即可。
随便输入一个flag,它会弹出一个错误提示窗口,我们可以从这个窗口入手。
创建一个窗口,一般会用 CreateWindowEx MessageBox 等 API,在这些 API 下断点,最后确定 MessageBoxW 创建窗口。
可以看到 rdx 和 r8 里面有 MessageBoxW 的字符串,然后要这些值是从哪来的。
从 MessageBoxW 堆栈的返回地址找到上一个函数,在这个函数的开头下断点。
内存里查看 rdx 指向的内容,发现还是错误提示的字符串,说明还不是要找的函数。
再从堆栈的返回地址找到上一个函数,有两条 mov rdx, imm 指令,分别是正确提示和错误提示,前面这个函数就是我们要找的函数了。在这里下断。
在这里查看传参的 rcx 和 rdx,rcx 指向输入的字符串,rdx 指向真正的flag。