📄 kill.txt
字号:
首先在config.sys中加载soft-ice,这是必需的。(我看应该给soft-ice的作者
颁发诺贝尔奖,这是个造福全人类的东西)
在命令行上运行ldr kill.exe,开始跟踪。
由于kill的加密特点,我们不需原来的钥匙盘既可解密。
打入G回车运行,当发生读软盘动作时马上按<ctrl>+D中断kill的运行,返回
soft-ice调试窗口,这时十有八九正处于读盘中断调用内。按若干次p键进行跟踪,
直到发现密钥判别的分支点,如何找到?这要靠你的经验、灵感和机会。
我所找到的分支点如下:(前面加了行号)
1 2A1B:0010 9A28058232 CALL 3282:0528 ;调用读密钥盘模块
2 2A1B:0015 59 POP CX
3 2A1B:0016 0BC0 OR AX,AX
4 2A1B:0018 7408 JZ 0022 ;如果不是密钥盘跳转
5 2A1B:001A C7066B500000 MOV WORD PTR [506B],0000
6 2A1B:0020 EB2F JMP 0051
为了验证一下这儿是不是分支点,可以把第4行改为JNZ 0022,打入G程序顺利
运行,说明找到的分支点是对的。
虽然改一个字节就可以,但这样改的话,程序每次运行都要读一下软盘,给人
以不太流畅的感觉。所以最终的改法如下:
1 2A1B:0010 POP CX
2 2A1B:0011 JMP 001A
3 2A1B:0016 OR AX,AX
4 2A1B:0018 JZ 0022
5 2A1B:001A MOV WORD PTR [506B],0000
6 2A1B:0020 JMP 0051
这样改后运行时就不读盘了。第一行的POP CX指令不可少,否则发生栈指针差
一个导致程序崩溃。
问题到这儿还没完,完善的加密系统是不会让你直接修改程序的。而是采用了
代码生成技术。上面那段代码在程序中是通过计算生成的,你要找到由哪段代码经
过怎样的计算才生成的这一段代码。这就要靠soft-ice的bpm 2a1b:0010来帮助了。
经过多次的bpm你会找到最终的目标如下:
AX=67E4 BX=179B CX=0001 DX=B81B SP=3062 BP=2DE8 SI=000E DI=000E
DS=1CBA ES=1CBA SS=39B2 CS=39B2 IP=2E7A
39B2:2E79 AD LODSW
39B2:2E7A 33C3 XOR AX,BX
39B2:2E7C 03C2 ADD AX,DX
:2E7E 83C325 ADD BX,+25
:2E81 83EA5B SUB DX,+5B
:2E84 AB STOSW
:2E85 E2F2 LOOP 2E79
1CBA:000E处的数据如下
1CBA:000E E4 67 85 B0 5F
算法有了,原始数据有了,且上述算法还是可逆的。怎么改就不用多说了。
kill是用Keymaker 3.0加密的,Keymaker的代码变换技术太简单,且还是
可逆的,不象bitlock,bitlock的代码变换是不可逆的,利用前一个字节生成
下一个字节。用bitlock加密的软件不可能直接修改,只能用脱壳的方法。
抛砖引玉,希望大家都来探讨一下hacker经验,要是每个人都会那么几手,
那可就......
F000:ec59 是 BIOS 的 INT40中断(也就是软盘中断)的入口.
不论程序如何调用(int13), 但是只要是读软盘, 最后都要到这里执行.
(除非自己编硬件程序, 但到现在还没有看到).
所以只要看住这里就不怕它(程序)闹翻天! :-)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -