相同的跳转指令 :
void 相同的跳转指令()
{
printf("定位");
_asm
{
jz _P2
jnz _P2
_P1:
__emit 0xE8
}
_P2:
return;
}
固定条件的跳转指令:
void 固定条件的跳转指令() { printf("定位"); _asm { xor eax,eax jz _P2 __emit 0xE9 } _P2: return; }
无效的反汇编码:内部跳转的jmp指令
void 无效的反汇编码1() { //内部跳转的jmp指令 printf("定位"); _asm { __emit 0xEB __emit 0xFF __emit 0xC0 __emit 0x48 } return; }
无效的反汇编码:多层内部调转序列
void 无效的反汇编码2() { //多层内部调转序列 printf("定位"); _asm { __emit 0x66 __emit 0xB8 jmp _P1 __emit 0x31 __emit 0xC0 __emit 0x74 __emit 0xFA __emit 0xE8 } _P1: printf("真实代码!"); return; }
滥用返回指针: 在反汇编部分我们看不出函数有调用_P2就retn了,成功欺骗了F5。
void 滥用返回指针() { printf("定位"); _asm { call _P1 _P1: add [esp],5 retn } _P2: printf("模糊函数边界!"); //这里会被执行 return; }
滥用结构化异常处理:成功欺骗了
F5
void 滥用结构化异常处理() { printf("定位"); _asm { mov eax, _PE1 push eax push fs : [0] mov fs : [0], esp xor ecx, ecx div ecx retn _PE1: mov esp,[esp+8] mov eax, fs : [0] mov eax, [eax] mov eax, [eax] mov fs : [0], eax add esp, 8 } printf("结构化异常"); return; }
挫败的栈帧分析: F5后发现怎么有那么多参数。
void 挫败的栈帧分析() { printf("定位"); _asm { xor eax, eax add eax ,2 ret 0xff } printf("挫败的栈帧分析"); return; }
[培训]《安卓高级研修班(网课)》6月班开始招生!一年后遇见不一样的自己!(现在进入看雪课程可以试看两节)
最后于 1天前 被Dascolee编辑 ,原因: