CTF逆向工程入门_2

CTF逆向工程入门_1:http://blog.csdn.net/s1054436218/article/details/71698904

CTF逆向工程入门_2:http://blog.csdn.net/s1054436218/article/details/71809403

上一篇讲了算是最简单的一类逆向题目,.Net类型的逆向工程,这次主要是对于C/C++编写的软件。

前面已经介绍简简略提了下IDA是一种用于静态分析的反编译软件。什么是静态分析呢?在计算机中,几乎任何程序都要编译器编译到汇编级别才可以使用,也就是说,对于一个可执行文件,一定是可以把它的机器码转换成汇编语言来查看逻辑的。而IDA是一款十分优秀的静态反汇编软件,不仅可以清楚的查看程序所用到的各个函数还有函数的汇编源码,还可以在汇编的基础上将汇编语言解释为C/C++以便逆向人员来理解。

具体运用的方法以一道Crackme的例子来说明IDA的运用和一般破解思路:

样例下载地址:http://reversing.kr/download.php?n=1

首先观察这个软件,界面如下:

图1:  Easy_CrackMe界面

任意输入一串字符或者不输入字符,点击??按钮,会有以下得到以下反馈:

图2:  任意输入一个字符串的反馈

于是我们不难推测,这个软件的逻辑大概就是输入一串字符串,点击按钮后,程序会获取输入框的数据,假设你输入的字符串满足某种条件(比方说跟一个明文字符串相同、或者按某种数学运算得到的字符串满足什么规律或者移位后有什么规律),就是正确答案,否则就会弹框出“Incorrect Password”。如果我们不是逆向人员,想要知道真正的密码可能要尝试无数次数字和字母组合才能得到正确答案,如果我们用IDA分析这个软件的话,便可以从逻辑角度获取真正的密码,首先把它拖入到IDA中:

图3:  使用IDA打开后可见Easy_CrackMe.exe的源码

得到由于汇编源码比较庞大,可以直接按F5进行反编译,反编译后可以看到C语言的源码:

图4:  C语言源码

发现反编译后的源码只有一句,而且只是一个初始化的函数,可见我们首要的任务是要找到关键函数(也就是点击button触发的函数)。回想一下刚才我们出入错误时反馈的字符串"Inocrrcet Password",那我们其实只要找到调用字符串"Incorrcet Password"这个字符串的位置,就应该离关键函数不远了,而IDA为我们提供了调用明文字符串的的查找方法,回到汇编窗口(上面的IDA浏览标签)点击快捷键: A/t+t 会弹出一个文本查找窗口:

图5:  IDA自带的文本搜索

输入,Incorrect Password,然后点确定,搜索结果如下:

图6:  搜索结果

搜索出两处,我们只用点开第一处就可以了:(因为第一处是在函数中调用的,第二处是在堆里,所以附近没有一般代码,更没有关键函数了)

图7:  调用“Incorrect Password!”的地方

于是我们找到了调用Incorrect Password的地方,看左边,调用了“Congratulation !!”字符串,意思是恭喜,那么我们就清楚了,输入错误的串弹窗就是“Incorrect Password”,输入正确的弹窗应该就是“Congratulation”了,点击F5,查看C语言代码会更清晰一些:

图8:  反编译后的代码

代码比较短,逻辑很容易懂,memset是个赋值的函数,它先把0x60(注意带0x是十六进制)长度的v3都赋值为0。然后把文本框里长度最多为100的字符串赋值给String所在的地址,由于String只是char类型,所以实际上输入的串会直接按顺序排,比方说输入的是123,那么String就是1,v3就是2,v4就是3。

__int16和 char类型差不多,也就是说这几个字符分别代表字符串中的:

 

变量Stringv3v4v5v6v7
位置012345

97是字符a的ASCII值,69是E的ASCII值,双击a5y,a5y变量中存的值为"5y",aR3versing变量中存的是"R3versing"。

也就是说String==69=='E',v3==97=='a',v4==a5y=="5y",v5==aR3versing=="R3versing"。

连起来,密码就是Ea5yR3versing,输入我们的答案,结果是正确的:

 

图9:  Congratulation !!

总结:破解逆向题目之前首先要观察程序的特征,并根据这些特征推测函数的逻辑和关键函数,然后再利用IDA查看源代码并进行分析,理清思路,然后就可以反向推出结果了。特别要注意不是所有时候F5大法都适用,不过初学可以暂时利用F5入门哦。

 

  • 11
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值