Logo WP

【CISCN2021华南】ezre1

Article Image

直接搜索关键词 Input your flag ,打断点,断不下来

Article Image

fork 函数开了个子进程,v4是返回的pid,暂时没找到IDA调试子进程的办法,所以断不到,有知道的师傅请赐教

Article Image

划线的部分可以右键 - Create new struct type 创建结构体,便于分析

struct struct_qword_4060E0
{
  _QWORD q0;
  _QWORD q1;
  __int64 (__fastcall *pfunc2)(char *);
  _QWORD q3;
};

ptrace 的使用 ptrace函数深入分析 - 黑箱 - 博客园 (cnblogs.com)

这里意思是主进程 wait() 等待子进程信号

子进程:

Article Image

每运行一个程序块,都会 int 3 中断产生一个调试信号

动调的时候也会一直收到子进程的信号

Article Image
Article Image

这里点 change exception definition

Article Image

勾上 Pass to application,然后 OK - Yes(pass to app)

建议取消掉 Suspend program ,不然每执行一个程序块都会跳一个提示

莫名奇妙程序关了#

Article Image

观察到这里有个 alarm ,nop掉或者patch一下把时间改大即可

分析ptrace#

Article Image
ptrace(PTRACE_GETREGS, a1, 0LL, v10);

这里v10是个结构体,IDA没识别出来,sys/user.h>user_regs_struct

struct user_regs_struct
{
  __extension__ unsigned long long int r15;
  __extension__ unsigned long long int r14;
  __extension__ unsigned long long int r13;
  __extension__ unsigned long long int r12;
  __extension__ unsigned long long int rbp;
  __extension__ unsigned long long int rbx;
  __extension__ unsigned long long int r11;
  __extension__ unsigned long long int r10;
  __extension__ unsigned long long int r9;
  __extension__ unsigned long long int r8;
  __extension__ unsigned long long int rax;
  __extension__ unsigned long long int rcx;
  __extension__ unsigned long long int rdx;
  __extension__ unsigned long long int rsi;
  __extension__ unsigned long long int rdi;
  __extension__ unsigned long long int orig_rax;
  __extension__ unsigned long long int rip;
  __extension__ unsigned long long int cs;
  __extension__ unsigned long long int eflags;
  __extension__ unsigned long long int rsp;
  __extension__ unsigned long long int ss;
  __extension__ unsigned long long int fs_base;
  __extension__ unsigned long long int gs_base;
  __extension__ unsigned long long int ds;
  __extension__ unsigned long long int es;
  __extension__ unsigned long long int fs;
  __extension__ unsigned long long int gs;
};

导入ida之后,好看多了

注意不能用 user_regs_struct 作为名称,会冲突,要改下名称

静态/动态分析#

Article Image

相当于让子线程 call qword_4060E0->q1

Article Image

相当于让子线程 jmp qword_4060E0

冗长枯燥的体力活,对被平坦化的控制流进行分析,这里要还原出子程序执行流程,才能进一步分析,使用Frida hook每一处 jmpcall

Interceptor.attach(ptr("0x401AA5"), {
    onEnter: function(args) {
        console.log("call ", this.context.rax);
    }
});

/**
 * v10.rip = base_qword->q3;
 */
Interceptor.attach(ptr("0x401C7D"), {
    onEnter: function(args) {
        console.log("jmp ", this.context.rax);
    }
});
frida -f ezre -l hook_call_jmp.js --stdio pipe -o hook_call_jmp.log
  • -f 指定文件
  • -l 指定脚本
  • --stdio pipe 在程序 read 的时候暂停程序,如果不指定,就没法输入,程序就会接收到空字符串
  • -o 指定输出日志

这里随便先输个但是这里还是有问题,不知道怎么往PIPE里输入字符串,哎

直接从官网扒了个现成脚本

EXP#

dump出来的数据#

ezre_data.py

