浅谈C++源码的过国内杀软的免杀
以下只是简单的思路和定位。也许有人秒过,但是不要笑话我写的笨方法。定位永远是过期不了的。
其实这里废话一下 , 本人并不是大牛 ,今天跟大家分享下 。所以写出这篇文章。(大牛飘过)
只是个人实战的经验而已 ,没有任何技术含量。ok 我们开始
我们只谈vc++源码免杀 ,过掉 国内的杀毒软件 。 达到不损坏功能 正常上线 从而无视杀软的存在
首先说中国国内杀毒软件的特征 。
1 金山毒霸 ,我个人觉得杀的代码部分和字符串还是比较普遍的 。输入表函数 我个人不多见 。
2 瑞星 ,经实战经验 ,瑞星杀毒软件是垃圾。 过掉金山 也就过瑞星了 除非杀敏感的字符串 。
3 江民 ,纯属基本就是杀字符串 。。 大家可以进行 隐藏代码 就可以。。你懂得
4 也就是大家最头疼的 360杀毒 。这个就是重点。因为过掉360 -5引擎 基本国内就差不多了。
简单介绍下 ,360云查杀+BD常规+qvm+国外引擎小红伞+主动防御 。
详谈360各大引擎套路 你懂得...
(1)360云查杀 ,其实就是qvm和红伞的 集成版 。 也就是云qvm 实时鉴定 、 也是大家最头痛的。
(2)BD引擎 我个人怀疑 也有点智能 。有时候大家会认为定位不到或者定位错误 。也就是本地杀代码 函数 等等都有可能吧,我个人过BD 不太感冒 所以没有深入研究。
(3)qvm ,所谓qvm引擎 其实就是 高启发+行为判断+特征 ..这个毫无疑问 智能引擎 。
(4)红伞 ,也就是跟qvm差别不大 。也属于智能 。大部分在杀行为。
(5)主动防御引擎,其实不存在 。也就是卫士 提示主动防御。(也就是说过掉表面 不过提示那是白费)
详谈360 各引擎的 定位套路 方法 以及思路。
前提,注释掉 区段合并 + 延迟加载+ 优化 。删除版权信息 以及图标 (这里也是在排除可能性)以及查看模式R 模式, 不要用debug模式 ,那是调试模式 。(必然 必须的)
其实过掉360 引擎 。也许还有很多方法,我只说说我的定位套路。
第一步 断网 ,关闭所有引擎 ,开启云杀 ,也就是定位云杀的本地 。 很垃圾很好过。
第二步,继续过BD ,定位 方法 一样, 正向 跳过1000 头 。(源码免杀不可能杀头 所以跳过1000头)定位 根据定位情况解决 ..
第三补步,关闭所有杀软,定位qvm 。方便做定位正确 ,那么我们要加上 反调试代码 (我个人是必须的)以及其他手段 ,因为qvm 是智能的 。大家都知道 qvm杀的百分百是输入表函数 。所以 大家就要逐一 填充定位。(你懂得)填充到哪里 哪里不杀 那么好吧 就是那个dll里 。 所以 反向定位那个段。基本不会有什么问题 ,然后逐一的填充 逐一定位 。这里给大家举例,kernel32.dll +user32.dll 这个2个dll填充。那么就在这里 ,(一般填充跳过 GetProcAddress和LoadLibrary 因为杀那2个函数 说明是假的,定位错误。所以没必要。) 这样定位来 ,如果还是定位不到,那么就是杀的行为判断,需要反调试代码。或者大家可以进行预处理来测试 。比如说 转换大小和最快模式 ,加 减 去版权和图标,都会影响到整个特征的排序。如果那样进行转换 排除 填充所有常见dll还是被杀 ,那么就可以选择放弃 。或者找更有效的反调试方法。
第四 , 小红伞引擎 。也是大家头疼的问题。 我个人的实战经验 过掉小红伞 基本上要加版权的。不知道怎么搞的。我也郁闷 也没深究。没有版权 怎么着 都会杀。我个人认为 。。然后定位方法 基本跟qvm差不多 也是智能 。 一般总会定位错误函数,没关系 继续定位 , 过掉智能 要就是耐心 。
第五, 也是大家最头疼的问题 ,云查杀 ..我个人表示鸭梨很大。上面我也介绍了 这里再简单说一下云查杀思路 。也就是云的实时鉴定 ,通过什么呢?那么就是qvm和红伞的引擎库了。 估计还有其他行为 ,有待研究。(据了解 360开发者 是一群黑客.你懂得是什么意思)言归正传 ..云查杀 需要联网定位的。 但是想过掉云查杀 必须要过掉前面几个引擎 。最后过云杀 。云杀也是一样 杀的是输入表函数 ,我以前认为云杀 是人工一秒云鉴定 。后来发现貌似不是,是个云qvm.很繁琐很繁琐的 。 提起云杀我就恶心 。但我不得不说 实在是太强悍 太强悍了。 加上qvm和红伞。简直就是让免杀者感觉很蛋疼的一件不蛋疼的事。定位方法 需要正向定位 ,也是逐一去圈。去排除 。傅哥说,动态调用10个函数以上 ,假如可以过掉,那么你下次再拿这套源码定位的时候 很难很难, 可以说基本没什么办法过掉 ,也就是说定位不到输入表函数 。就算定位到 也是些不能调用的地方 函数、。 相信大家都有一套自己的方法,这里我就不废话了。还有一点好多情况 会杀资源 具体方法很多 。大家去JKC 残壳等等 论坛找找相关教程 很好解决 。比如过掉dll但是杀dat的dll资源,那么填充MZ头,在exe的源码里加代码 运行释放dll 加上MZ 。呵呵 这个你也懂得
说实话, 我暂时只能想到这些 。 具体 要靠自己 要靠实战经验 更要有耐心 。有时候我也会为一个问题 郁闷一个星期 。。所以不要轻易放弃 。
总结以上
360 , 强 强的很 。 但是过掉他 方法很多 具体我不说qvm和红伞 , 就说云引擎。比如说upx压缩 可以过掉,现在不知道封了没 。 其实玩黑 ,就是举一反三 活学活用 不管是什么 。不管是免杀 还是渗透 。要对自己有信心 。 一天不行 两天 两天不行三天, 当初我因为免杀实战 ,差点走火入魔了。呵呵 ,总结我不说思路,只说自己要有耐心 , 就像是赚钱养老婆是一回事 。放弃了什么都不要说 ,成功了一过掉杀软,那么 满足感是有的 说明什么 你懂得 呵呵 。。。跟大家扯淡一会 。。
好继续说。
反调试代码我就不发给大家了 网上也有, 或者去下载多点源码 好多源码都处理过, 所以要学会借鉴 ,别人的代码和花指令 。发下 常用的动态调用以及 字符串隐藏 等,
1.字符串连接
//////////////////////////////////////////////////////////
//把字符串"canxin"连接起来(字符串连接法)
char *str1="can", *str2="xin",*str3=NULL;
str3=new char[strlen(str1)+strlen(str2)+1];
strcpy(str3,str1);//把str1所指由NULL结束的字符串复制到str3所指的数组中
strcat(str3,str2);//把str2所指字符串添加到str3结尾处(覆盖dest结尾处的'\0')并添加'\0'
//这样就实现了str3=str1+str2,把str1和str2连接起来了
//////////////////////////////////////////////////////////
2.字符串隐藏
char XXX[] = {'c','a','n','x','i','n','\0'};
3.动态调用
***************定义*******************
HANDLE
WINAPI
CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
***************列子*******************
typedef HANDLE (WINAPI *CreateToolhelp32SnapshotT)
(
DWORD dwFlags,
DWORD th32ProcessID
);
CreateToolhelp32SnapshotT pCreateToolhelp32Snapshot= (CreateToolhelp32SnapshotT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"CreateToolhelp32Snapshot");
4.异常try catch
//////////////////////////列子//////////////////////////
UnhookWindowsHookEx(m_pTShared->hGetMsgHook);
//////////////////////////列子//////////////////////////
-------------------------生成后-------------------------
char canxin=1;
try
{
if(canxin=1)throw 31;
}
catch (...)
{
UnhookWindowsHookEx(m_pTShared->hGetMsgHook);
}
-------------------------生成后-------------------------
下面谈一下常见的问题 ,比如说BD 云本地,等等常见定位 错误 以及常见解决方法。比如说常见定位BD ,一次生成 ,查杀, 生成20块,查杀20块,大家有可能误解 定位错误 死循环。 其实非也,可以继续定位继续二次 。知道定位2大小,不杀为止,找到特征地址在OD里的位置,进行上下探查,有没有调用或者字符串的形式 ,然后再继续 搜索关键 在源码里的位置。进行分析特征 ,找到那句源代码 在上面进行加花 等处理 。还有一种可能性,无法定位到 真正的特征位置。 可以通过调试 。比如说 我个人常用的一句代码加在main函数头下,加 “ HKEY ck;
char strreg[] = {'S','O','F','T','W','A','R','E','\\','O','D','B','C','\0'};
if(ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)strreg,0,KEY_ALL_ACCESS,&ck))
{
return 0;
} ”
这样直接可以直接过掉, 有时候也要看情况 进行处理, 首先就是要做好预处理 我个人一般 去掉所有优化 延迟 以及区段的处理代码 。 云本地 ,其实就是断网 定位的云的本地特征 一般不会杀 。但是强烈建议 过360 要逐一过, 不能 红伞和qvm一起过, 也不能云本地和BD 一起正向定位, 那样 不行,我还是怀疑BD也有干扰效果 。所以,除云查杀意外, 其他都更新最新库 进行断网 。全部过掉,再联网过云。
接下来再说一下常见过云查杀技巧 ,常见一般dll和dat已经过掉, 但是生成木马 却被干掉,这是因为行为 或者是dll和dat的行为, 或者杀到了 dll在exe里的资源 ,也就是说资源也是重点 大家进行排除,还有一个就是加个正规文件资源进去 ,这样也有效果 ,如果生成还杀 那么填充资源头 进行处理等等。然后配置信息里 服务名称等 随便输入 不要输入敏感字符 ,比如说360. 或者什么模块什么的。都是敏感的 。
现在简单谈一下 过提示这一方面 ,其实现在的360 已经基本把全部精力 放在了云和qvm这里 。 而安全卫士过掉的难度 也大大降低。所以过提示基本没什么难度 ,再一个就是卫士的本地引擎,以及云引擎。这个我觉得没必要多说, 就是一秒云鉴定, 没什么鸡肋的方法 。只有定位卫士 。往往有时候qvm那云和杀软的云 杀到的特征不太一样, 可能库也不一吧 。这个大家进行测试 ,进行排除 应该不难 。现在就是2个问题,一个云查杀 , 再一个就是 重启上线问题, 以及防上传 ,这些都是必须的。思路就不说了,大家可以去论坛探讨 或者多看看教程 。
给大家点代码 ,反调试
HKEY ck;
char strreg[] = {'S','O','F','T','W','A','R','E','\\','O','D','B','C','\0'};
if(ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)strreg,0,KEY_ALL_ACCESS,&ck))
{
return 0;
}
bool IsVirtualPC()//反nod32查杀
{
__try
{
__asm
{
mov eax, 1
_emit 0x0F
_emit 0x3F
_emit 0x07
_emit 0x0B
_emit 0xC7
_emit 0x45
_emit 0xFC
_emit 0xFF
_emit 0xFF
_emit 0xFF
_emit 0xFF
}
}
__except(1)
{
return FALSE;
}
return TRUE;
}
if(IsVirtualPC())
{
return 0;
}
_asm push esi;
_asm mov esi,46;
_asm inc esi;
_asm mov eax,dword ptr fs:[esi+1];
_asm mov eax,dword ptr ds:[eax+24];
_asm mov eax,dword ptr ds:[eax+12];
_asm cmp eax,2;
_asm pop esi;
_asm je Begin;
_asm lock dec ebx;
Begin:
HKEY dd;
char sof1[]={'S','O','F','T','W','A','R','E','\\','C','l','a','s','s','e','s','\\','.','3','8','6','\\','\0'};
if (ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,sof1,0,KEY_ALL_ACCESS,&dd))
{
__asm nop;
__asm nop;
return -1;
}
浅谈C++源码的过国内杀软的免杀的更多相关文章
- 浅谈flask源码之请求过程
更新时间:2018年07月26日 09:51:36 作者:Dear. 我要评论 这篇文章主要介绍了浅谈flask源码之请求过程,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...
- 车大棒浅谈jQuery源码(二)
前言 本来只是一个自己学习jQuery笔记的简单分享,没想到获得这么多人赏识.我自己也是傻呵呵的一脸迷茫,感觉到受宠若惊. 不过还是有人向批判我的文章说,这是基本知识点,完全跟jQuery源码沾不上边 ...
- 车大棒浅谈jQuery源码(一)
背景 因为最近辞职找工作,投了许多家公司.结果简历要么石沉大海,一点音讯都没有,要么就是邮件回复说不匹配.后面加了一些QQ群,才发现原来我工作经验年限太少了.现在深圳都是3经验起步,北京据说更加恐怖. ...
- 一个QQ木马的逆向分析浅谈(附带源码)
程序流程:首先注册自己程序的窗口以及类等一系列窗口操作,安装了一个定时器,间隔为100ms,功能搜索QQ的类名,如果找到就利用FindWindow("5B3838F5-0C81-46D9-A ...
- Android源码及SDK国内镜像下载
Android源码及SDK国内镜像下载Android源码下载: 今天发现,清华大学提供AOSP镜像,以前都是从Google的站点下载同步更新的,但是现在有了国内的镜像站点就好多了,下载Androidd ...
- 30分钟 带你浅入seajs源码
上个星期写了浅入requirejs的, 大家都知道 require是AMD规范(Asynchronous Module Definition) 来 今天我们一起看看 CMD规范(Common Mo ...
- 浅谈 jQuery 事件源码定位问题
该方法已过期,chrome 48还是49开始,自带各种流行框架的事件绑定解析. 勾上这个选项即可. 昨天群里有人问了个事件源码定位的问题,简单描述下是这样的. 在一个不是自己写的页面上,如何快速定位到 ...
- Ubuntu14.04 编译 Android 5.1.1源码(采用国内镜像)
欢迎转载,转载请注明出处: http://www.cnblogs.com/lanrenxinxin/p/5424554.html 之前就有编译android源码的想法,但是由于有GFW的存在,又没有梯 ...
- 浅读vue-router源码,了解vue-router基本原理
项目中使用vue-router的时候,会进行以下操作(可能具体不是这么写的,但是原理一样): 定义映射关系routes: 定义router实例的时候传入vue和参数{routes...}: 定义vue ...
随机推荐
- linux 目录结构图解
参考资料:http://www.linuxidc.com/Linux/2016-08/134701.htm
- Java中正则Matcher类的matches()、lookAt()和find()的区别<转>
在Matcher类中有matches.lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回 ...
- Spring读书笔记-----Spring的Bean之Bean的基本概念
从前面我们知道Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架 ...
- 在PC端或移动端应用中接入商业QQ的方法
今天看博友的博客学习了一种很有用的方法: 在页面中需要接入企业的QQ,访问网址:http://shang.qq.com/widget/consult.php.(就是API接口),然后你只需要登录你的Q ...
- hibernate mysql写入中文乱码 解决
启动hibernate项目,自动创建表,插入数据之后发现写入表里的数据里的中文是乱码.按如下方法解决了: 修改数据库的字符集为UTF-8,这个可以通过mysql的客户端软件里右键要修改的数据库的属性更 ...
- JavaSE复习_8 泛型程序设计
今晚看了core Java的泛型部分,万万没有想到,当时看培训班视频入门的一带而过的泛型,有这样多的细节,整理了一下书里面提到的一些自认为的重点,方便以后观阅.由于是复习,一些基础知识跳过. △泛型类 ...
- 【夯实Mysql基础】记一次mysql语句的优化过程!
1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同 ...
- JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...
- OpenGL的几何变换[转]
OpenGL的几何变换 1.实验目的: 理解掌握一个OpenGL程序平移.旋转.缩放变换的方法. 2.实验内容: (1)阅读实验原理,运行示范实验代码,掌握OpenGL程序平移.旋转.缩放变换的方法: ...
- Spring MVC 入门基础(一)
一.Spring Web MVC是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解 ...