转载自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.pngOD下进行分析
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.pngmove 这个操作 就是 赋值 为 0
image.pngstate的信息也需要看,是否有没有输入
这是一个跳转,我们跟着跳
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的动态操作。
上篇终。
网友评论