[MRCTF]XOR-无法生成反汇编的处理
主程序,无法生成伪代码
由此分为两种方法即:
- 直接看反汇编
- 解决问题,尝试生成伪代码
硬啃汇编
输入与输出
判断输入长度是否为0x1B,其中al为eax的低8位
将输入的字符每个与当前字符所在下标异或并与密钥对比
算法很简单
a = [0x4d,0x53, 0x41, 0x57, 0x42, 0x7E, 0x46, 0x58, 0x5A, 0x3A, 0x4A, 0x3A, 0x60, 0x74, 0x51, 0x4A, 0x22, 0x4E, 0x40, 0x20, 0x62, 0x70, 0x64, 0x64, 0x7D, 0x38, 0x67] flag = '' for i in range(0x1b): flag += chr(a[i]^i) print(flag)
脚本得flag
flag{@_R3@1ly_E2_R3verse!}
尝试找出无法生成伪代码得原因
无法生成伪代码两种可能;
1、IDA无法识别出正确的调用约定。
2、IDA无法识别出正确的参数个数。
总之就是函数出了问题,其实只要先把scanf和printf生成伪代码,就能生成main
剩余方法相同,其实原因上是因为printf的参数,按道理来说是要改一下main函数的,但不知道为什么直接生成了