0x01 简述
免杀总体来说可分为两种,静态免杀/动态免杀。往往来说,我们更注重于在内部代码层面实现一些免杀技巧,但在有些时候,动态免杀+静态免杀以"打组合拳"的方式效果往往会更出人所料。
当我们的程序生成后,杀毒软件会对整个文件做一个扫描(反编译、行为监控等)当匹配到其病毒特征库时,则会kill掉我们的程序,静态免杀则是让杀软“摸不着头脑”,匹配不到其的特征库。以下将会介绍几种方法来实现静态免杀。
一.花指令
花指令(junk code)是一种专门用来迷惑反编译器的指令片段,这些指令片段不会影响程序的原有功能,但会使得反汇编器的结果出现偏差,从而使破解者分析失败。比较经典的花指令技巧有利用 jmp
、call
、ret
指令改变执行流,从而使得反汇编器解析出与运行时不相符的错误代码。
直接上代码,在vs中使用内敛汇编的方式将花指令插入其中:
__asm{PUSH EAXXOR EAX, EAXJZ True1__asm __emit(0xca)__asm __emit(0x55)__asm __emit(0x78)__asm __emit(0x2c)__asm __emit(0x02)__asm __emit(0x9b)__asm __emit(0x6e)__asm __emit(0xe9)__asm __emit(0x3d)__asm __emit(0x6f)True1:POP EAX}__asm{PUSH EAXXOR EAX, EAXJZ True2__asm __emit(0xd5)__asm __emit(0xb6)__asm __emit(0x43)__asm __emit(0x87)__asm __emit(0xde)__asm __emit(0x37)__asm __emit(0x24)__asm __emit(0xb0)__asm __emit(0x3d)__asm __emit(0xee)True2:POP EAX}
在这段代码中,首先使用PUSH EAX和POP EAX指令保存和恢复EAX寄存器的值。XOR EAX, EAX指令将EAX寄存器的值设置为0,然后使用JZ True1指令跳转到True1标签。在这两个指令之间,可以看到一系列__asm __emit指令,它们将一些随机字节插入到代码中。这些字节对程序的功能没有影响,但会影响反编译之后的分析过程。
二.数字签名
当我们为一个exe添加官方的数字签名后,也会规避一些杀软的检测。
工具:sigthief.py(可私信获取),以企鹅为例子
python .\sigthief.py -i 企鹅.exe -t target.exe -o demo.exe
输出后的demo.exe会带上企鹅的签名:
三.资源混淆
听名字就可以很好的理解,将一个安全的程序于我们远控程序进行资源整合并输出资源混合后的文件,这样也能规避杀软的检测。
工具:Restorator
将我们编译出来的exe与正常文件进行合并资源,将正常文件的特征合并到远控exe中。以某录屏软件进行演示
这里可以看到我们的Project12.exe带上了正常软件的图标、版本、Manifest
四.加壳
加壳,意思是加个保护壳,具体含义是利用特殊的算法,对可执行文件里的资源进行压缩,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。它们附加在原程序上通过加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。
这里直接采用VM来进行加壳:
将我们编译后的exe直接拖入该软件,以最基础的保护作为演示,左上角进行编译后,则会输出加壳后的exe
拖入ida后会弹出如下警告:
代表成功加壳。
以上四种就是常见的静态免杀,当然还有其他的方式例如分离shellcode、白加黑等等。
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
2️⃣视频配套资料&国内外网安书籍、文档
① 文档和书籍资料
② 黑客技术
因篇幅有限,仅展示部分资料
4️⃣网络安全面试题
5️⃣汇总
所有资料 ⚡️ ,朋友们如果有需要全套 《网络安全入门+进阶学习资源包》,扫码获取~