分享

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

 西北望msm66g9f 2018-08-05
前言

近期“网鼎杯”比赛是一个比较热门的话题。为此,笔者准备复习、学习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的动态操作。

上篇终。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多