做题笔记。
下载 查壳。
OK,压缩壳。
额,reverse肯定是需要掌握手动脱壳的,而不能一直依赖脱壳机。
手动脱壳。
可以用Ollydbg + LoadPE + ImportREC 实现 脱壳 dump 修补表 得到最终脱壳的.exe
不过,挺麻烦的(我反正 LoadPE + ImportREC 用的不是很熟。)
可以考虑用X32dbg去实现脱壳、dump、修补表(选择它,是因为它的插件很好用。)
题外话:32位和64位脱壳的方式并不一样。
(手动脱壳 详细教程:X32dbg)
F9
进行dump操作。
修复表:
验证:
题外话:(部分)
推荐去看《加密与解密》挺厉害的。
脱壳之后做题:
32ida打开。
进入main函数。
脚本:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char encode[] = { 0x12 ,0x4, 0x8, 0x14, 0x24, 0x5C, 0x4A, 0x3D, 0x56, 0x0A, 0x10, 0x67, 0x0,0x41, 0x0 ,
0x1, 0x46, 0x5A, 0x44, 0x42, 0x6E, 0x0C, 0x44, 0x72, 0x0C, 0x0D, 0x40, 0x3E, 0x4B,
0x5F, 0x2, 0x1, 0x4C, 0x5E, 0x5B, 0x17, 0x6E, 0x0C, 0x16, 0x68, 0x5B, 0x12,'\0'};
unsigned char key[] =
{
116, 104, 105, 115, 95, 105, 115, 95, 110, 111,
116, 95, 102, 108, 97, 103, 0
};
char flag[50] = " ";
for (int i = 0; i <=42; i++)
{
flag[i] = key[i % 16] ^ encode[i];
printf("%c", flag[i]);
}
printf("\n");
system("pause");
return 0;
}
flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}