CTF Reverse - S90x123's passord key gen
逆向练习, 来自crackmes.one, 难度1⭐/5⭐
题目压缩包里只有一个exe, 自然地, 我们先运行看看怎么个事


先静态分析, 找到密码判断逻辑, IDA中搜索”WRONG!”:

可以看到上面就是判断密码正确的逻辑
if ( (void *)Size == Buf2[1] && (!Size || !memcmp(Buf1, Buf2[0], Size)) )
{
...
}
追踪一下这几个参数
Buf1显然存储我们输入的密码, 因为这里对Buf1有格式检查
if ( Size == 31 && *((_BYTE *)Buf1 + 7) == '-' && *((_BYTE *)Buf1 + 15) == '-' && *((_BYTE *)Buf1 + 23) == '-' )
{
...
}

Buf2[0]自然指向正确的密码
但是静态分析Buf2[0]的构造填充是一个痛苦的过程, 可以看到反编译代码中有很多其他的调用, 逐步分析非常麻烦, 所以我们转向动态分析
使用x64dbg并开启ScyllaHide插件, 这个插件用于反反调试, 事实上在关闭插件后, 程序确实会在调试时直接退出
在memcmp处打断点即可

随便输入一个格式正确的密码aaaaaaa-aaaaaaa-aaaaaaa-aaaaaaa

一目了然, rdx指向密码存储的位置
程序中输入密码, 结果正确:
