CTF逆向工程入门_1

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

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

CTF逆向工程入门_1:http://blog.csdn.net/s1054436218/article/details/71698904

CTF逆向工程入门_2:http://blog.csdn.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逆向工程入门_1_第1张图片

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

CTF逆向工程入门_1_第2张图片

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

CTF逆向工程入门_1_第3张图片

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

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

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

题目预览:


CTF逆向工程入门_1_第4张图片

图4  阿拉神灯

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

CTF逆向工程入门_1_第5张图片

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

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

CTF逆向工程入门_1_第6张图片

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

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

CTF逆向工程入门_1_第7张图片

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

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

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

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

你可能感兴趣的:(CTF_RE)