远控软件gh0st3.6开源了,开源意味着我们可以在此基础上进行二次开发,同时也意味着杀软可以较容易的查杀该款远控木马,既然要利用,我们就做好源码基础上的木马免杀工作。

好久没有来博客了,我把免杀这部分整理了一下,先抛一砖头,有兴趣的朋友可以接着做,也可以和本人交流。


    gh0st远控软件采用驱动级RESSDT过主动,svchost参数启动,替换系统服务的方式工作的,工作方式较为先进,美中不足的部分是没有进行驱动级或用户级隐藏,当然这部分可以添加进去。编码利用了VC的编程环境。

一、环境配置
    编译环境一定要配置好:DDK+SDK+VC6,DDK用来编译sys文件的,SDK+VC6是用来编译工程的,配置部分比较简单,网上有很多资料,这里不再详述,有兴趣的朋友也可以查看DDK和SDK的相关帮助。

二、特征码定位简述
    杀毒软件查杀木马的原理基本是根据特征查杀的,被查杀的部分我们称之为特征码,所以我们可以利用特征码定位工具MyCLL定位出病毒的特征码位置,定位工具原理是将被扫描木马分块,利用分段填充的方式,匹配杀软的特征值,找到杀软查杀病毒的位置。
    定位出特征码,如何反向找到源码中的对应位置呢?请看下面分析,

三、二进制文件与源码定位之map文件利用
    map文件是二进制和源码之间对应的一个映射文件。
    我们假设根据第三步我们定位出了病毒的特征码:

病毒名称       特征码位置      内存地址
        svchost.dll 000038AA_00000002   100044AA
        svchost.dll 00005F98_00000002

第一步设置VC编译环境生成Map文件。
    在 VC 中,点击菜单“Project -> Settings”选项页(或按下 Alt+F7),选择 C/C++ 选项卡,并在最下面的 Project Options 里面输入:/Zd ,然后要点击 Link 选项卡,选中“Generate mapfile”复选框,并在最下面的 Project Options 里面输入:/mapinfo:lines,表示生成 MAP 文件时,加入行信息。设置完成。

第二步编译VC工程,设置活动工程编译即可,这个不用说明。这个步骤完成后,在release(或debug)目录,多了一个.map文件(比如svchost.map)。

第三步打开map文件(用UE或文本编辑器打开都行),形式如下:

(begin)
Timestamp is 488fcef2 (Wed Jul 30 10:16:18 2008)

Preferred load address is 10000000
---------------------------------------------------------------------------1----(为方便说明,wrw添加)
Start         Length     Name                   Class
0001:00000000 00010a50H .text                   CODE
0001:00010a50 00000485H .text$x                 CODE
0002:00000000 000004c8H .idata$5                DATA
......
0003:00000010 00000004H .CRT$XIZ                DATA
0003:00000020 00001a50H .data                   DATA
0003:00001a70 00000688H .bss                    DATA
0004:00000000 000000a8H .rsrc$01                DATA
0004:000000b0 00000cf0H .rsrc$02                DATA

----------------------------------------------------------------------------2---(为方便说明,wrw添加)
  Address         Publics by Value              Rva+Base     Lib:Object

0001:00000000       ??0CAudio@@QAE@XZ          10001000 f   Audio.obj
0001:000000d0       ??_GCAudio@@UAEPAXI@Z      100010d0 f i Audio.obj
0001:000000d0       ??_ECAudio@@UAEPAXI@Z      100010d0 f i Audio.obj
0001:000000f0       ??1CAudio@@UAE@XZ          100010f0 f   Audio.obj
0001:000001e0       ?getRecordBuffer@CAudio@@QAEPAEPAK@Z 100011e0 f   Audio.obj
0001:00000240       ?playBuffer@CAudio@@QAE_NPAEK@Z 10001240 f   Audio.obj
0001:000002c0       ?InitializeWaveIn@CAudio@@AAE_NXZ 100012c0 f   Audio.obj
  ......
