欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]写花指令

[原创]写花指令

花指令,就是一串用来迷惑反编译器的汇编指令,它是利用编译器线性扫描算法的缺陷来达到的,比如说反编译器读取到E8(对应CALL汇编码)这机器码,接着会往下读取四个字节的数据作为跳转地址,如果我们在写程序的时候嵌入_asm _emit 0E8,反编译器就会把下一条指令当做地址数据,不管下一条指令的四个字节是地址数据还是操作指令。
在EXE中加入花指令,只要记住程序原入口点,在程序中找个地方写一段保持堆栈平衡的花指令,然后跳转回原入口点,再用PE工具改写下入口点,使花指令开头段为程序入口点。
在源码中加入花指令,可以加个头文件,用定义的方式#define来写,在cpp中包含进来直接使用,下面是一些代码。
//添加花指令开关  注释掉 就可以无花指令调试程序
#define _start_add_FLOWER
#ifndef _start_add_FLOWER
#define _FLOWER_XX0 _asm nop      
#else
#define _FLOWER_XX0 _asm \
{\
_asm jle $+0dh \               //  如果小于或等于 就跳转到当前地址加13的地址
_asm jg $+07h \               //如果大于  就跳转到当前地址加7的地址
_asm _emit 0E8h \                //花指令 程序执行前面两条指令会直接跳转过去,不会执行这条语句,只是迷惑反编译器
#endif
#ifndef _start_add_FLOWER
#define _FLOWER_XX1 _asm nop
#else
#define _FLOWER_XX1 _asm \
{\
   _asm  _emit 090h\        
   _asm _emit 090h \
   _asm _emit 090h \
   _asm pushad\                   //保持堆栈平衡
   _asm jmp $+36h\                //直接跳到popad处 这条指令开始往下数一共有36个字节
   _asm mov ebp,esp \
   _asm push -1 \
   _asm push 112233h \
   _asm push 332211h \
   _asm mov eax,DWORD ptr fs:[0] \
   _asm push eax \
   _asm mov DWORD ptr fs:[0],esp \
   _asm pop eax \
   _asm mov dword ptr fs:[0],eax \
   _asm pop eax \
   _asm pop eax \
   _asm pop eax \
   _asm pop eax \
   _asm mov ebp,eax\
   _asm mov eax,401050h\
   _asm push eax\
    _asm _emit 0xE8\
   _asm retn\
   _asm popad\        // 保持堆栈平衡
}
#endif
……
可以定义从_FLOWER_XX0到_FLOWER_XX9等多个花指令
然后在CPP中使用
void test()
{
_FLOWER_XX0;
printf("you are writing flower_xx0,\n");
_FLOWER_XX1;
printf("you are writing flower_xx1,\n");
……
}
也可以定义花指令组,
#ifndef _start_add_FLOWER
#define _FLOWER_XX_GROUP0
#else
#define _FLOWER_XX_GROUP0 _FLOWER_XX0;_FLOWER_XX1;_FLOWER_XX2
#endif
第一次写,写的不好请见谅。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功