怎样破解Autodesk AUTOCAD 14 法语版的狗加密
--------------------------------------------------------------------------------
translate by 梦醒时分
yinqun2000@263.net
http://t0db.myetang.com
级别:中级-高级
所需工具:
Soft ice 3.x
你自己最喜欢的 编辑器 (我一直用 Hexworkshop)
汇编知识 (至少是基础)
Wdasm89 (并不特别需要)
大脑 (你有一个 , 是吗 ? :p )
一些啤酒 :O ( 因为破解这个软件是要很长时间的!)
一些音乐 ;)
历史:
我是很久以前破解这个软件的... ;O
它对我来说很难,而且浪费了我几天时间.最难的部分就是找到检查狗的地方而且我不是用下面我
教你的方法做的!那是一种很复杂的方法...我很蠢的破解了它,而且还常常崩溃!几天前,我完成了
另一个注册机时觉得很烦.所以,我想到除了注册机的破解.那么那个狗保护的Autocad 14?!啊!那
是狗保护!我讨厌狗,而且在这方面几乎没有什么经验...
狗保护是最贵的保护方法,这个软件的售价是$7000左右!(够开一个网吧的了)
让我们来破解它吧:)
BTW,我用好方法破解它大概用了 2 小时 (包括 反汇编: 最长的部分 :p) 这期间没有死机 ;)
1)运行软件 :)
好的.. 让我们来看看这个目标,我安装这个软件非常慢.. 该死的光盘!假设它非常快吧!安装好后,找
到安装目录.有一个 Acad.exe 的可执行文件和其它很多dll文件...我运行这个软件,跳出一个对话框:
"ERREUR FATALE : Le system de securit?verrouillage materiel..."
这是法语, 意思是:
"FATAL ERROR : security system is missing! blablabla"
好的,它就是告诉我们最重要的硬件(*狗*)丢失!哈哈哈
那么... 让我们更深层的看看 ;) 我使用softice设置了在 LPT1上最常用的断点: (BPIO -H 378 R).
我们停在了这儿:
0028:CE5AA885 88442405 MOV
[ESP+05],AL ; 这儿.
0028:CE5AA889 66C746680100 MOV WORD PTR
[ESI+68],0001
0028:CE5AA88F 8A442405 MOV
AL,[ESP+05]
0028:CE5AA893 884615 MOV
[ESI+15],AL
0028:CE5AA896 884614 MOV
[ESI+14],AL
0028:CE5AA899 5E
POP ESI
0028:CE5AA89A 83C404 ADD
ESP,04
0028:CE5AA89D C3
RET
0028:CE5AA89E CC
INT 3
0028:CE5AA89F CC
INT 3
0028:CE5AA8A0 83EC04 SUB
ESP,04
0028:CE5AA8A3 56
PUSH ESI
0028:CE5AA8A4 8B74240C MOV
ESI,[ESP+0C]
0028:CE5AA8A8 56
PUSH ESI
0028:CE5AA8A9 E832000000 CALL
CE5AA8E0
0028:CE5AA8AE 668B465C MOV
AX,[ESI+5C]
0028:CE5AA8B2 83C404 ADD
ESP,04
0028:CE5AA8B5 6689442406 MOV [ESP+06],AX
0028:CE5AA8BA 8A4658 MOV
AL,[ESI+58]
0028:CE5AA8BD 243F AND
AL,3F
0028:CE5AA8BF 88442405 MOV
[ESP+05],AL
0028:CE5AA8C3 8A442405 MOV
AL,[ESP+05]
0028:CE5AA8C7 668B542406 MOV DX,[ESP+06]
0028:CE5AA8CC EE
OUT DX,AL
0028:CE5AA8CD 5E
POP ESI
0028:CE5AA8CE 83C404 ADD
ESP,04
0028:CE5AA8D1 C3
RET
我们是在 chat_to_dongle routine. 而且如果我们看下面的data部分,我们看到:SENTINELXXX...
这是什么啊?! 你应该知道有什么公司提供这种加狗的服务如: Hasp, Sentinel, DesKEY,
Activator/Unikey 还有许多其它的.
因此,我们可以推断碰到的是一个 SENTINEL 狗加密!我们现在在 SENTINEL.VXD 文件... 回到文章
中来,我们停在这儿:
0028:CE5AA885 88442405 MOV
[ESP+05],AL ; 这里..
0028:CE5AA889 66C746680100 MOV
WORD PTR [ESI+68],0001
0028:CE5AA88F 8A442405 MOV
AL,[ESP+05]
0028:CE5AA893 884615 MOV
[ESI+15],AL
0028:CE5AA896 884614 MOV
[ESI+14],AL
我们要看是关于可执行文件的CALL,所以我们要按三四次F12,我们会在这儿:
0028:CE5B35D6 50 PUSH
EAX
0028:CE5B35D7 55 PUSH
EBP
0028:CE5B35D8 57 PUSH
EDI
0028:CE5B35D9 E8D2FEFFFF CALL CE5B34B0
; 我们的 call :)
0028:CE5B35DE C06C241F01 SHR BYTE PTR [ESP+1F],01
;回到这儿.
0028:CE5B35E3 83C40C ADD ESP,0C
0028:CE5B35E6 0AD8 OR
BL,AL
0028:CE5B35E8 664E DEC
SI
0028:CE5B35EA 75E1 JNZ
CE5B35CD
0028:CE5B35EC C0EB01 SHR BL,01
0028:CE5B35EF 6A64 PUSH
64
0028:CE5B35F1 57 PUSH
EDI
0028:CE5B35F2 E8C979FFFF CALL CE5AAFC0
0028:CE5B35F7 8A44241B MOV AL,[ESP+1B]
0028:CE5B35FB 83C408 ADD ESP,08
0028:CE5B35FE 2401 AND
AL,01
0028:CE5B3600 50 PUSH
EAX
0028:CE5B3601 55 PUSH
EBP
0028:CE5B3602 57 PUSH
EDI
0028:CE5B3603 E8A8FEFFFF CALL CE5B34B0
0028:CE5B3608 83C40C ADD ESP,0C
0028:CE5B360B 0AD8 OR
BL,AL
0028:CE5B360D 66BE0300 MOV SI,0003
0028:CE5B3611 6A64 PUSH
64
0028:CE5B3613 C06C241701 SHR BYTE PTR [ESP+17],01
0028:CE5B3618 57 PUSH
EDI
在 CALL 中:
0028:CE5B35D6 50
PUSH EAX
0028:CE5B35D7 55
PUSH EBP
0028:CE5B35D8 57
PUSH EDI
0028:CE5B35D9 E8D2FEFFFF CALL
CE5B34B0
0028:CE5B35DE C06C241F01 SHR
BYTE PTR [ESP+1F],01
0028:CE5B35E3 83C40C ADD
ESP,0C
0028:CE5B35E6 0AD8
OR BL,AL
0028:CE5B35E8 664E
DEC SI
0028:CE5B35EA 75E1
JNZ CE5B35CD
0028:CE5B35EC C0EB01 SHR
BL,01
0028:CE5B35EF 6A64
PUSH 64
0028:CE5B35F1 57
PUSH EDI
0028:CE5B35F2 E8C979FFFF CALL
CE5AAFC0
0028:CE5B35F7 8A44241B MOV
AL,[ESP+1B]
0028:CE5B35FB 83C408 ADD
ESP,08
0028:CE5B35FE 2401
AND AL,01
0028:CE5B3600 50
PUSH EAX
0028:CE5B3601 55
PUSH EBP
0028:CE5B3602 57
PUSH EDI
0028:CE5B3603 E8A8FEFFFF CALL
CE5B34B0
0028:CE5B3608 83C40C ADD
ESP,0C
0028:CE5B360B 0AD8
OR BL,AL
0028:CE5B360D 66BE0300 MOV
SI,0003
0028:CE5B3611 6A64
PUSH 64
0028:CE5B3613 C06C241701 SHR
BYTE PTR [ESP+17],01
0028:CE5B3618 57
PUSH EDI
0028:CE5B3619 E8A279FFFF CALL
CE5AAFC0
0028:CE5B361E 83C408 ADD
ESP,08
0028:CE5B3621 C0EB01 SHR
BL,01
0028:CE5B3624 8A442413 MOV
AL,[ESP+13]
0028:CE5B3628 2401
AND AL,01
0028:CE5B362A 50
PUSH EAX
0028:CE5B362B 55
PUSH EBP
0028:CE5B362C 57
PUSH EDI
0028:CE5B362D E87EFEFFFF CALL
CE5B34B0
0028:CE5B3632 C06C241F01 SHR
BYTE PTR [ESP+1F],01
0028:CE5B3637 83C40C ADD
ESP,0C
0028:CE5B363A 0AD8
OR BL,AL
0028:CE5B363C 664E
DEC SI
0028:CE5B363E 75E1
JNZ CE5B3621
0028:CE5B3640 6A05
PUSH 05
0028:CE5B3642 80E380 AND
BL,80
0028:CE5B3645 68DF000000 PUSH
000000DF
0028:CE5B364A 57
PUSH EDI
0028:CE5B364B FF5718 CALL
[EDI+18]
0028:CE5B364E 83C40C ADD
ESP,0C
0028:CE5B3651 B900000000 MOV
ECX,00000000
0028:CE5B3656 80FB01 CMP
BL,01
0028:CE5B3659 5D
POP EBP
0028:CE5B365A 83D1FF ADC
ECX,-01
0028:CE5B365D 5F
POP EDI
0028:CE5B365E 6683E103 AND
CX,03
0028:CE5B3662 5E
POP ESI
0028:CE5B3663 668BC1 MOV
AX,CX
0028:CE5B3666 5B
POP EBX
0028:CE5B3667 83C404 ADD
ESP,04
0028:CE5B366A C3
RET
Ok,看看下面的代码并不能帮助我们什么 :( 我看过几篇关于狗加密的教程.我们做
的这几步,应该是已经完成了.我想,在CALL后面,会有一个关于狗的 CMP ,如果值是
和狗相同,那么就通过,否则就会加上一个错误的旗标...... 但是,我们是不幸运的,
这里不是那么简单!的.通过和代码游戏(跟踪call,寻找一些比较的代码),我按很多
次 F12 ,但是找不到一点好东西!
BTW,我无从这该死的Sentinel的VXD中出来!按住 F12,可是什么都没有变!VDX使我
陷入困境了......我希望回到 Acad.exe 文件中!我不希望破解狗硬件,大多数的时候,
狗保护的弱点一般都是在目标本身!
我试了 BPIO -h 378 R
让我们在 I/O-port 上试试其它的断点 :
378 已经试过了
3BC 这个 ;)
278 这个也是 ;o)
OK,运行软件,但是却没有拦截 ;( 我的天啊!
因为它是一个 VDX ,所以我也试了 bpx CreateFileA ,但是走不了多久......
那么,为什么不反汇编它呢?运气好说不定能找到一些在字符串中找到一些关于出错
的信息(不要做梦了,那是不可能有的!!:p)现在你能用工具中的啤酒了 ;) 因为我们
要花很长时间去反汇编!!!! 那就是我为什么不用IDA的原因了! BTW, 我们的目标可
执行文件大概是 7.24 mb!好了,现在你知道为什么要花这么多时间了吧..
喝过酒后,一觉醒来.
经过这么长的时间,终于反汇编好了! 首先,保存结果!我们不希望再等那么多时间,不是
吗?如果你的电脑死机或者其它原因,你只有再等那么多时间了!再喝一次酒,呵呵!
完了吗? Ok!
我们愚蠢的想法是去找字符串,运气不佳,没有,其实是意料之中 :p 那么让我们想想!
我们怎样攻击它呢? 我们看看 Import 表吧!看看狗到底调用了什么函数 :) 我们可以找
到一个 "l33t0" API 函数!哈哈,我想会有一些好东西了, 我们来看看内核......
太太太好了 :) 我找到一些有趣的东西了:
DeviceIoControl
从没有看过,但是名称,听起来非常好,不是吗?
呵呵!去除所有的断点只在softice中输入: 'bc *' 和: 'BPX DeviceIocontrol'
现在运行我们的软件! 哈哈,它拦截下来了 :) 按F12,我们跳出了dll文件来到了ACAD.exe
:) 让我们和代码玩耍吧.......
先看代码, 我按F12几次直到在一个好位置.下面是来自我的winice.log 的一部分:
:bl
00) BPX KERNEL32!DeviceIoControl // Damn good :)
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
Break due to BPX KERNEL32!DeviceIoControl
// 你在这可以看到我在找到好地方之前被拦截下来多少次
// 你用这个 bpx 的时候,你按 F5 3 次,一会有拦截下来,
// 你再按两次后停在了这儿 :
025F:0098B1AF 668B442402 MOV AX,[ESP+02]
; EAX = 一些值
025F:0098B1B4 83C404 ADD
ESP,04
025F:0098B1B7 C20800 RET
0008
025F:0098B1BA 8D9B00000000 LEA EBX,[EBX+00000000]
025F:0098B1C0 33C0 XOR
EAX,EAX
025F:0098B1C2 8A442408 MOV AL,[ESP+08]
025F:0098B1C6 83F801 CMP
EAX,01
025F:0098B1C9 7415 JZ
0098B1E0
025F:0098B1CB 83F802 CMP
EAX,02
025F:0098B1CE 7456 JZ
0098B226
025F:0098B1D0 83F803 CMP
EAX,03
025F:0098B1D3 0F8497000000 JZ 0098B270
025F:0098B1D9 C20800 RET
0008
// 通过 RET 后,我们落在这儿:
025F:006ABE9A 0FBFC0 MOVSX
EAX,AX ; 呵呵 :)
025F:006ABE9D 83F8FF CMP
EAX,-01 ; EAX = FFFF ?!
025F:006ABEA0 7405
JZ 006ABEA7 ; 跳转到 6abea7
025F:006ABEA2 25FFFF0000 AND
EAX,0000FFFF
025F:006ABEA7 5F
POP EDI
025F:006ABEA8 C3
RET ; 返回 ....
// 这是最重要的部分 :
025F:006ABD94 83C404 ADD
ESP,04
025F:006ABD97 85C0
TEST EAX,EAX
025F:006ABD99 7C36
JL 006ABDD1
025F:006ABD9B 8D44240C LEA
EAX,[ESP+0C]
025F:006ABD9F 50
PUSH EAX
025F:006ABDA0 E8DB000000 CALL
006ABE80
025F:006ABDA5 83C404 ADD
ESP,04
025F:006ABDA8 85C0
TEST EAX,EAX
025F:006ABDAA 7C25
JL 006ABDD1
025F:006ABDAC 686071A700 PUSH
00A77160
025F:006ABDB1 E8CA000000 CALL
006ABE80
025F:006ABDB6 83C404 ADD
ESP,04
025F:006ABDB9 85C0
TEST EAX,EAX
025F:006ABDBB 7C14
JL 006ABDD1
025F:006ABDBD 68F470A700 PUSH
00A770F4
025F:006ABDC2 E8B9000000 CALL
006ABE80
025F:006ABDC7 83C404 ADD
ESP,04
025F:006ABDCA 3DFDDC0000 CMP
EAX,0000DCFD ; eax= DCFD?
025F:006ABDCF 7408
JZ 006ABDD9 ; 好! 狗
025F:006ABDD1 47
INC EDI ; 锁住了 :)
025F:006ABDD2 83FF04 CMP
EDI,04
025F:006ABDD5 7EA3
JLE 006ABD7A
025F:006ABDD7 EB17
JMP 006ABDF0 ; 知道吗?
025F:006ABDD9 8B0D8871A700 MOV
ECX,[00A77188] ;狗在这儿
025F:006ABDDF 6633F6 XOR
SI,SI
025F:006ABDE2 A18471A700 MOV
EAX,[00A77184]
025F:006ABDE7 8B1481 MOV
EDX,[EAX*4+ECX]
025F:006ABDEA C70202000000 MOV
DWORD PTR [EDX],00000002
025F:006ABDF0 8B0D8471A700 MOV
ECX,[00A77184] ;没有狗:/
025F:006ABDF6 A18871A700 MOV
EAX,[00A77188]
025F:006ABDFB 8B1488 MOV
EDX,[ECX*4+EAX]
025F:006ABDFE 8D0C88 LEA
ECX,[ECX*4+EAX]
025F:006ABE01 8B1D8471A700 MOV
EBX,[00A77184]
025F:006ABE07 8B02
MOV EAX,[EDX]
025F:006ABE09 35A9B50000 XOR
EAX,0000B5A9
025F:006ABE0E 03C3
ADD EAX,EBX
025F:006ABE10 A3A471A700 MOV
[00A771A4],EAX
025F:006ABE15 8B11
MOV EDX,[ECX]
025F:006ABE17 833A00 CMP
DWORD PTR [EDX],00
025F:006ABE1A 752F
JNZ 006ABE4B
025F:006ABE1C E81F010000 CALL
006ABF40
025F:006ABE21 35A9B50000 XOR
EAX,0000B5A9
025F:006ABE26 3D564AFFFF CMP
EAX,FFFF4A56
025F:006ABE2B 741E
JZ 006ABE4B
--------------------------- 8< ---------------------- 截取 :p
Ok,我首先想到的是改变:
025F:006ABDCA 3DFDDC0000 CMP EAX,0000DCFD ;
是 eax= DCFD ?
025F:006ABDCF 7408 JZ
006ABDD9 ; 好的! 狗锁住了
成为:
025F:006ABDCA 3DFDDC0000 CMP EAX,0000DCFD
025F:006ABDCF EB08 JMP 006ABDD9
;不管 EAX 了,我跳 :p
但是,EAX 的值很重要,否则是会崩溃的:( 我们也看到了很多处都调用了 EAX 寄存器
,检查了好几次哦!那么,我们只有暴力使 EAX 的值等于 DCFD 了!
你还不清除吗,新手?EAX的值为什么要等于 DCFD?你没看到:CMP EAX,0000DCFD
吗?先在大家都清楚了吧!
我们到哪去修改目标呢?想想什么时候对 AX 赋值的?我清理一下内存,整理出下面这段
代码:
025F:0098B1AF 668B442402 MOV AX,[ESP+02]
; EAX = 一些值.
025F:0098B1B4 83C404 ADD
ESP,04
025F:0098B1B7 C20800 RET
0008
025F:0098B1BA 8D9B00000000 LEA EBX,[EBX+00000000]
025F:0098B1C0 33C0 XOR
EAX,EAX
025F:0098B1C2 8A442408 MOV AL,[ESP+08]
025F:0098B1C6 83F801 CMP
EAX,01
025F:0098B1C9 7415 JZ
0098B1E0
025F:0098B1CB 83F802 CMP
EAX,02
025F:0098B1CE 7456 JZ
0098B226
025F:0098B1D0 83F803 CMP
EAX,03
025F:0098B1D3 0F8497000000 JZ 0098B270
025F:0098B1D9 C20800 RET
0008
'是的!就是你说过的那个地方! *SLAP*!!
呵呵,我们只要使EAX的值永远等于DCFD就行了,代码就变成:
66B8FDDC MOV AX,DCFD ; 你知道这是干什么,对吗? ;)
90 NOP
; 一个 NOP 就是什么都不干!
C20800 RET 0008 ; 不变
Ok,很简单吧? BTW 当你修改的时候不要忘了把代码倒一下,比如: B8FDCD 是 CDFD,
你应该知道我是什么意思,对吗?不??
现在给你的目标打上补丁,运行试试看!
下面就是说软件破解的非常成功,我就不翻译了.
原文作者:ACiD BuRN [ECLiPSE / Immortal Descendants]
-=-=-=-=-=-=-=-=-=-=-=-[EOF]-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=梦经第四期-=-=-=-=-=-=-=-
- 标 题:转帖【梦醒时分t0db.myetang.com】翻译的:【破解Autodesk AUTOCAD 14 狗加密 】 (15千字)
- 作 者:toye
- 时 间:2000-10-22 20:58:51
- 链 接:http://bbs.pediy.com