0001:00003310       ?SendToken@CFileManager@@AAEHE@Z 10004310 f   FileManager.obj
0001:00003320       ?UploadToRemote@CFileManager@@AAE_NPAE@Z 10004320 f   FileManager.obj
0001:00003440       ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f   FileManager.obj
0001:00003670       ?StopTransfer@CFileManager@@AAEXXZ 10004670 f   FileManager.obj
0001:00003730       ?CreateLocalRecvFile@CFileManager@@AAEXPAE@Z 10004730 f   FileManager.obj

......
----------------------------------------------------------------------------3---(为方便说明,wrw添加)

Line numbers for .\Release\FileManager.obj(E:\vtmp\gh0st3src\Server\svchost\common\FileManager.cpp) segment .text

17 0001:00002630    20 0001:0000267f    21 0001:00002698    24 0001:000026d0
    25 0001:000026f8    26 0001:0000273c    29 0001:000027d0    33 0001:000027ee
    77 0001:000027f8    36 0001:000027fb    37 0001:00002803    77 0001:0000280d
  ......
   532 0001:0000340f   534 0001:00003414   537 0001:00003428   540 0001:00003440
   546 0001:0000345d   547 0001:00003487   548 0001:00003490   549 0001:00003492
   551 0001:0000349e   552 0001:000034b8   553 0001:000034cb   554 0001:000034d4
   558 0001:000034de   560 0001:000034e9   563 0001:000034ee   564 0001:00003506
  ......

(end)

我们看下,定位svchost.dll 的第一个特征码内存地址为:100044AA,在第2块中,我们可以找到RVA+BASE与之很接近的是

0001:00003440       ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f   FileManager.obj

这样我们可以定位到FileManager.cpp中的FixedUploadList函数,是不是范围缩小了?
下面我们再缩小代码行
利用这个公式:特征码行偏移 = 特征码地址(Crash Address)- 基地址(ImageBase Address)- 0x1000
看起来好像很难,其实很简单,我们将100044AA去掉内存基址10000000,再减1000,因为PE很多从1000开始,可以得到代码偏移地址为34AA。到第3块中找对应的代码行。
偏移地址34AA在(551 0001:0000349e   552 0001:000034b8 )中间,也就是551行和552行中间,我们到源程序中查找第551行:
        wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash);
这样就定位出源代码了,要怎么修改就怎么修改它就可以了。

四、实战免杀
    A、卡巴免杀
    首次编译后,先做卡巴的免杀。卡巴杀sys文件和dll,当然也就杀包装它们的install.exe,最后卡巴还杀生成的sever,我这里说杀生成好的server不是和前面的特征码重叠的地方,而是杀配置信息。
    第一步、sys免杀
    sys重新编译后,增加了输入表的函数,同时系统不同,造成很多地方不同于原特征,顺利通过卡巴、金山、小红伞等杀软。
    第二步、svchost.dll免杀
     特征码定位MultiByteToWideChar和"gh0st update"两个位置。这里是通过第3步map文件得出的。
    卡巴怕加花指令, 这个函数MultiByteToWideChar的调用上,可以在这个函数前面随便加几句无效语句就可以通过卡巴杀软。
     字符串调用"gh0st update" ,这个是用于更新用的 ,如果不要在线更新,直接把这个语句所在代码块删除;嘿嘿,其实搜索工程替换这个字符串为其他的字符串就可以了^_^,这个方法同时可以过金山杀软。
    第三步、server免杀
    卡巴定位在最后的配置信息,采取跳转显然是不行的,采用加花的办法,在写入AAAAAA配置信息之前,随便写些东西,就可以做server免杀。
    卡巴免杀完成!

