CTF逆向分析(超详细)(上篇)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CTF逆向分析(超详细)(上篇)前⾔
近期“⽹⿍杯”⽐赛是⼀个⽐较热门的话题。
为此,笔者准备复习、学习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的动态操作。
上篇终。