byte_dword_405080 = [
  0x7D, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x09, 0x00, 
  0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 
  0x81, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x81, 0x00, 
  0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 
  0xC1, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3D, 0x02, 
  0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
  0xC6, 0x02, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x83, 0x00, 
  0x00, 0x00, 0xBD, 0x01, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 
  0x08, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0x83, 0x00, 
  0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 
  0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC6, 0x02, 
  0x00, 0x00, 0xC4, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 
  0x7D, 0x03, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x09, 0x00, 
  0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, 
  0x06, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x06, 0x00, 
  0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 
  0xC6, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x00, 0x00, 0xBD, 0x01, 
  0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 
  0xC6, 0x03, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x88, 0x00, 
  0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 
  0x04, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0x08, 0x00, 
  0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x3D, 0x03, 0x00, 0x00, 
  0x89, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0xC6, 0x00, 
  0x00, 0x00, 0xC9, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 
  0xBD, 0x03, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x0C, 0x00, 
  0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 
  0x0B, 0x00, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0xCB, 0x00, 
  0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 
  0x8B, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x3D, 0x03, 
  0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
  0xC6, 0x01, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0xCD, 0x00, 
  0x00, 0x00, 0xBD, 0x01, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 
  0x07, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0x4D, 0x00, 
  0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 
  0x8E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xC6, 0x03, 
  0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 
  0xFD, 0x02, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0x04, 0x00, 
  0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 
  0xD0, 0x00, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x10, 0x00, 
  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 
  0xD0, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0xFD, 0x01, 
  0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 
  0xC6, 0x01, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x92, 0x00, 
  0x00, 0x00, 0xFD, 0x03, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 
  0x04, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0x52, 0x00, 
  0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 
  0x93, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC6, 0x03, 
  0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 
  0x3D, 0x03, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x03, 0x00, 
  0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 
  0x95, 0x00, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xD5, 0x00, 
  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 
  0x95, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0xFD, 0x02, 
  0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 
  0xC6, 0x01, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00, 0xD7, 0x00, 
  0x00, 0x00, 0x7D, 0x02, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 
  0x0D, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0xD7, 0x00, 
  0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, 
  0x98, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xC6, 0x00, 
  0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 
  0xBD, 0x01, 0x00, 0x00, 0xD9, 0x00, 0x00, 0x00, 0x0A, 0x00, 
  0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 
  0xDA, 0x00, 0x00, 0x00, 0x3D, 0x01, 0x00, 0x00, 0xDA, 0x00, 
  0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 
  0x9A, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xBD, 0x02, 
  0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
  0xC6, 0x02, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x5C, 0x00, 
  0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 
  0x02, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xDC, 0x00, 
  0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x7D, 0x01, 0x00, 0x00, 
  0x9D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC6, 0x01, 
  0x00, 0x00, 0x9D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 
  0x3D, 0x02, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0x06, 0x00, 
  0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 
  0xDF, 0x00, 0x00, 0x00, 0x7D, 0x02, 0x00, 0x00, 0xDF, 0x00, 
  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 
  0x5F, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3D, 0x01, 
  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 
  0xC6, 0x02, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x61, 0x00, 
  0x00, 0x00, 0x7D, 0x03, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 
  0x0E, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0xA1, 0x00, 
  0x00, 0x00, 0xE2, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 
  0xE2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC6, 0x01, 
  0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 
  0x7D, 0x01, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x08, 0x00, 
  0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 
  0xE4, 0x00, 0x00, 0x00, 0x3D, 0x01, 0x00, 0x00, 0xA4, 0x00, 
  0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 
  0xE4, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x00, 0xFD, 0x00, 
  0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 
  0xC6, 0x03, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, 0xE6, 0x00, 
  0x00, 0x00, 0xFD, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x00, 
  0x0E, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0x26, 0x00, 
  0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0xFD, 0x03, 0x00, 0x00, 
  0xA7, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xC6, 0x03, 
  0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 
  0xBD, 0x03, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 
  0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 
  0x69, 0x00, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x69, 0x00, 
  0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 
  0x69, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xBD, 0x02, 
  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 
  0xC6, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xC1, 0x00, 
  0x00, 0x00, 0xFD, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 
  0x08, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xC1, 0x00, 
  0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x7D, 0x02, 0x00, 0x00, 
  0x82, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xC6, 0x03, 
  0x00, 0x00, 0xC2, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 
  0x3D, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 
  0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 
  0x04, 0x00, 0x00, 0x00, 0xFD, 0x03, 0x00, 0x00, 0x44, 0x00, 
  0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 
  0xC4, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0xBD, 0x03, 
  0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 
  0xC6, 0x02, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, 0x86, 0x00, 
  0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
  0x05, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0x86, 0x00, 
  0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 
  0x07, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xC6, 0x02, 
  0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 
  0xFD, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x0D, 0x00, 
  0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 
  0x89, 0x00, 0x00, 0x00, 0x7D, 0x02, 0x00, 0x00, 0x49, 0x00, 
  0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 
  0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x3D, 0x01, 
  0x00, 0x00, 0xCA, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 
  0xC6, 0x02, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x0B, 0x00, 
  0x00, 0x00, 0xBD, 0x01, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x00, 
  0x07, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0x4B, 0x00, 
  0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x7D, 0x01, 0x00, 0x00, 
  0xCC, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC6, 0x01, 
  0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00, 
  0xBD, 0x02, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x0A, 0x00, 
  0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 
  0x0E, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x0E, 0x00, 
  0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 
  0x4E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFD, 0x00, 
  0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 
  0xC6, 0x02, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x50, 0x00, 
  0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00, 
  0x0D, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0x10, 0x00, 
  0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x00, 0x00, 
  0x11, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xC6, 0x01, 
  0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 
  0xBD, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 
  0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00, 
  0x93, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0x93, 0x00, 
  0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 
  0x93, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0xBD, 0x03, 
  0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
  0xC6, 0x01, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0xD5, 0x00, 
  0x00, 0x00, 0xBD, 0x01, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 
  0x0D, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0x15, 0x00, 
  0x00, 0x00, 0xD6, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 
  0x96, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xC6, 0x02, 
  0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 
  0xBD, 0x02, 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 0x0D, 0x00, 
  0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 
  0x18, 0x00, 0x00, 0x00, 0x3D, 0x01, 0x00, 0x00, 0x98, 0x00, 
  0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 
  0xD8, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x7D, 0x02, 
  0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 
  0xC6, 0x01, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9A, 0x00, 
  0x00, 0x00, 0x3D, 0x03, 0x00, 0x00, 0xDA, 0x00, 0x00, 0x00, 
  0x0A, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0x5A, 0x00, 
  0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 
  0x5B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xC6, 0x00, 
  0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 
  0x7D, 0x03, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x09, 0x00, 
  0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 
  0x5D, 0x00, 0x00, 0x00, 0x3D, 0x03, 0x00, 0x00, 0xDD, 0x00, 
  0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 
  0x1D, 0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x7D, 0x01, 
  0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 
  0xC6, 0x02, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x5F, 0x00, 
  0x00, 0x00, 0xFD, 0x01, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x00, 
  0x05, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0xDF, 0x00, 
  0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x7D, 0x01, 0x00, 0x00, 
  0xE0, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0xC6, 0x02, 
  0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 
  0xFD, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x00, 0x00, 0x07, 0x00, 
  0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 
  0x62, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 0xA2, 0x00, 
  0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 
  0x62, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0xFD, 0x01, 
  0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
  0xC6, 0x01, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0xE4, 0x00, 
  0x00, 0x00, 0xFD, 0x01, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 
  0x0D, 0x00, 0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0x24, 0x00, 
  0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3D, 0x02, 0x00, 0x00, 
  0x25, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0xC6, 0x03, 
  0x00, 0x00, 0xA5, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 
  0x7D, 0x01, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x05, 0x00, 
  0x00, 0x00, 0xC6, 0x02, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x00, 
  0xA7, 0x00, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xA7, 0x00, 
  0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 
  0x27, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x3D, 0x01, 
  0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
  0xC6, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xE9, 0x00, 
  0x00, 0x00, 0x7D, 0x02, 0x00, 0x00, 0xE9, 0x00, 0x00, 0x00, 
  0x0A, 0x00, 0x00, 0x00, 0xC6, 0x03, 0x00, 0x00, 0xE9, 0x00, 
  0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xE7, 0x03, 0x00, 0x00, 
  0x38, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00
]