B、Avast免杀
    最新的avast杀软再查杀1下,杀install.exe和svchost.dll(也就是杀生成的文件和其中的资源文件),接着做它的源码免杀。
    定位在特征字符串%02d/%02d/%02d和“SYSTEM\CurrentControlSet\Services\%s”两个地方。
    解决方案:
    1、svchost.dll的特征码定位在键盘记录KeyboardManager.cpp文件中的SaveInfo(char *lpBuffer)函数。特征字符串%02d/%02d/%02d,也就是我们看到键盘记录的日期,修改之,修改的方法很多,将其改为[%d/%d/%d %d:%d:%d] ,编译即可通过avast杀软。
    2、install的特征码定位在“SYSTEM\CurrentControlSet\Services\%s”,对应文件是install.cpp里的InstallService函数,修改大小写,编译即可通过免杀。

五、添加垃圾代码的小方法
    垃圾代码要移动特征码所在的位置,不要跑到堆栈中了,这样的代码没有用。可以采取添加for循环,做计数,简单统计,采用局部变量,不改变后面的逻辑为宜。
    添加输出表的方法:
    有杀输出表的,可以在生成的svchost.dll上添加空函数 ,但是每次编译都要修改1次资源 ,其实我们在源码上添加如下语句:
     extern "C" __declspec(dllexport) bool JustTempFun();//声明
     ……
     extern "C" __declspec(dllexport) bool JustTempFun()  //实现
    {
        return false;
    }
   编译后,输出表就被改变了,有的杀软就可做到代码免杀。

六、gh0st自动生成6to4ex.dll的修改
    看到好多站友提问自动生成6to4ex.dll的问题,有热心站友也提出了自己的见解 ,我感觉有些人提出的解决方案不完全正确,有可能造成刚入手人误解,我根据自己的理解说明1下。

gh0st服务端是通svchost -netsvcs启动的,所以程序要利用netsvcs 服务,服务端也就是根据netsvcs生成的,故不能说服务端生成是随机的,相对于大多数系统来讲,基本是固定的,下面看分析。

查看install.cpp里面的InstallService()方法,首先遍历HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\Svchost中的服务项,查找到一个服务后,程序采取替换服务的方法,将原服务删除,然后生成对应服务项+ ex.dll的文件替换原服务,6to4服务一般排在第一位,6to4服务是一种自动构造隧道的方式,作用在于只需要一个全球惟一的IPv4地址便可使得整个站点获得IPv6 的连接,这个服务对一般人来讲,基本闲置,所以我们的程序就把6to4服务给替换掉,同时在windows\system32\目录下生成 6to4ex.dll,以后启动就是6to4ex了,如果把这个服务跳过去,就依次向下生成Ias、Iprip等服务啦,如果netsvcs项没有可以替换的服务,则程序将自己添加1个服务,名称就是由 AddsvchostService()方法产生的netsvcs_0x%d。

这样说不知道关心服务名称的站友明白了不?

这个不能说是技术问题,但是小技巧问题可以从这里产生,我不知道其他人的360是怎么过的,但是我觉得可以提示1下的是,如果是360默认系统安全的服务,它肯定不会报不安全,替换闲置的系统安全的服务则通过360的效果要好的多。

本文出自 “我的空间” 博客,转载请与作者联系!

