-
-
[原创]CTF2018第十题writeup
-
发表于: 2018-12-19 21:47 4001
-
先用IDA打开,看起来不是一个正常的VC程序,PEID查看了一下,可能是Delphi编译的,下了个Delphi反编译,找到了按钮响应函数,在IDA分析出来的函数里面正好发现了它们,分别在IDA里面的 _Tfrmcrackme_Button1Click 和 _Tfrmcrackme_Button2Click 下断点,居然只有关闭按钮会触发,验证按钮不会触发,看来事情不是这样。
IDA里面 Shift + F12,查看字符串,看到两行很有提示性的字符串:
结合运行时的界面显示,程序可能是显示了一个html页面,并且里面有脚本,验证可能在脚本里面,正好对应到只有关闭按钮才触发IDA里设置的断点的情况。
继续查找字符串,试图找到 ckpswd 函数的实现,然而并没有找到。看来验证脚本被加密了,没有直接出现在代码里面。如果真是用网页脚本验证的话,在执行的时候它十有八九会以明文出现在内存中,只需要尝试内存搜索 ckpswd 字符串,就有可能找到页面代码。
任意输入,点击验证按钮,保护弹框不关闭, IDA 附加,提示符下输入 s -u 0 L0x1000000 "ckpswd", 查找到一堆,依次把搜出来的地址输入到HexView中去验证,查看它前后的字符像页面的部分,如下图1
现在就是内存输出到页面文件了,找到 038d0000开始的Unicode字符串结束位置,然后一个简单的idc脚本导出
// s -u 0 L0x1000000 "ckpswd" #include "idc.idc" static main() { auto fp, start = 0, len = 0; start = 0x38D0000, len = 0x038D08D0 - 0x38D0000; fp = fopen("c:\\scripts.html", "wb"); savefile(fp, 0, start, len); fclose(fp); }
导出的文件使用 Chrome 打开,正是窗口程序的界面,看来猜测正确,但是真正的验证代码应该用某种方式加过密,依然无法直接看到验证内容,使用 Chrome的调试功能,F11 跟进去就能看到还原后的代码了:
function ckpswd() { a = document.all.pswd.value; if (a == "kanxueCTF2018bySimpower91") { alert("congratulations!") } else { alert("wrong!<" + a + "> is not my GUID ;-)") }}
结合运行时的界面显示,程序可能是显示了一个html页面,并且里面有脚本,验证可能在脚本里面,正好对应到只有关闭按钮才触发IDA里设置的断点的情况。
继续查找字符串,试图找到 ckpswd 函数的实现,然而并没有找到。看来验证脚本被加密了,没有直接出现在代码里面。如果真是用网页脚本验证的话,在执行的时候它十有八九会以明文出现在内存中,只需要尝试内存搜索 ckpswd 字符串,就有可能找到页面代码。
任意输入,点击验证按钮,保护弹框不关闭, IDA 附加,提示符下输入 s -u 0 L0x1000000 "ckpswd", 查找到一堆,依次把搜出来的地址输入到HexView中去验证,查看它前后的字符像页面的部分,如下图1
现在就是内存输出到页面文件了,找到 038d0000开始的Unicode字符串结束位置,然后一个简单的idc脚本导出
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2018-12-19 21:56
被leavesth编辑
,原因:
赞赏
他的文章
- [原创]CTF2018第十题writeup 4002
- [原创]CTF2018追凶Writeup 2853
- [原创]第五题Writeup 2732
- [原创]CTF2018第二题半加器 writeup 3695
- [原创]ctf2018初世纪 writup 2097
看原图
赞赏
雪币:
留言: