CTF逆向类少许总结

其实参加的比较少,很多也不懂,总结了一点点。
其实Crack类的题目,技巧很重要,阅读题目能力很关键,需要善于结合周边信息,善于用各种工具,善于多方位思考问题,找准关键地方,迅速定位。
下面举例说明。

Hctf 逆向第1题(善于使用工具)。

107.189.158.112/d55757a7ccf958399789e18e1d8199de/babyCrack.zip
这个题目如果直接去调试,还是比较麻烦的,因为没有提示字符串,函数也不明确,但是如果用PEID先查壳,就能快速知道是,NET程序,
就可以用ILSpy或者.net reflector工具反编译出源码,

看到点击button函数,就可以看到flag:hctf{bAByCtsvlmE!}。

Hctf逆向第2题(善于抓住题目信息或者说题目暗示

107.189.158.112/e81cbc49ae92b00d3b55430f21cbe2fe/babyCrack2.zip
这个题开始拿起用peid查了壳,发现没有壳。用OD跟了下,逻辑感觉不难,调理也很清楚,开始来了就一致在检测这个文件是不是PE文件,检测完了再单步走一下,就可以try again!!,
the key is what you agin这些字符串,比且在开始也压入了一个字符串”idug|35utCCbzDusnF34~”,后面也会有跟这个字符串比较的函数。

以为感觉就对了,但是后面在调试的时候,感觉无论输入啥子,都有点不对。
后面同伴提交了那串字符串,结果是对的。但是后面官网说了,那个题目答案有误。
正确的答案应该是每个字符串减1.
为什么呢。
idug每位的ascii减一就是hctf.在结合题目,.比赛中部分flag形式为hctf{xxxxxx},部分flag不带hctf话括号,提交所见flag即可。
就可以得到答案了。我也看了writeup知道的。
其实这个题目考察的主要就是一个观察力。逆向能力要求也不是很高。

hctf apk的一个题目(NomalFile)(需要的也是善于观察)

这个题目本身是图片,图片里面嵌入了又一个png图片,去掉png的内容,就是一个APK,这里就不说了。用apk改之理反汇编后,算法也明确。


flag就是字符数组(16位),算的时候取它的 0 4 8 12 1 ‘+’‘ +’ 13位跟其他一组数做xor,最后跟这个字符数组的第6 10 14 3 ‘+’ 11 “+”作比较。还有些限制条件,15位与13位相等这些,这里就不说了。
通过这些条件就可以确定数组的某三位了。
还有一个就是接受用户输入的时候,不够16的位,它会去读取String str1 = Environment.getExternalStorageDirectory().getPath() + “/brand.txt”;的第一行,凑够16位数字。
开始同伴一直在找这个文件,无果。
后面就想,既然接受用户输入,那么答案就应该可以不相同的。自己就凑了一个答案,感觉符合条件。以为对了,提交的时候错误!!!
导致最后也没有成功提交。
看了writeup后,心里各种 草泥马,在strings..xml里面有个字符串,401!n++p;这个就对应最初取的那几位。


这样,就可以确定flag.
主要是没有经验,也没有敏锐的观察力。唉,伤不起。

hctf apk的第2题,

该题也不是很难,关键信息也很容易定位,更改2个跳转就可以输出flag,尼玛,输出的时候是日文,打印出来各种提交,各种不通过。最后也没有解决,就不附图了。
关键是现在都还没有解决,没有看到writeup啊。

hctf Linux下的一个题(善于使用脚本语言)。

该elf文件是一个64的文件,导入ida中,很快就可以看到check函数,或者字符串You Win,Sorry等,

调理很清楚,后面分析出来算法(矩阵),不知道怎么倒推回去,唉,编程能力太差,很多知道东西都不知道怎么写。
后面同伴想到用malab解,但是手工输入,解出来还是有些问题。最后看到了别人写的writeup,
用python导入了numpy库,就很快解出来了。

还有就是第一次SSCTF的第四题(善于多方面思考,不要一根筋

题目是”输入正确的密码,会释放出文件。key就在文件中。tips:第一层密码为6为纯数字,第二层密码也是6位。“
该exe文件是加了一层壳(FSG2.0),但是这个壳很好脱,也可以带壳调试。

在GetProcAddress或者函数后,就可以下GetDlgItemTextA、GetWindowTextA等断点,获取输入,后面调试一步步就很简单,就是文件的读取,创建等,很清晰的。
算法就是md5(md5(“HOWMPxxxxxx”)) == 09B2F924C20C5CA427EED2C5B98BEFBF,xxxxx代表输入,最后会调用strcmp比较,

如果输入正确后,会返回0,进入正确的分支,并释放文件,若不正确,就进入错误分支,当然也不会释放文件。
如果我们要看它到底释放什么文件,就可以强制跳转等。
这里我们也可以写脚本来解这个值,因为题目已经告知第一层密码是6为数字,

很快也能解出来。
但是第2层密码没有提示,这个要破解就很费力。后面同伴逆向思考或者换位思考,既然我们知道它释放的是什么文件,而且一般文件开头都是固定的,释放后数据就是通过异或来得到该文件的。
那么通过释放后的数据和正常文件的前6个字节xor即可得到密码,第一层释放的是PE文件,第2层释放的是gif文件,通过异或很快得到密码。
MZ…… =>4D 5A 00 00 00 00 xor 78 6C 34 39 38 37 =>35 36 34 49 48 47 =》564987
GIF89aX =》47 49 46 38 39 61 58 xor 30 68 37 1E 5A 12 => w!q&cs
分别是564987和w!q&cs。

还有一些其他的题目,就不一一列举了。

总之,感觉ctf逆向的题目,技巧、观察力、多方位思考、工具这些很重要,真正逆向能力要求也不是特别高,当然有些题目除外哈。不过越高越好赛,我也是各种不懂。
这些东西可能说起来还是容易,但是真正掌握还是需要一定时间。
逆向这个东西也需要慢慢来,掌握还是需要一定的积累,一定的经验