打造不被杀的Topo工具程序
首先,关闭文件实时防毒,这点很关键,如果打开了,你用病毒特征码定位器是无法打开topo12.exe的,建一个临时文件夹作为存放生成临时文件用的目录,然后打开病毒特征码定位器,整体参数设置,手动操作,使用自定义路径,输入刚才你建的目录,确定。再设置手动操作,选“每次替换规定字节大小”,替换大小改为32(这里可以先改大点,然后再改小,下面会说到)。好了,可以开始生成了。可能有人会问,为什么不用自动操作呢?这是因为我觉得手动的方便,自动的操作太慢了,而且我的毒霸文件实时防毒有时还不能杀掉,不方便,所以用手动。可能我用的软件版本太低了,最新版应该有所改变。但手动需要了解这个特征码定位器的工作原理。 SZ4|-RQ]xq*S4E2w%De&y
下面我就根据自己的理解来说一下原理。杀毒软件是用特征码来判断是否是病毒的,特征码不会太多,也不会太长,因为太多太长会影响杀毒速度。而特征码定位器的工作原理就是把待分析的文件一段一段的字节替换为0(我们这里是32个为一段),其它代码保留,然后让杀毒软件去查毒,如果被杀掉了,就说明没替换的部分有特征码,如果没杀掉,就说明没有替换的部分已经没有特征码了,那么特征码一定在被替换的部分,这时就可以知道应该修改哪一段的代码了。用特征码来判断是否是病毒有个缺点,就是特征码是静态的,只要改一下代码实现相同的功能,特征码搜索就会失败,这样就不会报有毒了。原理看不懂不要紧,下面再详细操作一下就能理解了。 &KDT(ZQE0ARU
u#JMAK/On ]
用病毒特征码定位器打开topo12.exe,出现pe文件段选择,然后添加所有的区段,确定,然后会告诉你硬盘空间是否够,如果不够就换一个大点的盘,在根目录下建一个目录,实在不行就去作者论坛[url]http://www.vxer.net/bbs[/url] 去问一下作者吧。(这里关于空间大小的问题我也不太懂,我用默认的路径它说我空间不够,我空间明明够的。。。知道的人请指点一下)然后go,完成后就最小化吧,等会再用。打开杀毒软件,杀毒选项是查所有软件,查到后删除,然后查一下生成文件的目录,查完后看看剩下哪几个文件,选结果定位,选刚才那个目录,然后会出现特征码的位置和大小,我这里是三个
-------------定位结果------------ -we wc?#XfH
序号 起始偏移 大小 结束偏移
0001 00000400 00000020 00000420 b ] L-EAz k
wj9lXXf#a!u
0002 00001260 00000040 000012A0 %_-XH:a(kn
`dn7m^(U)h&oy
0003 000014C0 00000060 00001520 &Y4N6x1?i4x\
看看目录里的文件,剩下了6个,这是什么意思呢?就是这6个文件里不含有特征码,由此可以说明,topo的特征码不止一处,有三处,而三处都相同才证明这是病毒,有一个不同都不算病毒,那么我们只要改一个地方就可以了。注意,这里是文件偏移,不是内存里的偏移,要转换,400相当于00401000,看一下特征码的位置,第一个和第二个在代码区,第三个在数据区,一般来说改代码区的容易些,因为数据区数据一改可能就会用不了,只要代码功能相同没有校验,代码改掉是没关系的。但是一看第二个位置,在文件的输入表上,这样就不好改了,输入表是不能随便改的,加上这段特征码可能是为了区分其它病毒用的,所以我们改第一个位置。
而第一个位置大小有20h(32字节)太大了,32字节有很多命令的,代码不好改,所以我们这次改成1,把大小缩成最小,再生成一次,。有人会问,为什么第一遍就改小点呢?因为第一遍是不知道位置在哪,是确定位置的,文件会生成很多的,效率不高,确定了位置后可以不全部覆盖所有文件,只覆盖你需要的区域,这样第二遍生成的文件可以少很多。同样,添加区段,这时只要添加第一区段,起始位置00000400,检测大小00000020,(只要这么小就够了,因为我们知道其它的地方是没有用的,不需要浪费时间),添加,确定,然后go,查毒,结果定位,呵呵,看到结果了吗? 'pe!}'y7x G'wuow
-------------定位结果------------ 序号 起始偏移 大小 结束偏移
a/`/AOh&NJ
0001 00000400 00000001 00000401 Iz a ^ u&M7q}
0002 00000402 00000003 00000405 \Y"U Up4H
3F[i[`)mZ
只有第1,3,4,5四个字节是特征码,(特征码可真短啊,难怪那么快)。所以,只要改掉前5个字节就行了。 V:DG.nh
topo12.exe的入口代码如下 *Q2sj{ xoc0?
00401000 >/$Content$nbsp;6A 00 push 0 ; /pModule = NULL
tYVfy ?
00401002 │. E8 690E0000 call <jmp.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA
v3?'D0u!{;^ [
00401007 │. A3 A0384000 mov dword ptr ds:[4038A0],eax ]7P[~)K n2p1J
lNd e%U+p
0040100C │. 6A 00 push 0 ; /lParam = NULL ,jiULwL$w
0040100E │. 68 2C104000 push topo12.0040102C ; │DlgProc = topo12.0040102C 'p?N.G __]~(`