先引用下玩命老大的话:
0.什么是乱序
乱序就是打乱原来的流程。
很多朋友逆向程序时,会把一个程序直接丢到IDA里会出现一副流程图。我们现在要做的就是把这副
流程图打乱。但是并不影响原先流程的逻辑。乱序的原理其实比较简单。说白了就是做HOOK然后填充
花指令。最后在跳转会原先的地址。看下我们的代码,
代码:
#include<stdio.h> typedef void(*My_Main)(void); typedef void(*My_Main1)(void); My_Main MyMain; My_Main1 MyMain1; int Addr; void Func1(void) { printf("Func1\n"); _asm jmp Addr //跳回源地址 } void Func(void) { printf("Func\n"); MyMain1=&Func1; _asm jmp MyMain1 //跳到上面的函数 } int main(void) { _asm mov esi,ebp //保存ESP,以便返回到编译器的预处理代码 MyMain=&Func; //这两条汇编代码保存最后个函数返回的地址 _asm mov eax,a _asm mov Addr,eax printf("Main:0x%x\n",MyMain); _asm jmp MyMain; a: _asm mov ebp,esi //恢复ESP return 0; }
![](131888/944367/55891.jpg)