vc++源码免杀特殊技巧
一、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模式编译
②自定义程序入口
③合并区段
④自定义最小节的大小
●编译器选项在代码免杀中的应用:
①区段合并让代码发生非常大的改变
②代码单独存放在一个区段里
③通过其他改变从而使代码发生变化
posted @
2019-05-05 17:40 卿先生 阅读(
...) 评论(
...) 编辑 收藏