powerPC的东西,如果IDA没有插件还真不好弄。我就没有
不过可以用Retdec可以实现反编译
py \tools\retdec\bin\retdec-decompiler.py powerPacker
然后拿到c语言的代码,找到主要加密逻辑
int main(int argc, char ** argv) {
char * v1 = (char *)0x45484b7d; // bp-48, 0x100006f0
int32_t v2; // 0x100006bc
printf("Insert password : ", (int32_t)argv, v2, 0x45484b7d, 0x6b616e71, 0x78676172, L"mg", 0x7265);
int32_t v3; // bp-80, 0x100006bc
scanf("%31s", &v3, v2, 0x45484b7d, 0x6b616e71, 0x78676172, L"mg", 0x7265);
for (int32_t i = 0; i < 21; i++) {
char * v4 = (char *)(i + (int32_t)&v1); // 0x10000760
*v4 = (char)((0x1000000 * (int32_t)*v4 - 0x2000000) / 0x1000000); //对给定串减2再比较
}
// 0x10000798
if (strcmp(&v3, (int32_t *)&v1) == 0) {
// 0x100007b8
puts("Password is correct. Submit this as the flag.");
} else {
// 0x100007c8
puts("Wrong password.");
}
// 0x100007d4
return 0;
}
加密方法就是对给定串减2再与输入比较,注意这里给定的串是以32位整形给出的,不清楚是程序本身就那样还是由于反编译程序的问题。不过还好能看出来。
a = b'EHK}kanqxgarqygtre'
print(bytes([i-2 for i in a]))
#CFI{i_love_powerpc
#flag{i_love_powerpc}
将给定串减2后再处理一下包裹就行了。1分区出来以后还会有这么简单的题真不可思议。