pwn的看的有点头疼,现在来看看逆向的一个题。
首先IDA打开进行分析,发现函数少得可怕,这就可以一步步分析函数了:
把函数进行反汇编就可以发现进行flag比较的函数了,阅读发现这个加密其实就是一个简单的异或,v2起到的作用就是一个异或的中介,看v2的赋值语句发现其实很简单就可以理解了,就是start函数的地址减去sub_100000c90函数的地址再向后移两位再异或上一个值就可以了,关于加密的数组,双击一下byte_100001040就可以看到了:
这个就是一个加密用的数组,之后直接给出脚本就可以了,我用的是c语言的脚本,python的也是可以的:
#include <stdio.h>
#include<string.h>
int main()
{
int key[] = { 0x41,0x10,0x11,0x11,0x1B,0x0A,0x64,0x67,0x6A,0x68,0x62,0x68,0x6E,0x67,
0x68 ,0x6B ,0x62 ,0x3D ,0x65 ,0x6A ,0x6A ,0x3D ,0x68,0x4,0x5,0x8,0x3,
0x2,0x2,0x55,8,0x5D,0x61,0x55,0x0A,0x5F,0x0D,0x5D,0x61,0x32,0x17,0x1D,
0x19,0x1F,0x18,0x20,0x4,0x2,0x12,0x16,0x1E,0x54,0x20,0x13,0x14,0x0,0x0 };
int k = ((0x0000000100000CB0 - 0x0000000100000C90) >> 2) ^ key[0];
for (int i = 0; i <55; i++,k++)
{
key[i] -= 2;
key[i] ^= k;
printf("%c", key[i]);
}
printf("\n");
return 0;
}