-
-
[原创]第一题
-
2019-3-14 10:37 2514
-
2018.3.11
新手
首先可以看到输入后有一个MessageBox提示
使用x64dbg加载程序
搜索字符串
看到是调用了一个信息框,在这里下断点
bp MessageBoxA
查看调用堆栈
cm.sub_4017B0+1D里的代码是输入不正确密码后进程退出
而cm.0040187F代码的附近可以看到一个字符串KanXueCTF2019JustForhappy
一开始以为这就是flag,这么简单,结果发现不是。
但这里的strcmp显然是进行了字符串判断
jne cm.40187A调用了call cm.sub_4017B0
子程序4017B0就提示了错误信息。
而如果字符串正确,调用call 401770
提示恭喜 pass的信息框。
那么,显然KanXueCTF2019JustForhappy在strcmp之前被压入栈是一个参数,那么我们在这里下断点。
输入KanXueCTF2019JustForhappy,断下
可以看到cmp的一个参数是KanXueCTF2019JustForhappy,而另一个是等长的字符串。经过输入不同的密码,我们发现,ECX的内容是我们输入的,但是经过了加密。
现在就是要找输入什么字符串可以加密为KanXueCTF2019JustForhappy。
采用内华达穷举法,j0rXI4bTeustBiIGHeCF70DDM经过加密可以得到KanXueCTF2019JustForhappy,即flag{j0rXI4bTeustBiIGHeCF70DDM}。
后记:
其实可以逆向加密函数得到加密算法,但是比较需要技术,我不会。
对应关系
abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法