四道题,为一下链接中的四道Easy题(当做入门题真的很好很好啊)
http://reversing.kr/challenge.php
Easy Crack、Easy Keygen、Easy Unpack、Easy ELF
0x00 Easy Crack
首先,打开程序发现是要输入正确的password
于是,拖进OD中调试
在输入password后,会调用getDlgItemTextA函数获取password,于是在该函数下断点
然后我们会发现跳转到这里
我们可以看到cmp,不匹配的话会跳转到00401135,
于是,可以知道这就是password的验证过程。
分析其中比较的代码,可以得出几个部分(按顺序)
1.二位是否为a
2.三四位是否为5y
3.后面是否接着R3versing
4.第一位是否为E
所以便可得出password: Ea5yR3versing
0x01 EasyKeygen
下下来后,会看到这么一段
也就是说,我们得首先找出他的加密算法
拖进OD看,可以找到其加密的步骤,然而在汇编下看过于复杂,于是这里换种工具,进入到ida中查看
在main函数中按f5反编译成c代码
发现主要是这一段
v11为输入的name,可以看到其调用了C中sprintf的函数,再把结果存到v15,
再输入serial到v11与v15比较,而v8、v9、v10可判断为三个连续的量
于是定义char v8 = {16,32,48};
根据这段代码,可以还原其加密算法
1 |
|
运行测试结果是正确的
根据上面进行的是每位与v8进行异或运算,于是可以写出逆向的算法
1 |
|
运行得出name:K3yg3nm3
0x02 Easy Unpack
Unpack即是脱壳,然而对脱壳一窍不通,但里面还包含了一个ReadMe
找到入口点,对这个没什么概念。
加壳:其实是利用特殊的算法,对可执行文件里的资源进行压缩,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。
看了看网上writeup,先拖进OD调试吧
发现运行到后面,突然来了个jmp 00401150
跳到这么一段地方
Ctrl + A 反汇编
得到
宛如一个正常程序的开始
于是00401150就是程序的入口点了
but…
这儿还有另外一个思路,就是拖进Peid直接查找(目瞪口呆.gif)
0x03 Easy ELF
查了一下,ELF是linux下的可执行文件
在linux中运行
可看出是一个检测密码的程序
因为文件格式为ELF,因此OD用不了的
拖进ida,再用f5
看到main函数是这么一个东西,点进sub_80484F7函数,发现是一个输出correct的函数
所以,最终就是看if条件里的函数了
然后看到一连好几个if,并且当不满足条件时return result都是0
上述变量都是char,于是我们猜测flag就在里面
1 |
|
按照地址顺序排序,输出,得到flag :L1NUX