首页
社区
课程
招聘
[分享]破解开目CAD(菜鸟破狗,高手莫入)
发表于: 2005-1-28 16:39 11529

[分享]破解开目CAD(菜鸟破狗,高手莫入)

2005-1-28 16:39
11529
引言:单位有一个正版开目CAD软件,版本较低,用软件狗保护,同事想用但只有一只狗,不太方便.正好本人闲着没事拿来练手,此文没什么技术含量,高手莫入.

一、破解目标:开目CAD 3.6
二、破解工具:OllyDbg V1.10
三、破解人:DarkBull@email.com.cn
四、破解过程:
1.该软件采用了加密狗保护形式,查看说明使用了HASP和SENSE3两种狗,用OLLYDBG载入,查找字符串参考,发现有“\\.\SENSE3Dev”,在调用处下断点,拦截后代码如下:
0070DA2E  |> \6A 00    PUSH 0                                ; /hTemplateFile = NULL; Case 2 of switch 0070DA07
0070DA30  |.  6A 00    PUSH 0                                ; |Attributes = 0
0070DA32  |.  6A 03    PUSH 3                                ; |Mode = OPEN_EXISTING
0070DA34  |.  6A 00    PUSH 0                                ; |pSecurity = NULL
0070DA36  |.  6A 01    PUSH 1                                ; |ShareMode = FILE_SHARE_READ
0070DA38  |.  68 00000>PUSH 80000000                         ; |Access = GENERIC_READ
0070DA3D  |.  68 60407>PUSH Km.00744060                      ; |FileName = "\\.\SENSE3Dev"
0070DA42  |.  FF15 60E>CALL NEAR DWORD PTR DS:[<&KERNEL32.Cr>; \CreateFileA
0070DA48  |.  83F8 FF  CMP EAX,-1                             ; 返回设备句柄
0070DA4B      75 18    JNZ SHORT Km.0070DA65                     ; 成功则跳
0070DA4D      8B8424 9>MOV EAX,DWORD PTR SS:[ESP+98]
0070DA54  |.  66:C740 >MOV WORD PTR DS:[EAX+5A],8
0070DA5A  |.  66:B8 01>MOV AX,1
0070DA5E  |.  81C4 940>ADD ESP,94
0070DA64  |.  C3       RETN
2.执行到返回,继续单步跟踪,见如下代码:
0070686F  /$  55       PUSH EBP
00706870  |.  8BEC     MOV EBP,ESP
00706872  |.  C705 E04>MOV DWORD PTR DS:[804FE0],1
0070687C  |.  68 38508>PUSH Km.00805038                      ; /Arg9 = 00805038
00706881  |.  68 34508>PUSH Km.00805034                      ; |Arg8 = 00805034
00706886  |.  68 30508>PUSH Km.00805030                      ; |Arg7 = 00805030
0070688B  |.  68 2C508>PUSH Km.0080502C                      ; |Arg6 = 0080502C
00706890  |.  A1 1C337>MOV EAX,DWORD PTR DS:[74331C]         ; |
00706895  |.  50       PUSH EAX                              ; |Arg5 => 00003760
00706896  |.  8B0D 183>MOV ECX,DWORD PTR DS:[743318]         ; |
0070689C  |.  51       PUSH ECX                              ; |Arg4 => 00003F8F
0070689D  |.  8B15 505>MOV EDX,DWORD PTR DS:[805050]         ; |
007068A3  |.  52       PUSH EDX                              ; |Arg3 => 00000000
007068A4  |.  A1 40508>MOV EAX,DWORD PTR DS:[805040]         ; |
007068A9  |.  50       PUSH EAX                              ; |Arg2 => 00000000
007068AA  |.  8B0D E04>MOV ECX,DWORD PTR DS:[804FE0]         ; |
007068B0  |.  51       PUSH ECX                              ; |Arg1 => 00000028
007068B1  |.  E8 2B4F0>CALL Km.0070B7E1                      ; \Km.0070B7E1
007068B6  |.  83C4 24  ADD ESP,24
007068B9  |.  833D 345>CMP DWORD PTR DS:[805034],-64         ;  计算结果1
007068C0      74 16    JE SHORT Km.007068D8                  ;  破解点1(不能跳)
007068C2  |.  833D 345>CMP DWORD PTR DS:[805034],-65
007068C9  |.  74 0D    JE SHORT Km.007068D8
007068CB  |.  833D 345>CMP DWORD PTR DS:[805034],-66
007068D2  |.  0F85 A60>JNZ Km.0070697E
007068D8  |>  833D 345>CMP DWORD PTR DS:[805034],-64
007068DF  |.  75 13    JNZ SHORT Km.007068F4
007068E1  |.  68 743D7>PUSH Km.00743D74                      ; /format = "HASP Device Driver not installed."
007068E6  |.  68 E44F8>PUSH Km.00804FE4                      ; |s = Km.00804FE4
007068EB  |.  FF15 BCE>CALL NEAR DWORD PTR DS:[<&MSVCRT.spri>; \sprintf
007068F1  |.  83C4 08  ADD ESP,8
007068F4  |>  833D 345>CMP DWORD PTR DS:[805034],-65
007068FB  |.  75 13    JNZ SHORT Km.00706910
007068FD  |.  68 983D7>PUSH Km.00743D98                      ; /format = "Can't read from HASP Device Driver."
00706902  |.  68 E44F8>PUSH Km.00804FE4                      ; |s = Km.00804FE4
00706907  |.  FF15 BCE>CALL NEAR DWORD PTR DS:[<&MSVCRT.spri>; \sprintf
0070690D  |.  83C4 08  ADD ESP,8
00706910  |>  833D 345>CMP DWORD PTR DS:[805034],-66
00706917  |.  75 13    JNZ SHORT Km.0070692C
00706919  |.  68 BC3D7>PUSH Km.00743DBC                      ; /format = "Can't close HASP Device Driver."
0070691E  |.  68 E44F8>PUSH Km.00804FE4                      ; |s = Km.00804FE4
00706923  |.  FF15 BCE>CALL NEAR DWORD PTR DS:[<&MSVCRT.spri>; \sprintf
00706929  |.  83C4 08  ADD ESP,8
0070692C  |>  C705 385>MOV DWORD PTR DS:[805038],0
00706936  |.  8B15 385>MOV EDX,DWORD PTR DS:[805038]
0070693C  |.  8915 345>MOV DWORD PTR DS:[805034],EDX
00706942  |.  A1 34508>MOV EAX,DWORD PTR DS:[805034]
00706947  |.  A3 30508>MOV DWORD PTR DS:[805030],EAX
0070694C  |.  8B0D 305>MOV ECX,DWORD PTR DS:[805030]
00706952  |.  890D 2C5>MOV DWORD PTR DS:[80502C],ECX
00706958  |.  C705 044>MOV DWORD PTR DS:[804804],0C
00706962  |.  C705 3C5>MOV DWORD PTR DS:[80503C],0
0070696C  |.  C705 084>MOV DWORD PTR DS:[804808],0
00706976  |.  83C8 FF  OR EAX,FFFFFFFF
00706979  |.  E9 F8010>JMP Km.00706B76
0070697E  |>  833D 2C5>CMP DWORD PTR DS:[80502C],0             
00706985      75 5B    JNZ SHORT Km.007069E2                      ; 破解点2(应该跳)
00706987  |.  68 DC3D7>PUSH Km.00743DDC                      ; /format = "HASP not found !"
0070698C  |.  68 E44F8>PUSH Km.00804FE4                      ; |s = Km.00804FE4
00706991  |.  FF15 BCE>CALL NEAR DWORD PTR DS:[<&MSVCRT.spri>; \sprintf
00706997  |.  83C4 08  ADD ESP,8
0070699A  |.  C705 385>MOV DWORD PTR DS:[805038],0
007069A4  |.  8B15 385>MOV EDX,DWORD PTR DS:[805038]
007069AA  |.  8915 345>MOV DWORD PTR DS:[805034],EDX
007069B0  |.  A1 34508>MOV EAX,DWORD PTR DS:[805034]
007069B5  |.  A3 30508>MOV DWORD PTR DS:[805030],EAX
007069BA  |.  8B0D 305>MOV ECX,DWORD PTR DS:[805030]
007069C0  |.  890D 2C5>MOV DWORD PTR DS:[80502C],ECX
007069C6  |.  C705 3C5>MOV DWORD PTR DS:[80503C],0
007069D0  |.  C705 084>MOV DWORD PTR DS:[804808],0
007069DA  |.  83C8 FF  OR EAX,FFFFFFFF
007069DD  |.  E9 94010>JMP Km.00706B76
007069E2  |>  C705 E04>MOV DWORD PTR DS:[804FE0],5
007069EC  |.  68 38508>PUSH Km.00805038                      ; /Arg9 = 00805038
007069F1  |.  68 34508>PUSH Km.00805034                      ; |Arg8 = 00805034
007069F6  |.  68 30508>PUSH Km.00805030                      ; |Arg7 = 00805030
007069FB  |.  68 2C508>PUSH Km.0080502C                      ; |Arg6 = 0080502C
00706A00  |.  8B15 1C3>MOV EDX,DWORD PTR DS:[74331C]         ; |
00706A06  |.  52       PUSH EDX                              ; |Arg5 => 00003760
00706A07  |.  A1 18337>MOV EAX,DWORD PTR DS:[743318]         ; |
00706A0C  |.  50       PUSH EAX                              ; |Arg4 => 00003F8F
00706A0D  |.  8B0D 505>MOV ECX,DWORD PTR DS:[805050]         ; |
00706A13  |.  51       PUSH ECX                              ; |Arg3 => 00000000
00706A14  |.  8B15 405>MOV EDX,DWORD PTR DS:[805040]         ; |
00706A1A  |.  52       PUSH EDX                              ; |Arg2 => 00000000
00706A1B  |.  A1 E04F8>MOV EAX,DWORD PTR DS:[804FE0]         ; |
00706A20  |.  50       PUSH EAX                              ; |Arg1 => 00000028
00706A21  |.  E8 BB4D0>CALL Km.0070B7E1                      ; \Km.0070B7E1
00706A26  |.  83C4 24  ADD ESP,24
00706A29  |.  8B0D 305>MOV ECX,DWORD PTR DS:[805030]         ;  计算结果2
00706A2F  |.  8B148D F>MOV EDX,DWORD PTR DS:[ECX*4+7432F4]
00706A36  |.  52       PUSH EDX                              ; |format
00706A37  |.  68 E44F8>PUSH Km.00804FE4                      ; |s = Km.00804FE4
00706A3C  |.  FF15 BCE>CALL NEAR DWORD PTR DS:[<&MSVCRT.spri>; \sprintf
00706A42  |.  83C4 08  ADD ESP,8
00706A45  |.  833D 345>CMP DWORD PTR DS:[805034],0
00706A4C  |.  0F85 BE0>JNZ Km.00706B10
........  ***************************************************; 省略部分代码
00706B10  |>  833D 345>CMP DWORD PTR DS:[805034],0
00706B17  |.  75 58    JNZ SHORT Km.00706B71
00706B19  |.  68 F03D7>PUSH Km.00743DF0                      ; /format = "Incorrect Password"
00706B1E  |.  68 E44F8>PUSH Km.00804FE4                      ; |s = Km.00804FE4
00706B23  |.  FF15 BCE>CALL NEAR DWORD PTR DS:[<&MSVCRT.spri>; \sprintf
00706B29  |.  83C4 08  ADD ESP,8
00706B2C  |.  C705 385>MOV DWORD PTR DS:[805038],0
00706B36  |.  A1 38508>MOV EAX,DWORD PTR DS:[805038]
00706B3B  |.  A3 34508>MOV DWORD PTR DS:[805034],EAX
00706B40  |.  8B0D 345>MOV ECX,DWORD PTR DS:[805034]
00706B46  |.  890D 305>MOV DWORD PTR DS:[805030],ECX
00706B4C  |.  8B15 305>MOV EDX,DWORD PTR DS:[805030]
00706B52  |.  8915 2C5>MOV DWORD PTR DS:[80502C],EDX
00706B58  |.  C705 3C5>MOV DWORD PTR DS:[80503C],0
00706B62  |.  C705 084>MOV DWORD PTR DS:[804808],0
00706B6C  |.  83C8 FF  OR EAX,FFFFFFFF
00706B6F  |.  EB 05    JMP SHORT Km.00706B76
00706B71  |>  B8 79000>MOV EAX,79
00706B76  |>  5D       POP EBP
00706B77  \.  C3       RETN
3.返回后代码如下:
007053C1  |.  A2 00468>MOV BYTE PTR DS:[804600],AL
007053C6  |.  0FBE15 0>MOVSX EDX,BYTE PTR DS:[804600]
007053CD  |.  83FA 79  CMP EDX,79
007053D0      75 16    JNZ SHORT Km.007053E8
007053D2  |.  E8 BD040>CALL Km.00705894                             ; 进一步验证
007053D7  |.  8945 F0  MOV [LOCAL.4],EAX
007053DA  |.  837D F0 >CMP [LOCAL.4],-1
007053DE      75 08    JNZ SHORT Km.007053E8                 ; 破解点3
007053E0  |.  83C8 FF  OR EAX,FFFFFFFF
007053E3  |.  E9 B8020>JMP Km.007056A0
4.将上述三个点改为相反指令即可。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 292
活跃值: (110)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
支持你!
2005-1-28 16:47
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,带着狗跟踪一遍就什么都明白了
2005-1-28 17:16
0
游客
登录 | 注册 方可回帖
返回
//