独立完成的部分
- 题目下载地址如下:
打开以后是一个提示输入Key的框框,随便输点然后点Check,并没有什么反应。
查壳,无壳。
拖入OD调试, 尝试在点击Check以后断住程序,然后再想办法搞到Flag 但是…断不住。
拖入IDA, 一大堆
sub_xxxxx
看得头都大了一圈。大致分辨出这应该是个MFC程序。start
函数就这么一点。
__security_init_cookie
函数也没啥重要内容。
- start函数返回的这个函数也没啥重要内容…
现在的难点变成了如何定位到关键函数。
手动挨个查看那一大堆
sub_xxxx
太费时间了,Shift + F12
查看一下字符串, 然后发现了可疑字符串和两个可疑文件。
- 来到这些字符串对应的函数的位置。
- 大概看懂了一部分吧,然后就不知道该干嘛了。
借助WP完成的部分
- 借助WP 了解到了一款软件
Resource Hacker
- 关于这款软件的一些用法,参照
http://www.seotest.cn/jiaocheng/7636.html
- 这款软件好像对处理GUI程序挺有用的。
- 根据IDA中这一块,RecourseHacker中141标号即2.exe这个文件
- 142标号即b.dll这个文件, 但是却是一堆乱码。
用这个软件提取出来这两个文件。
由下面这一块 , 借助WP试出来a1 = 0x32
- 第一个字符串得到:
sc create Pt type= filesys binPath=
- 第二个字符串得到:
sc start Pt
Q1:but这俩字符串有啥用?
- 根据WP(菜是原罪) 分析2.exe这个文件。
- 程序把b.dll的内容与v12进行异或,然后写入Src(flag.dll)中。
Q2:是否能通过直接运行2.exe来完成上述步骤?
- 那么就按照程序的步骤手动来呗? 但是又遇到了新麻烦。
- b.dll里面的内容长度是3436,但是 用python还有C进行文件读操作读出来的长度都只有107,读到9M#后就不再读下去了,导致后续的异或操作无法正常进行。
Q3:为什么会出现只能read()一部分的这种情况?
- 无奈之下只能通过010Editor提取16进制数据了
- 然后写了个小程序手动完成2.exe执行的操作
1 | # -*- coding: UTF-8 -*- |
- 运行得到flag.dll
- 查看文件头发现是个png文件, 修改拓展名为png得到flag的图片。