[src = hackme] helloworld
题目描述
Guess a number please :D
WP
二进制程序,首先用IDA打开,查看流程,发现这是32位ELF文件。本题为入门题,可以直接使用IDA的F5功能,查看程序流程:
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
可以看出程序首先要求输入一个数n,然后跟数值0x12B9B0A1比较,如果相等,则对flag数组的每一个元素(字节)与n进行XOR运算,就可以得到flag(需要注意的是因为flag数组的每个元素为一个字节,所以虽然与n进行XOR,实际起作用的只有n的低位字节,即0xA1)。
所以只需要写一个脚本完成这个过程即可。
我们使用Python完成该部分脚本如下:
1 | from struct import pack |
注意:
本例为python3程序,如果使用python2,decode(‘ISO-8859-1’)就不需要。关于pyhton2与python3的bytes和str的转换可以查阅相关资料,另外各种基本的的编码也应该熟悉,比如ASCII,GB2312,Unicode,UTF-8,ISO-8859-1等。
[知识点]
本题考察基本的逆向工程理解代码的能力,所以直接使用IDA既可以看到反编译的源码(F5),不过对于初学者还是建议分析一下具体的汇编代码,有助于理解汇编语言。
python写脚本的能力也是非常重要的!