Chapter.三 Do you know IDA?(1 / 2)
东方阅读网【www.dfmsc.com】第一时间更新《从零开始的CTFer生活》最新章节。
在连续尝试了几次之后,筱懿明大概明白了这个程序的用意——
“看起来这是一个验证程序,应该是一个字符串同时也是题目的答案,只有当我输入正确的以后它才不会输出‘yr i rg’?但是我根本不知道是啥啊,知道的话直接提交到平台上拿分了!”
筱懿明在比赛平台上注册了一个叫「Aplype」的账号,意为「天启」,听起来似乎是一个十分帅气的名字——可惜目前Aplype大佬的得分暂时为0,屈居排行榜最后一名,和榜单第一页的选手相比至少有上千分的差距。
不过只要解开这道题,筱懿明将会获得这场比赛中的第一个50分——虽然对于整个榜单而言50分好像还是无足轻重,但是对于筱懿明而言,这将是他迈入信息安全世界的第一步——从CTF中的revere类题目起手。
“怎么弄...按照之前比赛平台的说明,的形式应当是「geeertf{}」...那么前面的这几个字符就应该是「geeertf{」...最后一个字符应该是「}」...”筱懿明挠了挠头,对于逆向工程一无所知的他而言,要分析一个二进制程序根本无从下手,“中间的字符串怎么弄,爆破?一个一个字母地输肯定不行...写个pyt脚本自动爆破?如果本身太长的话这d爆破到毕业都不一定爆得出来...”
“思来想去,于是我们就让思来去了。”筱懿明的脑子里不知为何冒出了他高中班主任讲过的一句冷笑话——当然,这除了拖时间和给想不出内容该写啥的作者凑字数以外毫无任何作用,但这仍然给了筱懿明一个新的启发。
当然,其实也并不是这句话给了他启发,在他想到自己以前打NOIP时所学的算法知识在CTF中似乎排不上用场之后,他就开始转变思路——重新看向比赛平台网页上的题目,这一次,他发现了之前被他所忽略的一个按钮——
「Vie it」
“it”意为“提示”,即便是如此简单的一道入门级别的CTF逆向题目,主办方也十分贴心地为初来乍到的参赛选手们提供了提示信息。
筱懿明迫不及待地点开了提示,发现只有这样一句话——
「D y IDA?」
在计算机界有着这样的一份一直被奉为经典的文档——《提问的智慧》,用以指导入门者如何通过恰当的方式分析并解决自己的问题,以减少世界上很多没有必要存在的提问,提高大家的效率。当然,作为十分经典的一本提问指南,它同样也有着中文翻译版本(您甚至可以在GitHb上找到它)。
混过一段时间OI圈的筱懿明自然甚至自己动手解决问题的重要性——当然,并不是因为熟读《提问的智慧》三千次的原因,只是因为很多时候在群里问问题的时候大佬们甚至都懒得回一个句号,于是自然而然地便养成了“遇事不决就百度”的习惯——虽然说哪怕是在看到it之后他仍然还是很想问问相关专业的学长:「CTF究竟是个什么东西?」。
当然,刚开学没多久再加上日常自闭,他也不认识几个学长。不过既然眼下比赛方给他指出一条明路,筱懿明自然乐于上百度寻找答案,这倒是与一位名为“空格”的学长的名言有着几分相似之处——“你问我我也要百度的啊”——或许百度才是解决问题的最好方式。
不过若是问起计算机相关的从业人士心目中最好的搜索引擎,可能答案都会是“谷歌”。
筱懿明随即在搜索栏中敲下“IDA”三个字母,没过多久他便在百度上找到了答案——
IDA,即「Itertive Diebler 」,意为交互式反汇编器专业版,是目前业界内最为常用的、也是最为优秀的一款静态的软件分析工具,可以十分方便地将一个二进制文件反汇编成可供计算机类从业人员所能够读懂的汇编语言代码,甚至能够反编译为C语言代码,令整个程序的运行逻辑一览无余,可谓是逆向工程当中用以分析二进制文件的绝无仅有的「神器」。
当然,正所谓“魔高一尺道高一丈”,为了保护自己的软件不被破解,各种反逆向工程手段也层出不穷——花指令(用无效代码迷惑反汇编器)、反调试(占用ptre位让gdb无从下手)、代码自修改技术(Self Mdify Cde,运行时才决定真正的代码)、加壳(px、vp...)等等——当然,对于我们的主角筱懿明而言,这些东西暂时还太过于遥远,此时的他才刚刚开始做第一道入门的CTF逆向题目。
快速在汝爱破解论坛上下载好最新版本的IDA之后,筱懿明便按照从网上搜索到的教程,将二进制文件拖入到IDA中,一个奇特的界面出现在他的眼前——
最左边的窗口是「 e」,其中有一个拥有很多项目的列表,按译名似乎是“函数名”——这似乎代表着在该程序当中用到的函数?但是有的函数名是粉色和淡蓝色背景的,这令筱懿明有些摸不着头脑;中间的也是最大的窗口则标注着「IDA vie-A」,是一个图形化的框图——不同于高中数学课本上的程序流程图,这里的流程框图中的内容可是「实打实的汇编代码」。
可惜的是,对于只会一点点C语言的筱懿明而言,想要立即学会读懂汇编代码简直难如登天,但至少现在他能够通过IDA这个软件,真正明白这个程序的运行逻辑。但是相比起直接硬看汇编代码,他更希望能够看到简单易懂的高级语言代码——毕竟硬看汇编代码分析程序逻辑是专业的逆向工程人员该做的事情,而他暂时还只是一个连信息安全的门槛都还没有摸到的大一新生。
幸运的是,IDA是有着反编译的功能的,这也令筱懿明暂时不需要临时多学一门汇编语言——虽然说二进制安全并不是一个能够抛开汇编语言的领域。
“将光标标在一个函数上...一个程序的入口点应该是i函数吧...”筱懿明仔细检索着函数窗口中的每一个字段,“原来一个程序里面封装了这么多函数啊...”
当然,若是他选择使用Lix下的ELF文件进行分析,对于这道题而言,筱懿明毫无疑问能够一眼看到i函数在哪——归功于Lix的延迟绑定机制与动态链接库。
“有了,i函数。”
筱懿明将光标放在i函数上,双击鼠标左键表示选中,随后他便按照网上的教程,轻轻地敲击了键盘上的F5键——
程序主函数的反编译代码悄然浮现在一个名为「-A」的窗口中:
------
it __del i(it rg, t r rgv, t r evp)
r Str1[112];//[rp+20][rbp-60] BYREF
r Str2[48];//[rp+90][rbp+10] BYREF
r v6[48];//[rp+C0][rbp+40] BYREF
it v7;//[rp+F0][rbp+70]
_i();
trpy(Str2, “geeertf{We10e_t0_7e_0r1d_0f_rev3r5e!}“);
eet(v6, 0, izef(v6));
v7 = 0;
pt(“ t GeeerCTF2021~Plee ipt yr tere:“);
f(“%“, Str1);
if (!trp(Str1, Str2))
pt(“Y get te rigt !“);
ele
pt(Srry);
retr 0;
------
“不愧是...IDA...”
毫无疑问,虽然说看起来还是有些许混乱,但是整个程序的逻辑已经在筱懿明的面前一览无余——读入一个字符串与预先储存好的字符串相比较。
东方阅读网【www.dfmsc.com】第一时间更新《从零开始的CTFer生活》最新章节。
本章未完,点击下一页继续阅读。