CTF逆向分析(超详细)(上篇)

2020-06-20  本文已影响0人  V7hinc

转载自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、记事本、计算器(作十进制、十六进制的转换)))

image.png image.png

首先“Please give your passcode:”

这个东西也可以算是一个关键的代码

image.png

输入完就关了

这意味着:我能看到的信息就是这样子

首先查壳(此步省略,因为提前知道没有加壳)

image.png

OD下进行分析

image.png

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

image.png

再一步: ctrl + f

image.png image.png

这个就是我的 关键信息

image.png

如果我的输入正确,则会执行这一步

双击“请输入你的 passcode”

image.png

就会 跳到 那一步

image.png

我们看到了%20s

image.png

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

image.png image.png

说明输入字符传的类型,最长 20位

然后我们开始下断点

image.png

为什么在scanf下设置断点

因为scanf函数调用完后,就会停下来接受你的输入

双击 机器码 即可 设置断点

image.png

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

image.png image.png

我们输入 1234567890

回车

image.png

程序就会停在这一行

image.png

接下来就 单步 向下

image.png

这里很重要

image.png

move 这个操作 就是 赋值 为 0

image.png

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

image.png

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

image.png

跳到这里,发现在做一个 比较

这就是比较关键的信息了

在和15 做比较

image.png

如果小于等于15

image.png

就跳到这里

image.png

如果<>

image.png

这就是典型的循环,有各种各样的运算

循环的变量应该是16次0-15

接下来 就看 循环 里作什么事情

image.png

单步向下

这是一个变量的赋值

image.png

然后又是一个跳转

image.png

调到了 一个 比较

image.png

这是 0 和3 在做 比较

image.png

<>

image.png

又回到jump的下一行

大概代码:

image.png

这是两次跳转的大致的外围结构。

上篇先简单写到这里,作为入门基础,还请大家预习汇编指令、数据结构,才能更深入的学习逆向。

明天发中篇,将本题的重点,以非常详细的思路写出OD的动态操作。

上篇终。

上一篇下一篇

猜你喜欢

热点阅读