远控软件gh0st源码免杀之我谈相关推荐

  1. 远控软件GHOST源码免杀

    <script type="text/javascript"></script> 远控软件gh0st源码免杀 远控软件gh0st3.6开源了,开源意味着我们 ...

  2. 源码免杀处理的技巧与tips

    2019独角兽企业重金招聘Python工程师标准>>> 首先,要了解编译中MAP的利用:     第一步设置VC编译环境生成Map文件. 在 VC 中,点击菜单"Proje ...

  3. 源码免杀教程 源码免杀思路详解

    绝对不一样的源码免杀教程!绝对不一样的免杀实战体验!清晰的思路!细致全面的思路详解!让你感到免杀原来可以这么简单!教你如何在源代码中找出被杀代码,修改代码从而达到免杀效果! 免杀之-网络攻防入门书籍推 ...

  4. 现在主流免杀是源码免杀

    一.文件特征码定位:  一般我们先用MyCCL把被查杀文件的文件特征码定位出来,然后用C32判断定位出来的这个特征码是代码还  是字符串,或者是输入表.输出表.版权信息等-定位在不同的地方,就要用不同 ...

  5. Mimikatz源码免杀

    目录 介绍 环境准备 处理报错 生成32位 生成64位 下载360.360杀毒 直接查杀 关键字替换-失败 去除注释,修改版本信息 删除注释信息 替换图标 修改版本信息 重新编译文件 过杀软 360家 ...

  6. 286合购网VC++源码免杀

    286合购网VC++源码免杀 下载地址 https://pan.baidu.com/s/15qZCkizDDaK1Mq61a4T35g 创业资料/视频资料/安全相关 扫码下面二维码关注公众号回复 10 ...

  7. 源码免杀--反调试代码,免杀爱好者必备的利剑

    源码免杀只处理特征码还是不够的,必须要加入反调试代码,这样才能更持久更耐用.这里就发几个暗夜经常用的反调试代码给大家. 1. HKEY ck; char strreg[] = {'S','O','F' ...

  8. 源码免杀-过启发式的思路

    定位免杀NOD32的一些经验 ----collect dying site:http://www.idying.cn 欢迎大家一起讨论 先说下定位方法: 1 NOD32不能正向定位的,定位出来也是不能 ...

  9. 在linux下做源码免杀,Cobaltstrike免杀从源码级到落地思维转变

    文章来源: https://www.freebuf.com/articles/web/258988.html 前言 距离上一篇文章<那些FastJson漏洞不为人知的事情(开发角度)>已经 ...

最新文章

  1. (转) Weblogic 12c 集群部署和session复制
  2. 华为设备的初始密码是多少?
  3. 基于web的甘特图,易度甘特图edogantt!
  4. Java中需要全部小写的是,下列哪些是Java中常量的命名约定?A、全部为小写字母B、全部为大写字母C、大小写混合D、字与字之间...
  5. cookie session token区别_彻底理解cookie,session,token
  6. 《博德之门 3》究竟有多「DnD」?
  7. 逻辑回归(logistic regression)的本质——极大似然估计
  8. 1年薪水=3盒药?一位癌症晚期病人告诉你:别乱买保险
  9. 【WP开发】实现“摇一摇”功能
  10. docker anaconda_深度学习炼丹炉配置[1] Docker+sshfs环境配置
  11. springmvc:405 request method post not supported
  12. Elasticsearch中的嵌套查询介绍及实例
  13. java的恐怖推理游戏_胆小勿入!盘点一下2019年所有的恐怖游戏
  14. win10家庭版开启远程桌面(带rdpwrap.ini)
  15. linux设置usb选择性暂停,usb大容量存储设备是什么?无法启动怎么解决?
  16. 5号字对应的数字字号_我想要个字号对照表,就比如五号字对应10.5磅,更详细一点的更好...
  17. 2021最新Java后端面经合集 | 阿里腾讯百度字节
  18. 今日小程序推荐:纸塘-这个壁池真高清!
  19. 【小程序】微信小程序重复循环平移动画
  20. 触摸屏 服务器系统,IP网络触摸屏服务器 SK1606

热门文章

  1. VUE计算属性如何带参数
  2. 高考状元、奥赛金牌,清华姚班00后新生来了
  3. 前端FileReader对象实现图片file文件转base64
  4. 基于FPGA的数据采集系统
  5. 三星EMMC选型常识
  6. 监控系统的基本架构(Metric monitoring)
  7. 进制转换(二进制,八进制,十进制)
  8. 字符串指针和指向字符串的指针变量
  9. CSDN 博客已式微?
  10. JS:函数的内置对象:arguments