SKSEC Summer Training

# 0x01 RE-WhiteHat #

独立完成的部分

  • 题目下载地址如下:

传送门

  • 打开以后是一个提示输入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
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: UTF-8 -*-
f = open('C:\\Users\\LiuLian\\Desktop\\b','r')#b里面是从b.dll提取出来的16进制数据
buffer = f.read()
L = buffer.replace('\n',' ').split(' ')
L.pop()#消除最后因为替换\n为空格而带来的多余的一个空格

ff = open('C:\\Users\\LiuLian\\Desktop\\flag.dll','wb')
for i in L:
x = chr(int(i,16)^0x36)
ff.write(x)
f.close()
ff.close()
  • 运行得到flag.dll

  • 查看文件头发现是个png文件, 修改拓展名为png得到flag的图片。