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

②自定义程序入口

③合并区段

④自定义最小节的大小

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

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

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

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

vc++源码免杀特殊技巧的更多相关文章

  1. [源码]Delphi源码免杀之函数动态调用 实现免杀的下载者

    [免杀]Delphi源码免杀之函数动态调用 实现免杀的下载者 2013-12-30 23:44:21         来源:K8拉登哥哥's Blog   自己编译这份代码看看 过N多杀软  没什么技 ...

  2. [原创]K8_Delphi源码免杀系列教程

    [原创]K8_Delphi源码免杀系列教程[2014] 虽是2014年的,但免杀思路方法并未过时 比如函数动态调用\代码注释法等至今依然有效 链接:https://pan.baidu.com/s/1H ...

  3. 【黑客免杀攻防】读书笔记15 - 源码免杀、C++壳的编写

    1.源码免杀 1.1 定位产生特征的源码 定位文件特征 1.根据MyCCL的特征码定位工具,定位出有特征的地址 2.根据VS的反汇编窗口,输入有特征的地址得到特征地址与源码的关系 3.插入Messag ...

  4. vc++木马源码免杀一些常用方法

    1.字符串连接 ////////////////////////////////////////////////////////////把字符串"canxin"连接起来(字符串连接 ...

  5. 挖掘隐藏在源码中的Vue技巧!

    前言 最近关于Vue的技巧文章大热,我自己也写过一篇(vue开发中的"骚操作"),但这篇文章的技巧是能在Vue的文档中找到蛛丝马迹的,而有些文章说的技巧在Vue文档中根本找不到踪迹 ...

  6. 【深入浅出jQuery】源码浅析2--使用技巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  7. 最新工控\建模仿真\组态\监控集成开发平台源码解决方案2019 ---所有VC++源码100%提供!

    使用E-Form++可视化企业版本,构建属于自己的专业工控.建模仿真. 监控组态.培训仿真平台! -- 100%源码 (全部采用VC++/MFC编写,支持.NET, Java, Web, Delphi ...

  8. ubuntu16.04系统彻底卸载mysql,并源码免编译重装MySQL的步骤

    今天的总结 ubuntu上彻底卸载MySQL或重新安装 https://www.jianshu.com/p/974b33873bca #查看是否存在mysql服务 service mysql stat ...

  9. 浅谈C++源码的过国内杀软的免杀

    以下只是简单的思路和定位.也许有人秒过,但是不要笑话我写的笨方法.定位永远是过期不了的. 其实这里废话一下 , 本人并不是大牛 ,今天跟大家分享下 .所以写出这篇文章.(大牛飘过) 只是个人实战的经验 ...

随机推荐

  1. js操作cookie(创建、读取、删除)方法总结

    js操作cookie,可以通过开源的插件实现,方便快捷,兼容性好,同样也可以自己写: 此文主要介绍两个常用的插件: Js.cookie.js 和 jQuery.cookie.js 0.Js.cooki ...

  2. 【第九篇】uploadify上传文件

    依然不多说,上代码 首先是给文件夹的位置 然后上代码 <div class="upload"> <div class="uploadswf"& ...

  3. laravel模板布局

    在实际的开发中,我们会遇到许多重复页面的部分,这些页面的重复会让我们的代码看起来非常冗余 所以我们要进行页面的布局规划.思路:将页面中的公有部分取出来作为单独的页面,其他继承公共模板 在公共模板的基础 ...

  4. [C++] 重载运算符与类型转换(1)

      1.形式:返回值 operator符号(参数列表){}   2.不能被重载的运算符::: 作用域运算符  .*   . 成员访问运算符   ?: 条件运算符:某些运算符(逗号,,取地址&, ...

  5. 为什么需要OLAP DSL?

    OLAP(On-Line Analytical Processing,联机分析处理)是大数据场景中,数据价值探索与挖掘的重要环节.这个领域内,开源社区呈现百花齐放的现象,Elasticsearch.D ...

  6. Django模板语言, 过滤器整理

    Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...

  7. 导出wordpress数据库Fatal error: Cannot 'break' 2 levels

    今天我打算备份一下我在Linux下用宝塔面板搭建的phpmyadmin导出wordpress数据库.选择数据库后给我一个Fatal error: Cannot 'break' 2 levels in ...

  8. js禁止刷新的简单方法

    //禁止用F5键  这个是键盘按下时触发document.onkeydown = function() { if ( event.keyCode==116) {event.keyCode = 0; e ...

  9. Spring MVC-从零开始-@RequestMapping结合@RequestParam (从HTTP键值对中取值,作用于函数参数)

    1.@RequestParam 注解使用的时候可以有一个值,也可以没有值:如果请求参数和处理方法参数的名称一样的话,@RequestParam 注解的 value 这个参数就可省掉了:@Request ...

  10. Ceph 的 'MAX AVAIL' 和 数据平衡 - Storage 6

    1. 客户环境 节点数量:4个存储节点 OSD数量:每个节点10块8GB磁盘,总共 40 块OSD Ceph 版本: Storage 6 使用类型:  CephFS 文件 CephFS数据池:  EC ...