找回密码
 注册
搜索
热搜: 回贴

KV300解密一法探讨(4千字),KV300,其他平台

2010-1-30 18:32| 发布者: admin| 查看: 145| 评论: 0|原作者: 段誉


KV300解密一法探讨(4千字),KV300,其他平台
2008年06月23日 星期一 下午 11:29
下面是我翻出来的东西,没什么水平,不过还是有趣。

第一篇是文物级的文章了:KV300的破解。当时破解kv300用了两种方法,一种是写“unkv”程序用来做key盘,步骤繁琐,没写文章。另一种是直接破程序,写出了步骤,当时放在自己主页上,后来主页没了,也就放一边了。现在一读真是晕倒,写这么详细……



KV300解密一法探讨

KV300分两个版本:KV300 和KV300 版本,加密方式不同,这里以KV300 版为例。目前国产杀毒软件中,除了KILL认证版、瑞星,KV300算比较大众化一点。KV300的加密比较狠,做一张完善的KEY盘比较困难,用双星磁盘分析工具扫描一下正版磁盘就知道最后约有10多个磁道是非正常磁道,即加密磁道,上面记录的检测数据(密钥)要复制出来也比较困难。但解密某一个升级版本很容易,只是解密限于一个版本。许多流传的解密版本就这样做的。我用目前最新的Z12版进行解密。解密版您可以在资源共享里下载(使用时需要在A驱里插入一张软磁盘。运行时可能提示软盘有引导区病毒,不必理睬,因为不是KEY盘),这里特别声明:您自由下载解密版,我不收取任何费用,没有商业性的赢利性质,所以不存在盗版问题。官司我可吃不起哦!我只是纯技术性的探讨。如果您觉得有问题,请给我留言或是写信。以下是解密过程:



运行softice 3.23,载入Windows 98,然后开一个DOS窗口。按Ctril-D切入softice,键入如下指令:



wl

wr

wd

bpint 13



然后按Ctrl-D切换到DOS窗口,运行KV300:



D:\kv300\>kv300



当KV300调用中断13H时被softice截住并自动切换到softice调试界面。查看被截住的这段KV300代码,只是读引导区、检查引导区有无病毒。按Ctrl-↓往下找,发现这段代码:



1EE8:C1C0 CALL 2E6A:52D2

1EE8:C1C5 JMP BYTE PTR [D76C],70

1EE8:C1CA JA C1DC

1EE8:C1CC CMP BYTE PTR [D76C],30

1EE8:C1D1 JB C1DC

1EE8:C1D3 MOV AX,33FF

1EE8:C1D6 CALL 2E6A:2563

1EE8:C1DB RET

1EE8:C1DC MOV AX,F000

……



它先调2E6A:52D2子程序,然后检查[D76C]处的一个字节是否在30H与70H之间,否则跳转1EE8:C1DC执行。经过简单的试验就知道2E6A:2563是正常的杀毒界面入口,而1EE8:C1DC则是进一步检查加密磁道的代码入口(分析这段代码有助于制作KEY盘,不过比较烦琐,它要读大约6个左右加密磁道上的密钥来验证是否为原盘,甚至有一段代码绕过了BIOS调用而直接用原始的IN、OUT指令来读盘,我们寂然不做KEY盘,完全可以不理睬这段代码)。关键的跳转分支已经找到了,现在需要修改程序屏蔽读比较密钥一节。最简单的改法是将1EE8:C1D1的JB C1DC改为JB C1D3,直接跳入正常的杀毒入口代码。好,来个code on显示机器码:



code on

……

1EE8:C1CC 803E6CD730 CMP BYTE PTR [D76C],30

1EE8:C1D1 7209 JB C1DC

……



输入汇编指令JB C1D3,看机器码是什么:



A C1D1

JB C1D3



得到:



1EE8:C1D1 7200 JB C1D3



这样,将机器码7209改为7200即可。那是否立马取KV300.EXE中找代码“803E6CD7307209”呢?我找过,找不到的!因为还有暗桩,这段代码本身被加了密存放的,运行时这段代码在内存中被解密。我们再用逆推法找解密这段代码的程序段。继续在softice中下指令:



bc *

bpmb 1EE8:C1D1

bd *



然后Ctrl-D退到DOS窗口后再Ctrl-D切换到softice,将断点许可:be *,而后切换到DOS窗口中运行KV300。



D:\kv300\>kv300



运行中会被softice截住几次,每次截住时用 d ES:EDI 指令查看数据区,如找不到JB C1DC的机器码(“7209”)就继续,直到找到为止。大约截住3次后,可以看到这段代码:



……

6803:0069

SHR BP,1

DEC DX

JNZ 73

LODSW

MOV DL,10

JAE 78

MOVSB

JMP 69

6803:0078

……



现在用 d ES:EDI 指令可以看到“7209”了。不过看这段代码只是数据转移,没有实质性的解密工作。用 d DS:ESI 显示“7209”机器码位于地址DS:5098,softice中下指令:



bc *

bpmb DS:5098

exit



在DOS窗口中再次运行KV300。这次在6803:0050处:



……

MOV SI,AX

MOV DI,AX

REPZ MOVSW

……



还是只是转移数据。用d DS:ESI 显示出“7209”地址位于1700:2558处。下指令:



bc *

bpmb 1700:2558

exit



在DOS窗口下再次运行KV300,这次softice在3867:3136处截住这段代码:



LODSW

XOR AX,BX

ADD AX,DX

SUB DX,5B

STOSW

LOOP 3136



呵呵,一段很典型的解码程序啊。注意到解码时DS=ES,ESI=EDI,所以数据在原位地址变换。截住在LODSW代码之后,此时AX中已装入内存中的一个字,即将要解码的字。AX=930A,按F8单步执行,具体数值是这样的:



XOR AX,434

ADD AS,7034



此时AX=0972,倒过来不就是我们要找的“7209”吗?显然,解码公式是:(930A 异或 0434) 7234 = 0972。我们要得到“0072”的结果,可设未解码前的数为X,则有:( X 异或 0434) 7234 = 0072,故 X = (0072 - 7234) 异或 0434,计算(Windows提供的计算器派上用场)得到X=8A0A,即将原码的“0A93”改为“0A8A”就大功告成,实际上只改动一个字节。用d DS:ESI命令显示内存中未解码前的数据:“0A931F8644BA”,记下来。现在可以改KV300.EXE文件了!我没有uedit,没关系,用DOS的pctools也行,pctools不认识C:盘的32位FAT,将它拷贝到软磁盘,同时将KV300.EXE也拷贝到软磁盘,软磁盘是16位FAT,所以pctools可以运行,用find功能找出“0A931F8644BA”串的位置,将“93”改为“8A”存盘。运行修改后的KV300.EXE,只要在A:驱里任意插一张软磁盘,它都当是KEY盘而顺利进入杀毒界面。


最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 11:41 , Processed in 0.229834 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部