vc++源码免杀特殊技巧
2023-09-14 08:56:56 时间
一、Debug 和 Release 编译方式的区别:
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug 和 Release编译方式在木马制作方面的应用是:调试完成以后,使用Release模式编译,这样生成的木马体积可以减小很多
二、编译器选项:
#pragma主要包含一些预处理命令,比如共享内存,修改内存属性等等
//自定义对齐方式 #pragma comment(linker, "/FILEALIGN:16") #pragma comment(linker, "/ALIGN:16")//定义最小节的大小,数值越小程序体积越小 //http://msdn.microsoft.com/zh-cn/wf5kss02.aspx
通过这个编译器选项能够去掉代码中由于对齐而产生的多余代码
这两个必须同时使用,否则编译出来的程序不能运行
使用了这个编译器选项之后一般不能再对文件加壳
#pragma comment(linker, "/OPT:REF") #pragma comment(linker, "/OPT:ICF") #pragma comment(linker, "/OPT:NOWIN98") // 使用老VC编绎器的512大小为一节
//自定义加载的库 #pragma comment(lib,"kernel32.lib")//表示链接kernel32_32.lib这个库 #pragma comment(lib,"shell32.lib") #pragma comment(lib,"msvcrt.lib") //使用VC6.0动态链接库
//自定义函数入口 #pragma comment(linker, "/ENTRY:EntryPoint") //更改默认的入口函数,之后就要用ExitProcess(0);才能正常退出; //设置子系统类型 #pragma comment(linker,"/subsystem:windows") //这样双击运行程序的时候就不会出现cmd窗口了 http://blog.csdn.net/lostangels/archive/2008/01/06/2027642.aspx // 优化选项 #pragma comment(linker, "/opt:nowin98") //http://support.microsoft.com/kb/235956/zh-cn #pragma comment(linker, "/opt:ref") #pragma comment (linker, "/OPT:ICF") // 合并区段 #pragma comment(linker, "/MERGE:.rdata=.data")//把rdata区段合并到data区段里 #pragma comment(linker, "/MERGE:.text=.data")//把text区段合并到data区段里 #pragma comment(linker, "/MERGE:.reloc=.data")//把reloc区段合并到data区段里 //设置区段属性 #pragma comment(linker, "/section:.data,RWE") 在LodePe里看到的就是E0000040,其中RWE是可读、可写、可执行的意思 R:readable W:Writable E:executable #pragma optimize("gsy", on) http://msdn.microsoft.com/zh-cn/library/chh3fb0k(en-us).aspx #pragma code_seg("PAGE") //其中PAGE是区段的名称 //这个是免杀中最有用的一个编译器选项,它可以把cpp文件里的代码放到一个单独的区段里,这样在对付杀毒软件的代码查杀的时候,给我们带来了非常大的方便 #pragma comment(linker,"/entry:mainCRTStartup") //设置入口函数为main
三、过nod32启发的代码:
这个代码主要用于对付nod32的启发查杀,对普通特征码查杀无效
总结:
●让木马体积变小的方法有以下几点:
①用Release模式编译
②自定义程序入口
③合并区段
④自定义最小节的大小
●编译器选项在代码免杀中的应用:
①区段合并让代码发生非常大的改变
②代码单独存放在一个区段里
③通过其他改变从而使代码发生变化
相关文章
- c++酒店管理系统课程设计_基于java的酒店管理系统源码
- c++语言截取字符串,详解C++ string常用截取字符串方法
- C++ 初识函数模板
- C++运算符重载(五)之关系运算符重载
- 深入理解C++11_c++ string char
- C++ 实现线程安全的map(OpenHarmony源码实现版)
- C++重载一元前缀/后缀运算符
- C++字符串加密_c++字符串连接函数
- 《安富莱嵌入式周报》第293期:SEGGER开源其C/C++库源码emRun,丰富EMC电磁兼容资,OTA开源组件,2022 Github全球报告,内存安全指南
- c++的链表-C++链表
- c++的链表-链表入门(C++)
- C/C++ 调用API获取当前时间
- C/C++ 提权与强制卸载DLL
- C/C++ 感染标志与空字节感染
- 十种主流模型C++部署演示
- 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )
- c++ 字母降落小游戏
- C++ deque获取(访问)元素方法详解
- C++ deque添加和删除元素方法详解
- C++链表及其创建
- 在什么情况下,Java比C++慢很多?
- C++多继承同名隐藏实例详细介绍
- 深入分析:C++模板究竟会使代码膨胀吗
- 基于C++cin、cin.get()、cin.getline()、getline()、gets()函数的使用详解
- C++Explicit关键字详细解析
- c++读写文件流实例程序讲解
- C++中函数的用法小结
- VC++的combobox控件用法汇总