今天看啥  ›  专栏  ›  看雪学苑

VM逆向,一篇就够了

看雪学苑  · 公众号  · 互联网安全  · 2024-04-24 18:03
vm题算是逆向中比较难的一种题型了,在这里详细的记录一下。一原理程序运行时通过解释操作码(opcode)选择对应的函数(handle)执行。vm_init进行初始化工作。在这个函数里,规定了有几个寄存器,以及有几种不同的操作:这样看不明显,创建结构体修复一下,结构体长这个样子:typedef struct{ unsigned long R0; //寄存器 unsigned long R1; unsigned long R2; unsigned long R4; unsigned char *rip; //指向正在解释的opcode地址 vm_opcode op_list[OPCODE_N]; //opcode列表,存放了所有的opcode及其对应的处理函数}vm_cpu;typedef struct{ unsigned long opcode; void (*handle)(void*);}vm_opcode;修复完的初始化函数:vm_startvoid vm_start(vm_cpu *cpu){ cpu->eip = (unsigned char*)opcodes; //这里不是在上面就初始化过了吗??? while((*cpu->eip) != 0xf4)//如果opcode不为RET,就调用vm_dispatcher来解释 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照