CTF的reverse入门学习笔记
reverse,即逆向,指对一个程序进行逆向的分析来得到flag。
常见的入门reverse题型有给你一段代码,让你根据得到的代码进行分析,然后写出另一份代码,这份代码通常是对于原代码encode(加密)的decode(解密),通常的加密方式有古典密码,base编码,ascii码,AES,DES,TEA等。入门的话对代码有一定理解能力,掌握常见古典密码,base编码,ascii码,TEA或许就够了。(。)这种题目就是分析一波代码然后看怎么构造出来,通常会有一些代码没啥用,有一些代码反着写,有一些代码是生成密匙。
然后是反编译,一般直接用IDApro进行静态分析即可,F5转化为C即可,然后如上。通常题目不会这么直接,会给程序加一层壳或加一些代码混淆,是我们不能正常反编译,这两个技巧掌握差不多也够入门了吧,应该是。
加壳最常见的是UPX壳,这个kali linux可以直接命令行解决,如果是windows,可以下相应的去壳程序,也可选择手动去壳,入门还是先把手动学会吧,一般我们用x86dbg或者OD这两个程序进行手动脱壳,但是OD只支持32bit,所以或许x86dbg更好?
用x86dbg我们首先可以直接去查看断点,看有没有pushad或者jmp,然后就直接用插件处理一波就行。或者找到pushad或是其他可以说明壳开始执行的命令,然后设置EIP然后F8找到下一个ESP(RSP)改变的位置,然后直接在ESP对应存储地址设置硬件断点,然后F9找到相应断点,然后直接找popad或其他能说明壳把程序暴露出来的命令,然后找有没有jmp之类的命令,然后如上。
查壳一般用Exeinfo。
有时候我们把文件拉入ida按F5后发现没法正确反编译,会有一行红字,然后我们查看IDA-view发现有一些命令旁边有红色提示,一般是花指令,我们一般大概分析一下然后把会影响正常编译,但实际对代码执行的时候又没什么影响的命令可以直接nop掉,如果较多可以用py插件,用get_wide_byte以及patch_byte两个函数处理一下就行。
差不多入门就这?入门主要是需要提高逆向分析代码的能力吧,我觉得。

浙公网安备 33010602011771号