PcShare可算国内最优秀的远程控制软件之一,其特有的驱动级隐藏技术让PS的隐蔽性有了质的提升。可再好的隐藏也必须先过安装这一关,由于杀软的特征码库中早已有PS的代码,所以在开监测的情况下,当服务端释放*.D1L和*.SYS两个文件时杀软会报警,因此没法儿安装。这时应该做什么?当然是免杀。加壳是没用的,要改特征码。改文件和内存特征码在前几期的黑防都已介绍过,照旧修改就可以。关键PS中有个驱动程序PcHide.SYS,它的特征码又应该怎么修改呢?这里就和大家交流一下含驱动的程序特征码修改,使用的杀软是最新的KV2006,PS使用的是黑基下载的黑盟玫瑰破解完全版。(用盗版只是测试,大家多支持正版。)其它工具包括特征码修改器CCLv2.7.1、IDA pro 4.7、OllyDbg、PeInfo、IceSword及UltraEdit。 
1.驱动程序PcHide.SYS的修改
上来就是重头戏,先来修改驱动的文件特征码吧。第一步是用CCL确定其特征码位置,CCL的使用过程就不再赘述了,直接用自动定位功能,检测大小为10,检测范围为text既代码段。直接看定位结果如下:
0001 000003DC 0000001F 000003FB 
0002 000003FC 0000003E 0000043A 
0003 00001C78 0000001F 00001C97 
0004 00001C98 0000003E 00001CD6 
0005 00001CD7 0000003E 00001D15 
看看结果,聪明的你应该发现虽然有5处数据,但前2段和后3段分别相连,也就是说PcHide.SYS总共只有两处特征码,分别在000003DC到0000043A和00001C78到00001D15。像这样两处相连而又相隔较远的情况,一般说来两处必须都要修改。(在结果较多且较分散时,判断起来会麻烦一点,所以我给CCL加了个功能,可以很快确定至少要修改几处,修改哪几处。将在下文介绍。)
下面是IDA反汇编,看代码。先来看3DC处。看来不是汇编指令。没关系,在IDA中切换到Hex View窗口观察,原来是字符串“D:PcShare瘝鐗堟湰PcHideobjfrei386PcHide.pdb”。中间的乱码没关系,因为我们看到了PcShare和PcHide。改字符串最简单的方法是改大小写,原则是不能干扰原文件执行。这里的字符串给出了一个pdb文件(符号文件?)的路径,虽然我不知道它的具体作用,但大小写改变应该没问题。于是,在UltraEdit中将该处的大写字母全改为小写,完后保存。
光修改这处不行,KV检测一下还会报警,也证实了前面的判断——两处都要修改――是正确的。再来看第二处1C78的代码,修改该处代码既是重点又是难点。

.text:00011C78 xor ecx, ecx
.text:00011C7A cmp byte_12280, cl
.text:00011C80 jz locret_11D68
.text:00011C86 push esi
.text:00011C87 cli
.text:00011C88 mov eax, cr0
.text:00011C8B and eax, 0FFFEFFFFh
.text:00011C90 mov cr0, eax
.text:00011C93 mov edx, dword_130EC
.text:00011C99 mov edx, [edx]
.text:00011C9B mov esi, dword_130E0
.text:00011CA1 mov eax, ds:ZwQuerySystemInformation

