-
-
[原创]第一题 Helllo-CTF解题思路
-
发表于: 2017-10-24 22:15 2403
-
工具:OD
过程:
1、先运行hello.exe程序,输入“1111”、弹出信息框,标题为“出错了”、内容为“加油”
2、使用OD载入hello.exe程序,在汇编代码窗口,右键,选择“超级字串参考”→“1 查找ASCII”
3、看到了一堆字符串,找到“加油”,对应于004017C0,直接回车键定位到汇编代码
4、这明显是一段子程序代码段,其目的是显示错误对话框,那么注册码是否正确的判断应该在之前,所以应有CALL 004017B0,或JMP 004017B0代码。
5、在汇编代码窗口右键“查找”→“命令”
6、定位到调用代码00401870 |> \E8 3BFFFFFF call hello.004017B0
往上翻看代码,
00401854 |> \68 80354000 push hello.00403580 ; /WelcomeToKanXueCtf2017
00401859 |. 8B55 F8 mov edx,[local.2] ; |kernel32.77473C45
0040185C |. 52 push edx ; |s1 = "U嬱jh?@"
0040185D |. E8 2E060000 call <jmp.&MSVCRT.strcmp> ; \strcmp
00401862 |. 83C4 08 add esp,0x8
00401865 |. 85C0 test eax,eax ; kernel32.BaseThreadInitThunk
00401867 |. 75 07 jnz short hello.00401870
00401869 |. E8 02FFFFFF call hello.00401770
0040186E |. EB 05 jmp short hello.00401875
00401870 |> E8 3BFFFFFF call hello.004017B0
下断点后的代码如下:(push edx处已更新为用户输入的注册码)
00401845 |. 68 98354000 push hello.00403598 ; 请输入pass!
0040184A |. 8B4D FC mov ecx,[local.1]
0040184D |. E8 C0050000 call <jmp.&MFC42.#4224>
00401852 |. EB 21 jmp short hello.00401875
00401854 |> 68 80354000 push hello.00403580 ; /WelcomeToKanXueCtf2017
00401859 |. 8B55 F8 mov edx,[local.2] ; |
0040185C |. 52 push edx ; |s1 = "1111"
0040185D |. E8 2E060000 call <jmp.&MSVCRT.strcmp> ; \strcmp
00401862 |. 83C4 08 add esp,0x8
00401865 |. 85C0 test eax,eax
00401867 |. 75 07 jnz short hello.00401870
00401869 |. E8 02FFFFFF call hello.00401770
0040186E |. EB 05 jmp short hello.00401875
00401870 |> E8 3BFFFFFF call hello.004017B0
通过查看超级字符串参考,我们可以很容易知道call hello.00401770是正确弹出对话框的地方,所以继续往上看,会发现一处strcmp比较代码
该代码为关键CALL,如果不相等,就进入错误提示对话框,我们可以在该处下断点,运行,即可得知edx存储就是用户自己输入的注册码“1111”,而往上可以看到“
WelcomeToKanXueCtf2017
”,此即为正确的注册码,不下断点,通过代码也能分析出来
WelcomeToKanXueCtf2017为正确的注册码
重启程序,输入进行验证,终于弹出“恭喜”对话框。
附件的图片名称与上面的代码一致。往里面插入图片挺费劲,就看后面的附件吧。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
谁下载
无
谁下载
无
谁下载
无
谁下载
无
谁下载
无
谁下载
无
看原图
赞赏
雪币:
留言: