逆向攻防世界CTF系列1-Hello,CTF
逆向CTF系列1-Hello,CTF
下载文件首先查壳
是32位的。
上面的图看到了没有。说明这个软件是没有加壳的。是用Microsoft Visual C++ 6.0软件编写的。如果查到了是aspack的。那就说明是加了aspack的壳。您可以用专门脱aspack脱壳机来脱壳。很多高手都是用OllyDBG V1.10 手工来脱壳的。
可以先运行一下源程序,输入123,发现输出wrong
可能是要我们输出success才行。在ida中再看看,果断F5。
1 | int __cdecl main(int argc, const char **argv, const char **envp) { |
sub_40134B没搜到他的用途,但是读完代码并理解后可以假设一下他是输出函数,也就是,在v10和v13相等才会输出v13
简单讲一下代码逻辑,输入v9,v9长度不能大于0x11(0x11=17,16进制,因为0x),循环17次,取出每一位如果为0则退出循环,不为0则拼接到v10(16进制),循环结束后进行比较。
也就是437261636b4d654a757374466f7246756e是输入字符串的16进制
%x以十六进制数形式输出整数
当然也可以写脚本:
16
进制字符串转字符串,大致的逻辑就是将16
进制字符串每两个字符组合在一起得到一个16
进制的字符串
1 | x='437261636b4d654a757374466f7246756e' |
以下是 int() 方法的语法:
1 class int(x, base=10)参数
- x – 字符串或数字。
- base – 进制数,默认十进制。
CrackMeJustForFun
成功,CrackMeJustForFun就是flag
补充一下壳的知识:
壳是指在一个程序外面包裹一段代码,保护里面的代码不被正确反编译或非法修改,在加载到内存时般先于程序运行,拿到控制权,然后保护并加载程序。
加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。加壳过的程序可以直接运行但是不能查看源代码,要经过脱壳才可以查看源代码,这样可以起到保护程序的作用。
- 压缩壳:通过压缩算法压缩软件大小。
- 加密壳:利用各种反跟踪技术保护程序不被调试、脱壳、反编译。