修改的难点有二,一是该段中包含跳转指令jz,二是指令的顺序没法交换。驱动程序是在内核执行的文件,所以修改时一定要注意,能不添加代码就不要添加,尽量不改变原代码的整体大小。因此,这里用了个特殊的方法。注意这一句and eax,0FFFEFFFFh。要知道eax是CPU最常用的寄存器,因此操作eax的指令通常既短小速度也快,我们看一下这句指令的十六进制编码:25 FF FF FE FF。很明显,25是指令,FFFFFEFF是参数。而and ebx,FFFFFEFF的编码是什么呢?最方便的查看指令编码的工具就是OD了,用OD任意打开一个可执行文件(OD不能直接打开驱动文件),做一下试验,得到编码为:81E3 FFFFFEFF。呵呵,多了一个字节。(看一下Intel指令参考就知道,81代表and指令,E3代表ebx及操作方式,确实eax的指令被优化了。)我们的思路,将这里的寄存器改为ebx。但多出的一字节怎么办呢,不能将所有的代码都向下平移吧!呵呵,我们要在下面的代码中将这个字节找回来。看mov edx, dword_130EC,它的编码为:8B 15 EC 30 01 00,足足6字节。把这里的edx换为eax会怎么样,同样在OD中键入mov eax,dword ptr ds:[130EC],看到了吧,它的编码为:A1 EC300100,只有5个字节,这样代码的大小就平衡了。
还有一个问题要注意,为什么可以将edx改为eax,如果eax存有其它的值怎么办,那不就改变原程序的执行结果啦。不会的,因为向下三行有这样的代码:mov eax, ds:ZwQuerySystemInformation,说明eax的值在这里被更新,因此可以判断出修改eax的值不会影响程序执行。方法已经有了,下面修改。先在OD中将如下代码键入(加黑体的是我们修改的地方。
10003817 0F20C3 mov ebx,cr0
1000381A 81E3 FFFFFEFF and ebx,FFFEFFFF
10003820 0F22C3 mov cr0,ebx
10003823 A1 EC300100 mov eax,dword ptr ds:[130EC]
10003828 8B10 mov edx,dword ptr ds:[eax]
5句代码共19个字节,与未修改时的一样。由于OD不能直接打开SYS,所以我们用UltraEdit打开PcHide.SYS,直接修改十六进制数据。修改完后保存,再用KV检测。怎么样,文件免杀成功。
下面是非常关键的一步,修改文件的校验和(CheckSum)。这一步也许是众多网友修改后的驱动无法加载的原因。用PeInfo打开sys文件,点击CheckSum,程序自动计算出结果,再点修改就可以了。那么驱动的文件特征码改完了,内存的需不需要改呢?我们来试一下:用驱动加载程序将PcHide.sys加载到内存中,用KV进行内存检测。加载工具用InstDvr([url]www.rootkit.com/vault/hoglund/InstDvr.zip[/url]),运行时输入sys文件全路径,先是Install安装,然后Start开始执行。若显示Operation was successful,表示操作成功。用KV检测,呵呵,检测不到,这样就避免了我们修改内存特征码的麻烦。(没试之前我还真犯愁,CCL暂不具备定位驱动文件内存特征码的功能,这下可以偷懒了,不用再写代码!)
PcClient.dll、PcKey.dll与PcInit.exe的文件特征码修改。PS共包括四个关键文件,除了那个SYS处就是这三个。既然不是驱动程序,修改起来真是得心应手。过程就不多说了,只详细说一下改PcClient.dll的,其它直接给出结果,中间的注意事项会提出来。PcClient第一次定位设置:手动,生成100个文件,范围为整个文件。定位结果为:
0001 00000000 0000028E 0000028E 
0002 00002B6E 00000147 00002CB5 
0003 000036ED 00000147 00003834 
0004 00007D2E 000002D2 00008000 
注意,手动检测如果能剩余多个文件不被杀(文件头被覆盖的除外,比如0001项),说明该文件既使有多处特征码,也只需修改一处既可免杀。看结果,范围较大,我们将定位精度调高,再检测一次。将CCL设置为:手动,替换精度16字节,范围为00002B6E开始处0x147个字节(既选取了0002项),再次定位结果就一项:
0001 00002C3E 00000070 00002CAE
为什么我们将精度设为16,结果的范围却这么大,为70。这说明该特征码本身范围较大,任意改动一小处既可搞定。OK,都不用IDA出手,直接用OD打开PcClient.dll,来到10002C3E处,有如下代码:

.text:10002C41 mov edi, [esp+lpServiceName]
.text:10002C45 mov esi, eax

.text:10002C81 mov edi, [esp+lpDisplayName]
.text:10002C85 mov esi, eax

好爽,最简单的方法,交换顺序既可。保存后再用KV检测,免杀again!下面是其余两个文件的修改,这时我没用手动,而用了自动定位,检测范围就是text段,给出结果先。PcKey.dll这样修改:
.text:10001191 mov esi, eax
.text:10001193 test esi, esi
.text:10001195 jz short loc_100011F7
.text:10001197 mov ecx, 0FFh
.text:1000119C xor eax, eax
.text:1000119E lea edi, [esp+608h+var_400+1]
将test esi,esi换为or esi,esi既可。(晕死,改了一个字节就搞定,服了KV!)PcInit.exe共修改两处,一处是
.text:004016AE stosd
.text:004016AF stosb
第二处是
.text:004017CE test eax, eax
怎么改不用我说了吧。交换顺序,test变or。再检测,成功。到这里,三个文件的文件特征码全部修改成功。这里说一下上文提到的CCL定位结果排列组合功能,比如在定位PcKey.dll时,自动定位结果为:
0001 00001180 00000070 000011F0 
0002 00001790 00000020 000017B0 
0003 000017C0 00000010 000017D0 
0004 000017E0 00000010 000017F0
精度已经够小了,可四处结果先改哪一处好呢。这时就可以用CCL的该功能:打开PcKey.dll,导入刚才的定位结果,然后点生成。如图4所示。在output文件夹里生成了一些文件名为R_X_XXXXXX的文件。用KV对output文件夹扫描,完后删除报警的文件(这里一个也没有删除),再点击检测钮,CCL会给出如下结果:
 
分页:[1] 2  

转载于:https://blog.51cto.com/307567/72687

驱动级的特征码修改——终级免杀之PcShare相关推荐

  1. 【黑客免杀攻防】读书笔记1 - 初级免杀基础理论(反病毒软件特征码提取介绍、免杀原理、壳)...

    在52pojie发表<xxxx>病毒查杀的帖子后,感谢论坛里的会员GleamJ牛不但指出我文章后所添加服务名字符串作为特征码方式的不足,还分享了他工作中4种提取特征码的方法.让我更加觉得要 ...

  2. Windows下免杀思路总结

    1.简介 在安全厂商日趋成熟的背景下,编写免杀马的难度和成本日益增长.好用新兴的开源项目在短时间内就被分析并加入特征库.笔者调研了部分开源项目,其中也有项目做了类似的分析 [1],目前能够免杀的项目初 ...

  3. 壳的相关知识与木马加壳改壳免杀及各类修改特征码免杀方法

    1.壳的分类:压缩壳和加密壳 2.壳的作用:保护和文件免杀 二.加壳免杀的几个弱点 1.不能躲过像瑞星这类具有内存查杀功能的杀毒软件. 2.一般不能躲过卡巴的查杀 因为卡巴采用了一种叫虚拟机技术.首先 ...

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

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

  5. 【转】RFire系列免杀教程

    RFire系列免杀教程第1到20课 RFire系列免杀教程, 木马免杀 文件名称:       [原创]RFire系列免杀教程第1课.rar 文件大小:       41.16MB 文件类型:     ...

  6. Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结...

    Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结 1. ,免杀技术的用途2 1.1. 病毒木马的编写2 1.2. 软件保护所用的加密产品(比如壳)中,有 ...

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

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

  8. 木马免杀原理及方法(超全)

    灰鸽子免杀 概况 免杀意为免除被杀毒 软件杀掉的软件. 灰鸽子免杀简介:本工具为纯绿色工具,软件采用独特的查杀技巧可完全查杀灰鸽子全系列(VIP2005.vip2006.免杀处理) 木马,本软件已经过 ...

  9. 免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)

    00. 概述 什么是免杀?来自百科的注解: 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV),逐字翻译为& ...

