文章目录
  1. 1. Warming Up
  2. 2. 到手的钥匙
  3. 3. 忘记用户名
  4. 4. 探囊取物
  5. 5. Help me
  6. 6. 捉迷藏
  7. 7. Do something

Warming Up

题目描述:
Crack the easy program crackme,the key is your coorrect input.

这道题用OD打开后用搜索字符串的方法就能找到关键点,然后在关键部位下好断点,输入数据后进行单步跟踪。


我们跟踪后发现输入的字符串经过算法后转化的结果再和字符串”VgobmndVlBVE”比较,如果匹配成功则提示”Find the key”,字符串”qtdufdutv”是我随便输入字符串后转化的结果。

下面是转化字符串的算法

分析算法后写出解密脚本,跑出结果“WelcomeToCTF”。

1
2
3
4
5
list1 = "VgobmndVlBVE"
result = " "
for i in range(len(list1)):
result = chr(ord(list1[i])^(((i)%3)+1))
print result

到手的钥匙

题目描述: 现在已经确定截获到对方用来传递秘钥的程序,但是如何才能拿到秘钥?

这道题同样先在关键部位下断点,然后单步调试,输入字符串后仔细观察。这个程序是先把我们输入的用户名和admin做比较,那么真正的用户名就是它。对于password我们发现它把我们输入的字符串进行MD5加密,然后和一个MD5值比较。

下图就是MD5加密算法

输入的Password经过加密后就是和“ec9add6bd30ea6c7b8c8dbbe46888dcd”比较,如果相等则登录成功

我们把这个MD5值在线解密得到xdadmin.

输入后显示成功。怎么提交都提交不上去,看了别人的writeup后才知道这道题脑洞太大了,它有两个用户名密码!!

下图中的V0和result就是另外的用户名和密码。

输入3247和5569

提交的结果为“用户名+密码+输出”。

忘记用户名

题目描述:过了好久,用户名都不记得了,难道只能重置了么?

对于这道题代码挺少,逻辑的挺简单,没有那么多的函数调用。我们还是方法,找到关键点,然后下断点,单步跟踪。首先我们看到输入的字符串长度为0xC,也就是7,负责就提示user name must be at least five。

下面是这个加密算法,我们来具体分析。我们输入的字符保存在ECX中,EDX的值是固定的7,ESI的值依次为0——7,EAX的值为’I’,’o’,’L’,’v’,’e’,’X’,’D’。ECX减去EDX加ESI的值再和EAX比较。

下面为EAX的值的变化。

我们逆向一下算法,写出解题脚本,结果为“PrtzhZE”

1
2
3
4
5
list1 = "IloveXD"
result = " "
for i in range(7):
result += chr(ord(list1[i])+7-i)
print result

探囊取物

题目描述:
拿到了密码,得知对方要接头了,可是对于接头的具体安排一无所知,只拿到了这个文件,难道是我的打开方式不对?

对于这道题,点击下载后跳转到一个空白页面,完全没有下载crackme的意思,但这个网页看起来似乎藏着东西,估计是浏览器无法渲染,果然在Linux用URL下载到了crackme。

Help me

题目描述:
What’s wrong with my program? Who can crack this? Do me a favor…

对于这道题,用OD打开程序,在关键部位下完断点后单步调试的时候突然就程序异常蹦了,于是直接NOP掉,后来发现这样的地方还有很多,于是一路NOP。下面这些就是要NOP的地方


来到下面这里后发现这里才是最关键的地方,每次输出两个字符,而每两个字符都是调用01001197处的Call来实现的,如果单步步过的话,程序只输出两个字符然后就退出了,所以每次到01001197的时候单步步入,然后call执行完后返回01001177,依次循环,打印出flag。

下面就是打印出的字符连起来就是flag。















捉迷藏

题目描述:文件一定要保存好,不要像这个程序一样随便-ddui~ (PS:建议在win32环境下测试)

这道题是最正常的一道题,输入用户名和密码,和程序内部的真正用户名和密码做比较。首先我们来看下图,这里是判断用户名长度的,用户名长度为0x7,即7

这里判断输入的密码长度,密码长度必须为0xE,即14

这里是拿输入的用户名和FindKey作比较,如果相等则继续验证密码否则退出。

验证密码的时,调用了013E1BCE 的Call,我们进去后发现这个算法是base64,它是将输入的密码经过base64加密后再和T25Zb3VyQ29tcHV0ZXI=进行比较,如果相等则跳到well_done!

这是真正密码的base64值

如果看不懂base64的汇编代码,可以用PEID的插件识别算法。

直接在线解密得到密码OnYourComputer

输入用户名密码后生成了一个flag.jpg,里面的内容为FindKeyOnYourComputerArvinShow

Do something

题目描述: 登录后程序收到一张图片,这其中会有什么蹊跷?已更新,可以继续做题~

这道题下载下来是一个png格式的图片,但做逆向的都知道,这东西至少得是个可执行文件啊。我们用二进制编译工具打开,返现里面除了有png文件头还有PE文件头,所以我们把PE文件部分提取出来,保存为exe格式。

OK!保存后程序正常运行,我们可以继续做题了

下面是验证算法,最关键的是01251492处的这个call,它里面有很多调用,一不小心就跳转到that’s wrong try again。

文章目录
  1. 1. Warming Up
  2. 2. 到手的钥匙
  3. 3. 忘记用户名
  4. 4. 探囊取物
  5. 5. Help me
  6. 6. 捉迷藏
  7. 7. Do something