首页
论坛
课程
招聘
[原创]第一题 Helllo-CTF解题思路
2017-10-24 22:15 1089

[原创]第一题 Helllo-CTF解题思路

htg 活跃值
2
2017-10-24 22:15
1089
工具: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嬱jh?@"

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为正确的注册码
重启程序,输入进行验证,终于弹出“恭喜”对话框。
附件的图片名称与上面的代码一致。往里面插入图片挺费劲,就看后面的附件吧。


2020 KCTF秋季赛【攻击篇】正在火热进行中!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回