首页
社区
课程
招聘
[原创]CTF2018第十题writeup
2018-12-19 21:47 3384

[原创]CTF2018第十题writeup

2018-12-19 21:47
3384
先用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 ;-)")    }}



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2018-12-19 21:56 被leavesth编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回