解析
先查一下基本信息,是无壳64位,打开ida,发现没有main函数,那么先在linux中运行一下,查找字符来查找主函数。
主要逻辑位置。
byte_6B4270的信息。
脚本
往回运算写。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char v1[136]; // [rsp+10h] [rbp-B0h]
int v2; // [rsp+98h] [rbp-28h]
char v3; // [rsp+9Fh] [rbp-21h]
int v4; // [rsp+A0h] [rbp-20h]
unsigned __int8 v5; // [rsp+A6h] [rbp-1Ah]
char v6; // [rsp+A7h] [rbp-19h]
int v7; // [rsp+A8h] [rbp-18h]
int v8; // [rsp+ACh] [rbp-14h]
int v9; // [rsp+B0h] [rbp-10h]
int v10; // [rsp+B4h] [rbp-Ch]
int i; // [rsp+BCh] [rbp-4h]
int byte_6B4270[] = {0x5F,0x0F2,0x5E,0x8B,0x4E,0x0E ,0x0A3 ,0x0AA ,0x0C7, 0x93 ,0x81 ,0x3D,0x5F,0x74,0x0A3,0x9,0x91,0x2B,0x49,0x28,0x93,0x67 };
int main() {
for (int i = 0; i < 22; ++i) {
v4 = i + 1;
v9 = 0;
v8 = 0;
while (v8 < v4) {
++v8;
v9 = 1828812941 * v9 + 12345;
}
printf("%c", byte_6B4270[i] ^ v9);
}
}
运行获得flag。
最后flag是flag{d826e6926098ef46}