一、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模式编译

②自定义程序入口

③合并区段

④自定义最小节的大小

●编译器选项在代码免杀中的应用:

①区段合并让代码发生非常大的改变

②代码单独存放在一个区段里

③通过其他改变从而使代码发生变化

最新文章

  1. 项目游戏开发日记 No.0x000001
  2. 性能测试工具 wrk 安装与使用
  3. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
  4. FineUI官方论坛出现空白页的解决办法!
  5. linux下的触控板手势xSwipe and tag
  6. 输入一个数组,求最小的K个数
  7. JavaScript数据类型--值类型和引用类型
  8. linux下的基本网络配置
  9. 【BZOJ】【3398】【USACO 2009 Feb】Bullcow 牡牛和牝牛
  10. Codeforces Round #353 (Div. 2) C. Money Transfers (思维题)
  11. Mac安装wget的两种方法
  12. Python学习--17 进程和线程
  13. C# 汉语转拼音
  14. javascript右键菜单分析
  15. 201621123040《Java程序设计》第十一周学习总结
  16. linux下 mysql数据库的备份和还原sql
  17. for循环的实例
  18. 汇编 switch case
  19. 编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器)
  20. Generate PDF in Sourcing through concurrent request,在EBS java并发中调用指定am的方法

热门文章

  1. 松软科技课堂:SQL--RIGHTJOIN关键字
  2. 01:***VideoToolbox硬编码H.264
  3. Java位运算符&、|、^、>>、<<、~、>>>
  4. java httpclient跳过https证书验证
  5. [Advanced Python] 16 - Google style guide for programming
  6. 使用$.getJSON()需要注意的地方
  7. CocosCreator实现动物同化
  8. Java 世界的盘古和女娲 —— Zygote
  9. Debezium SQL Server Source Connector+Kafka+Spark+MySQL 实时数据处理
  10. springboot 集成Redis单机