from Crypto.Util.number import bytes_to_long

dword_405080 = []
for i in range(len(byte_dword_405080)//4):
    dword_405080.append(bytes_to_long(bytes(byte_dword_405080[i*4:i*4+4][::-1])))

byte_405880 = [0x1F, 0x18, 0x0F, 0xA9, 0xE4, 0x3D, 0x7A, 0x3A, 0x4D, 0x17, 
  0xD1, 0x18, 0x10, 0x68, 0x1C, 0x4D, 0x79, 0x19, 0x03, 0x41, 
  0x4B, 0x60, 0x1C, 0x67, 0x5C, 0x38, 0x23, 0x1F, 0x53, 0x00, 
  0x14, 0x4D, 0x19, 0x7A, 0x7B, 0x5D, 0x71, 0x42, 0x3E, 0x37, 
  0x9C, 0x8E, 
]

加密脚本:#

from ezre_data import dword_405080

flag = list(b"0123456789abcdefghijklmnopqrstuvwxyzABCDEF")

flag_val = 0
"var_59"
flag_tmp = 0
"var_44"
tmp = 0
"var_44+1"
key_index = 0

while True:
    opcode = dword_405080[key_index * 3] # var_50

    if opcode == 0x3E7: break

    flag_tmp = dword_405080[key_index * 3 + 1] # var_44
    tmp = dword_405080[key_index * 3 + 2]
    i = flag_tmp & 0x3F
    var_44_3 = 1

    if (opcode >> 0) & 1:
        flag_tmp = flag[i]

    if (opcode >> 1) & 1:
        flag_tmp = flag[i]
        tmp = flag[tmp & 0x3F]

    while True:
        if (opcode >> 2) & 1:
            flag_val = flag_tmp ^ tmp

        if (opcode >> 3) & 1:
            tmp = flag_tmp & tmp

        if (opcode >> 4) & 1:
            tmp += tmp
            var_44_3 = tmp

        if (opcode >> 5) & 1:
            flag[i] = flag_val
            print(f"flag[{hex(i)[2:]}] = {hex(flag_val)[2:]}")
            flag_tmp = flag_val
            if var_44_3 == 0: 
                break
            else:
                continue

        if (opcode >> 6) & 1:
            flag[i] = flag_val
            print(f"flag[{hex(i)[2:]}] = {hex(flag_val)[2:]}")
            break

    key_index += 1

对应解密脚本:#

from ezre_data import dword_405080, byte_405880

flag = list(b"0123456789abcdefghijklmnopqrstuvwxyzABCDEF")
flag = byte_405880
flag_back = [f for f in flag]

flag_val = 0
"var_59"
flag_tmp = 0
"var_44"
tmp = 0
"var_44+1"

def enc_flag(key_index, flag):
    while True:
        opcode = dword_405080[key_index * 3] # var_50

        if opcode == 0x3E7: break

        flag_tmp = dword_405080[key_index * 3 + 1] # var_44
        tmp = dword_405080[key_index * 3 + 2]
        i = flag_tmp & 0x3F
        var_44_3 = 1

        if (opcode >> 0) & 1:
            flag_tmp = flag[flag_tmp & 0x3F]

        if (opcode >> 1) & 1:
            flag_tmp = flag[flag_tmp & 0x3F]
            tmp = flag[tmp & 0x3F]

        while True:
            if (opcode >> 2) & 1:
                flag_val = flag_tmp ^ tmp

            if (opcode >> 3) & 1:
                tmp = flag_tmp & tmp

            if (opcode >> 4) & 1:
                tmp += tmp
                var_44_3 = tmp

            if (opcode >> 5) & 1:
                flag[i] = flag_val
                flag_tmp = flag_val
                if var_44_3 == 0: 
                    break
                else:
                    continue

            if (opcode >> 6) & 1:
                flag[i] = flag_val
                break

        key_index += 1

    return flag

key_index = 168 - 1
while True:
    if key_index < 0: break

    found = []
    flag_tmp = dword_405080[key_index * 3 + 1] # var_44
    index = flag_tmp & 0x3F

    for j in range(256):
        new_flag = [(flag[i] if i != index else j) for i in range(len(flag))]
        try:
            enc_f = enc_flag(key_index=key_index, flag=new_flag)
        except Exception as e:
            continue

        if enc_f == flag_back:
            found += [j]

    if len(found) == 0:
        key_index -= 1
        continue

    flag[index] = found[0]
    print(f"flag[{hex(index)[2:]}]", end=" = ")
    print([chr(i) for i in found])
    key_index -= 1

print("".join(chr(f) for f in flag))