CTF-逆向教程1入门级
本帖最后由 小白670 于 2018-5-6 14:46 编辑1.Bugkuctfeasy_vb(用OD搜索字符串,得到明文flag)
2. Bugkuctf easy_re(flag不是明文,用函数传递值,strcmp比较)这里用了SSE2指令,这篇博客对存储指令有详细介绍,做题时直接百度不知道的函数就可以了https://blog.csdn.net/bwl111/article/details/8980449
3.南邮ctf Hello_re(flag以整数保存,以小端序存储的,反过来即可)
4.实验吧 justclick(反编译后可知根据顺序点击按钮得flag)
用PEID或者exeinfo可以发现是c#写的程序,这就需要用到一个新的工具,Reflector,用Reflector.exe打开要分析的程序,然后可以找到MainWindow,
在MainWindow里发现了如下函数,分析之后进入check发现只要每次点击的按钮和程序要求的顺序一致则成功
5.实验吧 证明自己吧(异或比较得flag)Ida分析,F5后可以看到程序逻辑清晰,函数对输入的字符串进行处理判断是否正确,关键是sub_401060
进入函数后可以看到加密过程,其中v5,v6,v7,v8,v9在地址上是挨着的,所以只需要把数据取出来然后逆向处理就能得到正确的输入,flag就是我们的输入
在程序中可以找到相应数据
然后写脚本处理数据,这里要注意,函数在处理时是以byte为单位的,取数据的时候要注意顺序,将第一个dword变成byte可以发现是小端序
脚本如下:
v5=
#倒过来处理
#先减5,再异或0x20
str1=""
for i in range(14):
v5-=5
v5^=0x20
str1+=chr(v5)
print str1
6.实验吧 该题不简单 (根据用户名生成flag,strcmp比较) 用ida分析,shift+F12,找关键字符串,找到后找到引用,发现了关键函数
可以得知是根据sub_4011D0判断是否正确,进入函数分析
对了,题目还有提示
所以只要将hello进行处理,然后在前面加上Happy@就是最终的flag了脚本如下:
username="hello"
str2=""
for i in range(len(username)):
str2+=chr((i+i*ord(username)*ord(username))%0x42 +33)
print "Happy@"+str2
入门级总结:
入门级的逆向题,大多数程序的逻辑清晰,能很快定位到关键函数,并且加密算法既验证算法简单,刚开始学逆向的可以利用这些题目熟悉逆向工具的使用,难度不高但是可以保护新人平稳度过逆向刚开始艰难的入门期。
入门级题目一般在ctf训练平台上找,在ctf比赛中这种题目出现概率非常低。逆向入门题还是需要熟悉汇编的,所以没学过汇编的同学最好最好先去看书,然后在去做逆向题。如果入门级的题目觉得没有难度的,可以试着尝试一些更难的题。最后,希望想学习逆向的朋友都能体会到逆向的魅力!
最后谁能告诉我怎么去掉后面多出来的图片啊,我在编辑器里没有添加啊,而且也删除不了
已经把程序附件给传上来了
希望多多更新啊
{:1_919:} gunxsword 发表于 2018-5-4 21:20
没太看懂,中间的那段纯纯的源代码是怎么来的mainwindow那个?
IDA现在还不太会用,还在学习中,看IDA的代码 ...
那个是c#,要用Reflector反编译,怪我没说清,ida还是很好用的,就是需要你熟悉它F5后的代码,我一开始也是用OD的,但是OD只能调试exe,所以说学ida还是有必要的 学习学习 没事看看 适合萌新,赞一个!{:1_921:} 没太看懂,中间的那段纯纯的源代码是怎么来的mainwindow那个?
IDA现在还不太会用,还在学习中,看IDA的代码,有些都不如看OD来的容易,还得学啊!感谢大佬分享教程! lanlana 发表于 2018-5-4 19:15
希望多多更新啊
后面会继续更新,但是难度会提高 好教程 收藏了 感谢分享 谢谢分享,学习了