最新文章

  1. 历史为什么丑化隋朝_隋朝于中国历史,到底处于什么样的地位,为何它一直被低估...
  2. kubesphere发布应用到应用商店完整步骤
  3. 如何基于ERP的sales organization 创建CRM对应的数据
  4. linux crontab怎么写,linux定时任务crontab
  5. html5播放视频自动循环播放,HTML5 通过Vedio标签实现视频循环播放的示例代码
  6. mysql 初始化_Windows10安装mysql
  7. 练习1:创建一个简单的银行程序包
  8. python与开源_Github上Top20 Python与机器学习开源项目推荐
  9. python语言的变量特点随时_python程序设计——基本语言特性
  10. Android 开发使用lambda实现 JDK8兼容
  11. python-学生管理系统--2录入学生信息内容以及代码
  12. HDU 4417 Super Mario 主席树
  13. c语言常见头文件大全,C语言头文件大全
  14. Advertising on Instagram 如何在Instagram上发布广告 Lynda课程中文字幕
  15. Echarts正态分布曲线
  16. 二值图像分析:轮廓形状逼近与拟合
  17. 【论文学习:基于EEG/EMG/EOG的多模态人机接口,用于实时控制软机器人手】
  18. GRLDR外部MENU.LST调用GRLDR内部菜单
  19. Win10(7~10)备份还原系统
  20. JVM内存管理------GC算法简介

热门文章

  1. Java——ArrayList(动态数组)介绍
  2. C# 自制OCR获取图片中的电子数字
  3. houdini之属性定义
  4. 制作CYDIA发布源的DEB文件,详解!
  5. 基于 Python 的自然邻域法空间插值的实现与优化
  6. PLC通过智能网关实现HTTP-Server接口(带Postman测试截图)
  7. Win10系统下编译运行汇编程序的3种方法
  8. 地下城与勇士(DNF)安特贝鲁峡谷副本(根特外围、根特东门、根特南门、根特北门、根特防御战、夜间袭击战、补给线阻断战、追击歼灭战、决战哈尔特山)(童年的回忆)
  9. Qt视频播放器[QMediaPlayer+QVideowidget]
  10. 英语计算机答题卡模板,英语答题卡模板.doc