CTF****入门_1

这篇文章写给众多参加东华网络安全大赛的小伙伴们~

初次撰写,大佬们发现错误的地方可以指正出来哈~

CTF****入门_1:http://blog.****.net/s1054436218/article/details/71698904

CTF****入门_2:http://blog.****.net/s1054436218/article/details/71809403

Windows下CTF赛题的主要工具下载:

PEID:http://down.52pojie.cn/Tools/PEtools/PEiD 0.95.zip(解压密码:www.52pojie.cn

IDA:   http://down.52pojie.cn/Tools/Disassemblers/IDA_Pro_v6.8_and_Hex-Rays_Decompiler_(ARM,x64,x86)_Green.rar

吾爱**版OD:    http://down.52pojie.cn/Tools/Debuggers/吾爱**专用版Ollydbg.rar

.Net reflecter  :  http://www.52pojie.cn/forum.php?mod=viewthread&tid=456893&page=1

dex2jar: http://www.52pojie.cn/thread-398647-1-1.html (请顺便下载一下JD-GUI)

——————————————————————以上工具均取自52**————————————————————————

下面介绍一下逆向题目的解题方法和以上工具的作用:

首先,当你拿到一道****题目的时候,你要首先了解你要**的程序是由什么语言写的,有没有加壳(壳可以理解为对程序的加密使逆向人员难以看到源码)。

PEID的作用就是查看一个PE文件是用什么语言撰写的,当然了,jar和APK这种不属于PE文件(你可以理解为PE文件就是windows下的exe文件和dll文件)。以下是PEID查看文件的效果图:

CTF****入门_1CTF****入门_1

图一  可以看到4_4.exe是由VC++编写的,并且没有加壳

CTF****入门_1CTF****入门_1

图2 可以看到CrackMe2.exe这个文件是加过壳的,类型是UPX

CTF****入门_1CTF****入门_1

图3  可以看到CrackMe_Challenge.exe这个文件是由C#写的,且没有加壳

对于CTF来说,查壳和了解编写语言是十分重要的,首先,不同的语言编写影响到你对工具的选择。例如阿拉神灯这道题(取自实验吧)

题目地址:http://www.shiyanbar.com/ctf/13

题目预览:


CTF****入门_1CTF****入门_1

图4  阿拉神灯

可以看到这个题目中只需要输入正确的通过密语就可以通过,并且我们提交的flag就是这个通过密语。假如没有PEID进行查壳操作,一般所做会把它看做为C++编写的,并拖入IDA进行静态分析(直接查看软件的汇编代码),理解大致思路后拖入OD进行动态分析(利用汇编代码进行动态调试,同时模拟寄存器和堆栈的情况),如果这道题这样做会比较复杂,利用PEID的话,我们可以看到这个软件是用C#语言撰写的:

CTF****入门_1CTF****入门_1

图5 利用PEID查看阿拉神灯的属性

我们发现这个软件是由C#编写的,高级语言编程有什么特点呢?如果没有混淆很容易就可以反编译(与反汇编有区别,反汇编是得到汇编语言的源码)出该语言的源代码,.net reflecter是一款优秀的.net反编译软件,我们直接把这个软件拖入到.net reflecter中去:

CTF****入门_1CTF****入门_1

图6 reflecter中看到的类和方法信息

假如你对C#语言有一定的了解,编写窗口程序时,VS默认的类名是WindowsApplication#.exe(#代表数字),这个类包含了这个窗口的方法和模块,其中可以看到Button1_Click()这个方法,它表示一个监听事件,对按钮进行监听,一旦点击这个按钮,就会触发相应的事件,这也就意味着,这个方法就是我们要重点关注的内容,双击这个方法,就可以看到反编译出的源码:

CTF****入门_1CTF****入门_1

图7 Button_Click()反编译出的源码

解释一下这个函数的逻辑,首先是一个if-else语句,TextBox1在图6中可以看到是TextBox类型,在C#窗体中,TextBox是一个输入文本,Strings.Trim()这个函数是用来去除字符串开头和结尾的空格的,然后与"[email protected]"这个字符串比较,如果相等就输出:“通关密语正确!”,否则就输出“通关密语错误!”。那么这道题到此就结束了,可见我们的通关密语就是“zhimakaimen”。

总结:这道题可能是反编译题目甚至是所有****题目中最简单的一类了,可能最大的问题在于一些C#语法的问题,所以如果碰到不会的函数或者语法问题,一定要记得问度娘或者google(如果会*的话),千里之行始于足下,以后很少会遇到如此简单的****题目,即使是反编译中,所以遇到问题一定要多思考多搜索,必定可以学会解决题的能力。

今天先写到这里,改天有时间再补,希望大家能热爱****这类题目吧~