CTF逆向分析(超详细)(上篇)
转载自http://www.360doc.com/content/18/0805/19/36367108_775922109.shtml
近期“网鼎杯”比赛是一个比较热门的话题。为此,笔者准备复习、学习CTF的相关赛题。逆向作为CTF的高分值赛题,笔者不敢有丝毫疏忽,将要入门逆向。所以,诞生了此文。
拿到逆向题目步骤:
第一步:
PEID查壳
看二进制文件是否加壳--》比较难
如果没有加壳:静态 、 动态
静态分析:windows下的 IDA PRO
动态: windows下的OD linux下的EDB、GDB
第二步:
逆向:
1.破解类:
2.算法分析: 综合性稍强(看懂 核心代码,,知道字符串如何进行比较)
3.绕过:(难度稍大)*
驱动保护、代码混淆、反破解
** 常用语言:**
C(ida看到的一些名称空间的比较多、一些库)、C++(比C难)
在逆向代码时,时刻关注:“关键代码”
关键代码:从输入开始,获取flag的部分
关键代码特征:
1运算:对输入进行处理与或非亦或等
2循环:一定有比较、跳转、变量的变化(对字符串的处理一定是循环)
一个代码既有循环又有运算 -> 一定是关键代码
我们:快速找到关键代码并对其分析
ida:shift + f12 :找关键代码段
比如:报错、让你输入的信息
如果找不到关键代码,也可以设置API断点。一定会有处理你输入的东西。比如,接受完你的输入后的代码
接下来,用一道题目来解析
(先给大家介绍 动态 (工具:OD、记事本、计算器(作十进制、十六进制的转换)))


首先“Please give your passcode:”
这个东西也可以算是一个关键的代码

输入完就关了
这意味着:我能看到的信息就是这样子
首先查壳(此步省略,因为提前知道没有加壳)

OD下进行分析

第一步“中文搜索”、智能搜索

再一步: ctrl + f


这个就是我的 关键信息

如果我的输入正确,则会执行这一步
双击“请输入你的 passcode”

就会 跳到 那一步

我们看到了%20s

%20s下面紧接这的就是 scanf函数


说明输入字符传的类型,最长 20位
然后我们开始下断点

为什么在scanf下设置断点
因为scanf函数调用完后,就会停下来接受你的输入
双击 机器码 即可 设置断点

断点设置好后,就可以运行这个程序


我们输入 1234567890
回车

程序就会停在这一行

接下来就 单步 向下

这里很重要

move 这个操作 就是 赋值 为 0

state的信息也需要看,是否有没有输入

这是一个跳转,我们跟着跳

跳到这里,发现在做一个 比较
这就是比较关键的信息了
在和15 做比较

如果小于等于15

就跳到这里

如果<>

这就是典型的循环,有各种各样的运算
循环的变量应该是16次0-15
接下来 就看 循环 里作什么事情

单步向下
这是一个变量的赋值

然后又是一个跳转

调到了 一个 比较

这是 0 和3 在做 比较

<>

又回到jump的下一行
大概代码:

这是两次跳转的大致的外围结构。
上篇先简单写到这里,作为入门基础,还请大家预习汇编指令、数据结构,才能更深入的学习逆向。
明天发中篇,将本题的重点,以非常详细的思路写出OD的动态操作。
上篇终。