夜晚是黑虫子的天下

用CCL的逆向思维定位复合特征码的思路

上一篇 / 下一篇  2008-05-08 18:14:30


逆向操作思路如下:

准备工作:去壳等
0.  a. 预备步骤:判断是否为PE文件,若是就复制样本则把入口点开始的两个字节改为 EB FE ,目的是防止生成的文件被误运行而导致系统出问题。
          若不是PE文件,则禁用内存定位选项,并推荐用CCL28所使用的文件手动定位法。
   b. 判断磁盘可用的剩余空间是否足够容纳样本大小的30倍且大于30MB,这是为磁盘留取足够的余量,尽量减少生成文件时出错的机率。

1、 a. 同样是盖0,先计算要定位范围的大小(记为Tsize),把文件指针定位到样品文件偏移Kpoint处(刚开始为文件末尾),再从Kpoint往前,按 1、2、4、8、……2^N 字节的大小 (2^N   b. 用杀软测试是否被识别。(也可以自定义定位的范围),找到不被杀的文件中的最小Ksize值记作KxizeMIN。若全部被杀则说明特征码在更前面,将Kpoint前移Ksize,Tsize=Tsize-Ksize,回到 a步 继续。
  原理:不能识别的说明文件(或内存)中没有完整的特征码,继续缩小盖0的范围,一旦识别出一个,识别出的说明有一套完整的特征码暴露了。
  c. 判断这个KsizeMIN值,苦KsizeMIN=2,则把Kpoint前移一个字节就是刚好暴露的特征码的尾端了(即KpointTAIL=Kpoint-1),若KsizeMIN=1,则Kpoint就是这个尾端(即KpointTAIL=Kpoint),记录KpointTAIL结束第1步,转到第2步。若KsizeMIN大于2,则继续下面的步骤。
    d. 记下这个刚好被杀的点作为新的Kpoint及刚好被杀这次盖0的大小作为新的Tsize,即Kpoint往前移KsizeMIN/2,Tsize=(TSIZE-KsizeMIN/2),Kpoint之后的所有字节都盖零作为新样品,回到 a步 继续。
▲   这里要注意的是,对于PE文件定位时应该有个是否包含文件头的复选框(因为有的杀软如卡巴斯基,对文件头损坏的文件是不识别的),非PE文件定位时就把这个复选框灰掉,这样兼容性更好。
   内存定位时一定要先检测是否为PE文件,不能包含文件头,且入口点要特殊处理,所以必须先性理好文件特征码的免杀。以免有些人操作出错。
  每次盖0都要判断是否超出了要定位的范围,(尤其要注意的是,文件定位时不能超出文件范围,内存定位时不能走到文件头且盖好零后对入口点特殊处理。否则会导致出错或定位不准)

2、  第 1 步所得的KpointTAIL是一处特征码的尾端了,接下来定位其头端。
    把原文件样品的KpointTAIL后面全部盖零,KpointTAIL及之前保持不变,以这个文件作为新的样品,这时换用零字节前移法。把KpointEND 前的第N(N的范围是1--20)字节处记作Kpoint,把Kpoint处用一个节节的0覆盖,这样生成20个文件,生成的文件用 H_Kpoint_KpointTAIL_0.扩展名 命名。
  用杀毒软件扫描,若全部不被杀就把N的范围加20(即第二次的范围是20+1 -- 20+20),直到有文件被杀。这时用依次判断法很容易找出不被杀文件的最小的Kpoint,这个Kpoint就是KpointHEAD了。
   从KpointHEAD到KpointTAIL就是一套复合特征码的一个完整的片段了。作好记录保存。一般片段大小最大64字节,算它用100个字节也只需五个回合搞定这步。
  ▲说明:这一步每次只生成20个文件一是为了节省磁盘空间,二是内存定位时节省内存空间。这一步每次生成文件时也要作范围判断,只要判断好N的最大取值范围就行了。


3、  一处定位好了后,把此处用0盖掉作为新的样品,测试杀软能否识别,能识别的说明还有另外的组合,对这个改了一处的文件重复前面第1第2步的步骤,进入新的一轮定位。
4、  如此往复前面的 1 2 3,真到不被杀软识别。

(也包含文件定位和内存定位,先处理文件特征吗,文件免杀后,再内存定位)

  这种思路方法只需要开一个线程(加上响应界面检测是否用需要中止操作,最多也只要两个线程),每次最多生成21个文件,内存定位时最多也只加载21个文件。因为使用的是二分法,最坏的情况是每组特征码位置很@@前(前1KB),1MB(2^20 bytes)的文件一轮最多20次左右就可搞定(20+5-X,这里假设一套特征码的尾端距定位范围起始端2^X处)。效率上应该也不差的。
  这次修正方案后,算法也很简洁,效率比初始方案提高了好几倍。

▲▲▲特别注意事项说明说明:
  a. 确保每次生成文件完成后(内存定位时还要求文件加载完全后),才用杀毒软件扫描,确保杀毒软件的正确判断。一步识别出差错或误差,会导致整个轮次的定位不准。
  b. 每次前移都要判断是否超出了要定位的范围,(尤其要注意的是,文件定位时不能超出文件范围,内存定位时不能走到文件头且盖好零后对入口点特殊处理。否则会导致出错或定位不准)
  c. 为防止生成的文件被误运行而导致系统出问题,对于PE文件,每次盖0后,把入口点的两个字节改为EB FE ,这样构造了一个死循环。误运行后KILL提就行了,内存定位时又加载,一举两得。
        方案修正时间 2006-04-11  by niu-cow

  可以说是综合了CCL和MyCCL的原理。操作上比MyCCL方便简洁。
用这种思路,不管对方有几套复合特征码,也不管特征码的位置在哪里,都可定位出关键的地方。
这种方法属于半自动定位,可作为CCL的扩展


复合特征码定位原理及方法
1.特征码:特征码就是杀毒软件公司定义的一段或多段程序代码,杀毒软件用特征码来定义病毒,就
象我们用名字来定义人名一样。

2.复合特征码,其实就是多处特征码,因为单一特征码很容易被修改,从而杀毒软件ㄒ辶烁春咸卣?br /> 码,就是我们只修改一处特征码,还是会被杀掉的,就需要通通改掉。

3.复合特征码的定位原理,主要是讲一下MyCCL的原理,我这里举个例子:
一段程序:a---b-----------------c---c---a-----b-----------a--b----a------
这里a,b,c是特征码,只有当a,b,c同时存在的时候,杀毒软件才会报毒!我们使用的方法还是把程序填0,然后试杀,被杀的说明是特征码(注意这里是复合特征码的情况)。我们把这段程序分成3段。
0_0_20:  a---b--------------00000000000000000000000000000000000000000000
1_20_20:  a---b-----------------c---c---a-----b---00000000000000000000000
2_20_20:  a---b-----------------c---c---a-----b-----------a--b----a------
我们把这段程序分成这样的3段,用杀毒软件查杀的时候,杀软会报1_20_20,2_20_20是病毒!这样我们就知道特征码是在1_20_20这段里了。然后二次处理,把1_20_20这段用0填,然后在杀!二次处理后就是这样的:
0_0_20: a---b---------------0000000000000000000000000000000000000000000
1_20_20: a---b---------------0000000000000000000000000000000000000000000
2_20_20: a---b---------------00000000000000000000--------a--b----a------
这样杀毒软件就不会报毒了,如果程序的后面还有c特征码的话,可以象这样继续分析,直到把所有的c特征码都填0,找到为止!找到了特征码的大段之后,再详细定位,详细定位就是这样反复操作。
4.下面我们来实战定位,瑞星vs黑防鸽子
1>这是定位复合特征码的工具,下载地址:http://www.allinhack.com/blog/
   
    首先是文件特征码的定位,大家看我的参数~
   
    分块个数我们选10,开始的时候选小一点。开始位置:00000400 分段长度:000A1200这里是文件特征码定位,所以我们选CODE段,有的是TEXT段。当然也不绝对,有的时候杀毒软件会把特征码放到PE的文件头部,这样就需要我们把整个木马的都填上,才能定出来!OUTPUT是分块后的文件输出目录,0000_00000400_000101CC-->0000样本的序号,00000400开始位置,000101CC偏移大小。也就是说从00000400到00000400+000101CC=000105CC是第一段!后面都填0。然后用杀毒软件杀一下,被杀掉的是特征码,二次处理是把特征码替换成0,然后继续找!直到杀毒软件不杀为止!我把我的操作步骤,按先后顺序截图贴上来~
1.点生成

2.点yes

3.点ok,然后用杀毒软件杀一下你的output目录

0009_0009142C_000101D5被杀,说明在这段里存在特征码.我们点二次处理.
4.提示找到一处特征码,我们点yes继续

5.点ok,进行第二轮定位.

这就是文件复合特征码的定位全过程了,以后就是重复了,只到把所有的特征码都找出来,杀毒软件不在提示是病毒就可以了!
这是我定位的结果:
[特征] 00094B3E_00000003
[特征] 000A1250_00000002
2>下面我们来定位内存特征码,大家都知道,瑞星对黑防鸽子的特征码是多区多段特征码,所以用od一半一半定位的话会很麻烦,要一个区段一个区段的试,下面我就介绍一下用MyCCL来定位内存复合特征码,作者还写了一个小工具,就是把文件载如内存的tk.loader.exe,有了它我们就可以顺利的完成定位啦!参数设置和文件定位的基本一样,就是在后缀上把勾挑上,这样生成的文件就可以载入内存了.分块我个人建议填10,
开始位置填00000400,结束位置填000b9d6a,然后回车,它会自动把分段长度计算出来的.点生成,然后用
tk.loader.exe把文件加载到内存中去.我把过程截个图贴上来.



然后用瑞星杀一下内存

发现0000_00000400_000128F1.exe被报毒,我们手动把它从删掉!这样MyCCL才会知道,哪段存在特征码,再点二次处理.以后就是重复这个过程了.知道内存不在报毒为止.这里我建议大家在分块的时候,分成10块这样内存扫描的速度会很快.4个来回就可以定出来结果了.
这是我的定位结果:
[特征] 0000563B_00000002
[特征] 000A15E1_00000004
[特征] 000A6EFA_00000002
[特征] 000A6F20_00000003




灰鸽子终极免杀教程
一个星期前,本人做的免杀过卡巴,瑞星,金山,诺顿等(文件和内存)。我很兴奋的把免杀的方法在网上公布了,结果,很快的就被杀毒软件杀掉了。
为了让自己辛苦做的免杀不被杀,或者是晚一点被杀,今天在这里我就不发布免杀服务端了,有需要的朋友可以找我联系
其实,免杀的方法真的很多,关键在于免杀的思路。
今天本人,在这里也不做具体的动画,只提几个思路,希望还不会的黑友能有所借鉴。

在所有的版本中,黑防的鸽铀闶潜冉虾米雒馍钡牧耍 裉煸谡饫铮 揖陀盟 霭咐?br />
一,最经典的OD一半一半定位法



我们把整个黑色标记的区域看成是没有修改的木马代码(图一),把它从中间切平均分成两半,把其中的一半用nop 填充掉(图二),再用瑞星杀内存,如果杀掉了就说明特征代码在我们没有nop 掉的一半,没有杀到就说明我们刚刚nop的一半中含有特征代码。

图二 所演示的情况是特征代码在没有nop 掉的一半,然后我们再选择含有特征代码的一半,继续分半用nop 填了再杀(图三)(图四)。这样我们的特征代码的范围就会越来越小。

整个过程新手估计也只要1个小时左右。方法容易理解,效果好。

二,经典二CCL定位
原理其实大同,都是要找特征码,然后做免杀。因为过程很复杂..用文字很难表达,有需要的朋友可以私下找我,我那里有相关语音教程。

三,加壳,加花
现在的加壳,加花软件百花齐放,而加了一个壳或者一个花之后,都能够给鸽子的服务端免杀起到广谱免杀的效果,但总感觉没前面介绍到的两种效果好,大家自己试一下就知道了。想补充说的一点是,花和壳子最好弄的唯一一点。不然很容易被杀,大家做了之后就知道我的意思了。

我个人感觉,那些“加区段 修改入口点 加密入口点”的方法,跟这个效果类似,所以就没另外分类

四,入口点加一。

这个,是最早最早我接触到的很有效的方法了,现在好象效果没那么好了,但也算是一种方法。


因为时间的关系,本人在这里也就只说这几种方法了。
但是,我想补充的一点是,也是本贴最关键的位置:

免杀的思路很多,我这里讲的四种是最基本的。大家其实可以把多种免杀的方法结合在一起使用
大家可以简单的用排列组合算一下C44+C43+C42+C41=1+4+6+4=15
也就是说,我这里的方法可以演变出15种免杀的方法来。大家自己那里肯定还有我没说的,我不会的方法,都用在一起.....哇....免杀无限升级!



PcShare免杀资料
1 关于PcShare免杀处理说明

PcShare软件包update文件夹里面有13个文件,包含实现功能的插件和生成客户所必须的文件.

PcFile.exe
PcFrame.exe
PcKeyMon.exe
PcMulit.exe
PcProc.exe
PcRegedit.exe
PcService.exe
PcTlnt.exe

有彩色图标的功能插件,被杀后和肉鸡没关系,只是控制端不能操作对应的功能而已,只要保持文件不被删除,就可以正常控制.

PcCortr.dll 控制上线的功能DLL

这些文件被查杀和被控制端没有关系,这些都是本地的控制端的功能组件,保持不被删除,就可以正常使用控制端.

2 免杀必须处理的文件

生成客户所必须的4个文件,也是免杀需要处理的4个文件.

PcInit.exe 生成客户所必须的文件,生成后的EXE,肉鸡执行的EXE也就是这个文件

PcClient.dll 肉鸡执行生成的客户释放的DLL

PcKey.dll 加入键盘记录功能后,肉鸡执行生成的客户释放的DLL,对应键盘记录功能,一般被杀后不影响其他功能.

PcHide.sys 肉鸡自启动隐藏通信的文件,肉鸡执行生成的客户释放的SYS

3 PcInit.exe处理方法概叙

1.加壳加花.

2.加壳后,用VMP加密入口段,模糊入口点.

3.直接用VMP加密入口段,模糊入口点,再加压缩壳,不能用加密壳.

4.修改特征段内指令,精确定位特征段内的指令,单条指令或者连续的指令大于等于5字节指令即可长跳转.

手工定位CLL 指令顺序调换法和跳转法结合,之后加花加壳就OK!

4 dll处理方法概叙

1.用VMP加密入口段,模糊入口点.

2.修改特征段内指令,精确定位特征段内的指令,单条指令或者连续的指令大于等于5字节指令即可长跳转.

3.用伯乐填00特征字符串后运行正常的样本,再用PE编辑工具(看雪学院很多)修正校验重建输入表.

4.加特殊的壳如007

5.修改特征段内指令,精确定位特征段内的指令,单条指令或者连续的指令大于等于5字节指令即可长跳转.

pcclient.dll 手动修改可以过杀毒
pckey.dll 键盘记录的文件,CCL定位后,手动修改。可以加花,加壳。

5 SYS处理方法dll处理方法概叙

1.直接16进制编辑修改特征字符串后,修正校验.

2.加区加大PE的空隙,修正校验后,修改特征段内指令,精确定位特征段内的指令,单条指令或者连续的指令大于等于5字节指令即可长跳转.

3.VMP加密特征段指令或者入口.

VM加密,修改特征字符。

如何定位pchide.sys的卡巴特征码(详细说明)

卡巴一直把pchide.sys的盯得很紧,定位了多处特征码不说还使用了很多新技术,我也不好乱定义有人说是辅助特征码还有什么反ccl定位技术的。我跟大家说一下我是怎么定位卡巴sys特征码的
先用ccl定位一下试试看看有没有奇迹*_* 。 我是这样设置的:自动--间隔7秒--最小替换2个字节(两个字节会耗很长时间你可以加多字节,不过2个字节一旦定位就会很准不用再继续浪费时间)用1011为例子,开始定位,完后出现的定位结果那个对话框先别点确定,用卡巴再杀一遍文件,以免漏杀再点确定。此时定位出下面结果:(卡巴版本和病毒库日期不同你的结果可能跟我的存在差异)

检测结果如下
共有6处特征码
序号 起始偏移 结束偏移 区间大小
01 00001716 00001719 00000003
02 0000171D 00001726 00000009
03 0000172A 00001736 0000000C
04 00001737 00001740 00000009
05 00001745 00001751 0000000C
06 00001752 00001755 00000003
只修改一处特征码无效,需同时修改两处或以上

只修改两处特征码无效,需同时修改三处或以上

不会吧,同时修改三处都无效,没折了!

最后是用ccl结果排列组合的检测结果。

怎么会这样呢?接下来我们拿出2进制智能比较工具UltraCompare(ue附带工具)一比较就一目了然了...
打开UltraCompare在查看选项下选择2进制模式(智能)在左面打开1011原sys文件,在右边打开刚才ccl定位生成的文件(注:如果你定位完全结束你可以打开out里任何一个,如果没有结束就要打开按时间排列的最后一个。0906sys可能用ccl不能定位到最后就需要打开最后一个)比较一下你会发现除了上面定位出的特征码外(根据你打开的不同只会是1-6其中的一处,最后一个就是最后一处)1a60-1db0处有大段存在差异。

这就是只改上面几处无法免杀的原因。
接下来的工作就是定位这一大段里的特征码,特征码不可能一大段的只会是几个字节。接下来再跟我操作,用ue打开原sys文件将第一处特征码如00001752-00001755按ctrl+G输入零x1752确定,会停在1752处,改为00 00 00 把文件另存为00000.sys接下来的的工作就从他入手。用ue打开00000.sys将1a60-1db0的一半1a60-1c00填为00另存为00001.sys卡巴杀毒,不杀。特征码在1a60-1c00段。用ue再次打开00000.sys将1a60-1c00的一半1a60-1b30处填00另存为00002.sys用卡巴查杀被杀特征码不在这一段。分析结果是特征码在1b30-1c00段,用ue再次打开00000.sys将1b30-1c00一半1b30-1ba0处填00另存为00003.sys卡巴查杀,不杀。特征码就在这一段。再用相同办法分割几次就会得到卡巴的特征码了。最后我得到的结果是1b66处一个字节。最后分析1b66处为必选特征码上面的1-6为任选其一,符合这两个条件卡巴及报为病毒。

这样就定位完了1011版的sys卡巴的特征码。0906版的sys已经被卡巴盯死,不过你有时间可以试一下。自动检测配合暂停手工查杀,字节定位10个字节.有不杀得就保存(这一条必须),基本上到OUT_000003D6_00000035就不能继续了。用UltraCompare比较OUT_000003D6_00000035跟原sys差别处记下,会有4大处不同,3d0-400,1dc0-22e0,3180-3540,3600-3800同样采取三处填00 剩下的一处对半填00,较量几个回合就可以搞定了。

以上纯属个人观点,如有错误请指正。

关于sys免杀,不一定全对,仅供参考

1、通过修改特征码可以免杀。
不一定全对,我只在KV2005上做了试验。修改文件特征码既可,定位用CCL。内存吗,不用,因为KV的内存检测模块好像只对exe,dll等有用。
至于有的兄弟说CCL定位出的avp特征码不好修改,没试过,不好断言。

2、修改后的sys隐藏功能丢失。
修改后首先确保sys被加载了,在IceSword中看SSDT。如果已加载,而iexplorer.exe仍然没有隐藏,也许是代码被修改坏了。不过,我在KV2005下修改后的SYS正常加载,隐藏功能也正常。

3、CRC校验
有的兄弟说sys文件中有CRC校验,我想不会吧。不过PE结结构中有个CheckSum...你修改了吗?
呵呵,不多说了,大家自己试试吧...

4、加壳还是改特征码
我个人不喜欢用加壳的方法。首先,固定的壳用的人多了,自然很快就被KILL。其次,SYS加壳能否正常运行我不知道,也没试过,但可以肯定的是,由于SYS文件运行在内核空间,所以大多数加密/压缩壳是没法儿用的。所以,我总是改特征码。

5、CCL加载SYS文件进行内存特征码检测会出错
已经说过了,SYS文件改过文件特征码既可免杀。SYS文件加载地址是无法以普通PE方式加载的,所以CCL报错。如果谁发现某杀软能对内核的SYS文件进行内存查杀,且文件、内存特征码不同,就告诉CCL的作者,没准他会加上该功能。

6、SYS文件特征码怎么改
SYS文件指令都运行在ring0,修改一定要小心。最好不要跳来跳去的了,尽量不改变原代码大小、执行流程......这里没法儿偷懒,汇编要熟悉!提示一个小技巧:用到eax的某些指令会比使用其它寄存器的相同指令来的短小,这样就为修改代码而不改变大小提供了途径,研究一下特征码处的寄存器能否修改......
OD没法加载SYS文件,自然没法儿直接修改。可考虑用二进制软件,找到物理位置直接修改。

Pcshare的软件包内update有13个文件

其中8个有彩色图标的是功能插件一般加上好壳北斗2.6之类的好壳就可以了.

关键处理PcClient.dll PcInit.exe PcHide.sys三个文件.

这几天0810被KAV杀了,现在我就拿原版0810做一次免杀示范,这里只提供思路,大家可以自行想办法修改,可以在VIP区交流,感谢k-ss等人.

原理:定位找到杀毒的特征,加密部分代码免杀.

1.所需工具

vmprotect V1.05

下载地址http://member.skycn.com/soft/22558.html

北斗2.6 nsAnti 相信大家都有,也可以去找破解的.

2.先给8个功能插件加上北斗2.6,PcKeyMon.exe特殊点有点挑,我用的nsAnti.

3.用vmprotect打开PcClient.dll

到地址100037C1 加密这段.

4.用vmprotect打开PcHide.sys

到地址0001204D 加密这段

5.用vmprotect打开PcKey.dll

到地址10001024加密这段

总结:生成的exe可能会大许多,可以给PcInit.exe加上壳,但是免杀就好,功能没有损坏,通信隐藏正常.

因此以后希望大家合作,通力找到杀毒的特征(各个版本可能不同),只要定位好地址加密,就可以轻松实现免杀。

相关阅读:

TAG: 思路 CCL 特征 思维 逆向

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-05-16  
    123
45678910
11121314151617
18192021222324
25262728293031

我的存档

数据统计

  • 访问量: 258
  • 日志数: 22
  • 图片数: 1
  • 建立时间: 2008-05-06
  • 更新时间: 2008-05-09

RSS订阅

Open Toolbar