【CISCN2021华南】ezre1

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

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

划线的部分可以右键 - Create new struct type
创建结构体,便于分析
struct struct_qword_4060E0
{
_QWORD q0;
_QWORD q1;
__int64 (__fastcall *pfunc2)(char *);
_QWORD q3;
};
ptrace 的使用 ptrace函数深入分析 - 黑箱 - 博客园 (cnblogs.com)
这里意思是主进程 wait()
等待子进程信号
子进程:

每运行一个程序块,都会 int 3
中断产生一个调试信号
动调的时候也会一直收到子进程的信号


这里点 change exception definition

勾上 Pass to application
,然后 OK - Yes(pass to app)
建议取消掉 Suspend program
,不然每执行一个程序块都会跳一个提示
莫名奇妙程序关了#

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

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
作为名称,会冲突,要改下名称
静态/动态分析#

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

相当于让子线程 jmp qword_4060E0
冗长枯燥的体力活,对被平坦化的控制流进行分析,这里要还原出子程序执行流程,才能进一步分析,使用Frida hook每一处 jmp
和 call
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))