• 标 题:2字节破解cad2002中文网络版[网络验证及限制用户] (30千字)
  • 作 者:La0Qian
  • 时 间:2003-10-18
  • 链 接:http://bbs.pediy.com


软件名称: AUTOcad2002中文版网络版 
软件类别: 地球人都知道 
软件介绍:地球人都知道 Flexlm7.1f加密
破解工具:ollydbg 1.09d ,w32Dasm_2002828_pll621,C32ASM_pll621,UltraEdit8.0, 
破解目的:无限制使用(爆破)

    AUTOcadR14中文版大家都很熟悉了吧,不多说。我从上海回来,又开始画图了,一年没干活,单位的软件都变成正版了,哈哈。可是AUTOcadR14中文版是网络版,我们只买20个点,一个点多少钱不知道(我们还买了cad2002网络版是20个点,一个点10000多元啊!),想来不少。因此,我上晚了点数满了,就会进不去,提示网络不许可,TMD!看看cad2002是Flexlm加密的,我功力太浅,那我就先拿R14开刀! 
    上面是我的AUTOcadR14中文版破文里的。R14之后,现在我终于向cad2002开刀了。
    CAD2002,Flexlm7.1f加密,我想也能爆破吧,我没有能力做他的无限制license。也因为,我觉得作了也没用,为什么?你看,一个单位买一套网络版,就是自己单位专用的,上面都有安装序列号和单位信息,就是作了无限制license,自己也不敢用,怕被查,给别人用那就更不敢了,也不能啊。当然做无限制license的方法应该是可以放出的,但CAD2002加密不使用标准的Flexlm的Dll,它的lc_checkout断点就找不到了,我的功力太浅,这里先抛砖引玉吧,其实我也隐约找到了一些有用地方,留待以后吧。
    爆破在这里也是一种破解,对吧?开工。
    先反汇编acad.EXE,找找可疑点。好长时间啊,我的机子是P4 1.6,用了10多分钟。大略看看,没什么有用的。但还是没白费。因为我按我上篇破文的思路,找到了一些提示,对我下断点有用。
    还是用Ollydbg1.09d。这次我们先不拔掉网线(我们早知拔掉网线就肯定不能通过cad验证了)。幸亏是P4,进去了。设什么断点呢?不知道,我倒! 
    因为我们上次就知道拔掉网线后,它还要去网络验证,可是没有网络,它会多试几次,这就给了我们时间,我们运行它,看它在那里有短暂的停顿,那里就是验证的地方!而这次我们不拔掉网线!为什么?反汇编还是有用的,这次我不看运气了。我们找到了许多和AUTOcadR14.01中文版相似的地方,就在那附近设断。只要在Flex license窗口出来之前中断,我们就可以了,当然离关键地方越近越好了。
    Ollydbg设断很方便的, 其实我差不多一次就中断成功!
    通过分析反汇编,断点设在005BCB5A,因为我有R14的经验,其实也是误打误撞啦,哈哈。
    我们来到下面这个CALL,调试中多少次重启动,我记不清了,Ollydbg好像还是不太稳定,美中不足!也可能是我开的程序窗口太多,Ollydbg就很站地方了,还有w32Dasm,UltraEdit8.0,计算器,128M内存吃不消啦。对了还有开了pll621的C32ASM,他的查询机器码的东东很好,虽然Ollydbg也有,但是麻烦。别的还没来得及用,以后慢慢来啦。


005BCB10  /$ 55             PUSH EBP
005BCB11  |. 8BEC           MOV EBP,ESP
005BCB13  |. 51             PUSH ECX
005BCB14  |. 8B15 1C67AC00  MOV EDX,DWORD PTR DS:[AC671C]
005BCB1A  |. A1 1867AC00    MOV EAX,DWORD PTR DS:[AC6718]
005BCB1F  |. 83C2 3B        ADD EDX,3B
005BCB22  |. 56             PUSH ESI
005BCB23  |. 8915 1C67AC00  MOV DWORD PTR DS:[AC671C],EDX
005BCB29  |. 8B88 EC000000  MOV ECX,DWORD PTR DS:[EAX+EC]
005BCB2F  |. BE A02EAC00    MOV ESI,ACAD.00AC2EA0
005BCB34  |. 8B11           MOV EDX,DWORD PTR DS:[ECX]
005BCB36  |. 81EE 94000000  SUB ESI,94
005BCB3C  |. 81F2 A9B50000  XOR EDX,0B5A9
005BCB42  |. 83C2 3B        ADD EDX,3B
005BCB45  |. 8915 1C67AC00  MOV DWORD PTR DS:[AC671C],EDX
005BCB4B  |. 8B80 EC000000  MOV EAX,DWORD PTR DS:[EAX+EC]
005BCB51  |. 8338 00        CMP DWORD PTR DS:[EAX],0
005BCB54  |. 0F85 A5000000  JNZ ACAD.005BCBFF
005BCB5A  |. 6A 00          PUSH 0                   我们在这里break!!设断点
005BCB5C  |. E8 EFF5FFFF    CALL ACAD.005BC150    ;进去看看(注:我在这里白费了心思,这是后话了)
我们F7进去一看
005BCB61  |. 35 A9B50000    XOR EAX,0B5A9         看到b5a9,我们在上面的call前这里设断吧
005BCB66  |. 83C4 04        ADD ESP,4
005BCB69  |. 3D 564AFFFF    CMP EAX,FFFF4A56     看到FFFF4A56,我们在上面的call前这里设断吧
005BCB6E  |. 0F84 8B000000  JE ACAD.005BCBFF     ;和cadR14的差不多吧
005BCB74  |. 3D 574AFFFF    CMP EAX,FFFF4A57
005BCB79  |. 66:C705 F067AC>MOV WORD PTR DS:[AC67F0],0
005BCB82  |. 75 07          JNZ SHORT ACAD.005BCB8B
005BCB84  |. 32C0           XOR AL,AL
005BCB86  |. 5E             POP ESI
005BCB87  |. 8BE5           MOV ESP,EBP
005BCB89  |. 5D             POP EBP
005BCB8A  |. C3             RETN
*******我们发现无论是否拔掉网线,这都会通过,所以F8继续走下去吧。
-----------------
进去看看005BCB5C   E8 EFF5FFFF    CALL ACAD.005BC150

* Referenced by a CALL at Address:
|:005BCB5C   
|
:005BC150 56                      push esi
:005BC151 E87A2C0000              call 005BEDD0
:005BC156 8BF0                    mov esieax
:005BC158 56                      push esi
:005BC159 E8A2200000              call 005BE200
:005BC15E 83C404                  add esp, 00000004
:005BC161 85C0                    test eaxeax
:005BC163 7405                    je 005BC16A
:005BC165 83C8FF                  or eax, FFFFFFFF       ;和cadR14很相似啊,激动啊,以为找到那
:005BC168 5E                      pop esi
:005BC169 C3                      ret

我正是看到这些,才在前面下断点,总之,中断在验证之前就是胜利

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005BC163(C)
|
:005BC16A B91019B000              mov ecx, 00B01910
* Reference To: ACAD.?entity@AcEdJig@@UBEPAVAcDbEntity@@XZ
                                  |
:005BC16F E8AC0A1D00              call 0078CC20
:005BC174 85C0                    test eaxeax
:005BC176 7405                    je 005BC17D
:005BC178 83C8FF                  or eax, FFFFFFFF
:005BC17B 5E                      pop esi
:005BC17C C3                      ret

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005BC176(C)
|
:005BC17D 83FE11                  cmp esi, 00000011
:005BC180 B808000100              mov eax, 00010008
:005BC185 7507                    jne 005BC18E
:005BC187 B801000200              mov eax, 00020001
......
......省略
......
:005BC1EA 35903F0000              xor eax, 00003F90
:005BC1EF 5E                      pop esi
:005BC1F0 C3                      ret      ;返回以后知道,这是个摆设,

无论是否联网,都返回一样的eax。
可能autodesk公司原来是用自己的加密,后来弃用了,TMD。

====================================
下面继续走
005BCB8B  |> E8 40220000    CALL ACAD.005BEDD0
005BCB90  |. 83F8 2A        CMP EAX,2A
005BCB93  |. 75 1E          JNZ SHORT ACAD.005BCBB3
005BCB95  |. 8B0D 1867AC00  MOV ECX,DWORD PTR DS:[AC6718]              ACAD.00AC69E4
005BCB9B  |. C705 5C19B000 >MOV DWORD PTR DS:[B0195C],3B
005BCBA5  |. 8B91 EC000000  MOV EDX,DWORD PTR DS:[ECX+EC]
005BCBAB  |. C702 04000000  MOV DWORD PTR DS:[EDX],4
005BCBB1  |. EB 2F          JMP SHORT ACAD.005BCBE2
005BCBB3  |> E8 18220000    CALL ACAD.005BEDD0
005BCBB8  |. 83F8 11        CMP EAX,11
005BCBBB  |. 74 0A          JE SHORT ACAD.005BCBC7
......
......省略
......
005BCC9E  |. A1 5C19B000    MOV EAX,DWORD PTR DS:[B0195C]
005BCCA3  |. 83C0 C5        ADD EAX,-3B
005BCCA6  |. 8915 5019B000  MOV DWORD PTR DS:[B01950],EDX
005BCCAC  |. F7D8           NEG EAX
005BCCAE  |. 1BC0           SBB EAX,EAX
005BCCB0  |. 25 AD940000    AND EAX,94AD
005BCCB5  |. 05 A9B5FFFF    ADD EAX,FFFFB5A9
005BCCBA  |. 35 A9B5FFFF    XOR EAX,FFFFB5A9
005BCCBF  |. 66:8986 940000>MOV WORD PTR DS:[ESI+94],AX
005BCCC6  |. B0 01          MOV AL,1
005BCCC8  |. 5E             POP ESI
005BCCC9  |. 8BE5           MOV ESP,EBP
005BCCCB  |. 5D             POP EBP                                  
005BCCCC  \. C3             RETN         到这里返回ret 5bce69

按F8走到这里,当然中间也F7进去看看了,浪费了不少经历。
----------------------------------------
上面返回到下面的005BCE69  CALL ACAD.005BCB10 

005BCD90  /$ 55             PUSH EBP
005BCD91  |. 8BEC           MOV EBP,ESP
005BCD93  |. 81EC 7C030000  SUB ESP,37C
005BCD99  |. 56             PUSH ESI
005BCD9A  |. 57             PUSH EDI
005BCD9B  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
005BCDA2  |. E8 E9D51F00    CALL ACAD.007BA390
005BCDA7  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
005BCDAA  |. 8D4D F0        LEA ECX,DWORD PTR SS:[EBP-10]
005BCDAD  |. 50             PUSH EAX
005BCDAE  |. 51             PUSH ECX
005BCDAF  |. 68 E80FAC00    PUSH ACAD.00AC0FE8                         ASCII "rb"
005BCDB4  |. 68 7068AC00    PUSH ACAD.00AC6870                         ASCII "xmx"
005BCDB9  |. 68 E065AC00    PUSH ACAD.00AC65E0                         ASCII "acad"
从我们的断点返回往上看看,看到了什么acad.xmx,这是acad特有的文件,
叫什么“AutoCAD 外部信息文件”,看来找对地方了。因为cad开始启动先调这个文件。
005BCDBE  |. E8 2D791200    CALL ACAD.006E46F0
005BCDC3  |. 50             PUSH EAX                                  |Arg2
005BCDC4  |. 6A 02          PUSH 2                                    |Arg1 = 00000002
005BCDC6  |. E8 5558F5FF    CALL ACAD.00512620                        \ACAD.00512620
005BCDCB  |. 83C4 1C        ADD ESP,1C
005BCDCE  |. 85C0           TEST EAX,EAX
005BCDD0  |. 75 4C          JNZ SHORT ACAD.005BCE1E
005BCDD2  |. 8B7D FC        MOV EDI,DWORD PTR SS:[EBP-4]
005BCDD5  |. 83C9 FF        OR ECX,FFFFFFFF
005BCDD8  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
005BCDDA  |. F7D1           NOT ECX
005BCDDC  |. 2BF9           SUB EDI,ECX
005BCDDE  |. 8D95 84FEFFFF  LEA EDX,DWORD PTR SS:[EBP-17C]
005BCDE4  |. 8BC1           MOV EAX,ECX
005BCDE6  |. 8BF7           MOV ESI,EDI
005BCDE8  |. 8BFA           MOV EDI,EDX
005BCDEA  |. C1E9 02        SHR ECX,2
005BCDED  |. F3:A5          REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
005BCDEF  |. 8BC8           MOV ECX,EAX
005BCDF1  |. 83E1 03        AND ECX,3
005BCDF4  |. F3:A4          REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
005BCDF6  |. 8D4D FC        LEA ECX,DWORD PTR SS:[EBP-4]
005BCDF9  |. 51             PUSH ECX
005BCDFA  |. E8 092A3300    CALL 
005BCDFF  |. 8B55 F0        MOV EDX,DWORD PTR SS:[EBP-10]
005BCE02  |. 52             PUSH EDX
005BCE03  |. E8 AA2B3300    CALL 
005BCE08  |. 8D85 84FEFFFF  LEA EAX,DWORD PTR SS:[EBP-17C]            |
005BCE0E  |. 68 70027B00    PUSH ACAD.007B0270                        |Arg2 = 007B0270
005BCE13  |. 50             PUSH EAX                                  |Arg1
005BCE14  |. E8 979F2E00    CALL ACAD.008A6DB0                        \ACAD.008A6DB0
005BCE19  |. 83C4 10        ADD ESP,10
005BCE1C  |. EB 21          JMP SHORT ACAD.005BCE3F
005BCE1E  |> 68 E065AC00    PUSH ACAD.00AC65E0                         ASCII "acad"
005BCE23  |. 6A 05          PUSH 5
005BCE25  |. 8D4D 88        LEA ECX,DWORD PTR SS:[EBP-78]
005BCE28  |. 68 4C68AC00    PUSH ACAD.00AC684C      ASCII "Can't find message file %.*s.xmx."
005BCE2D  |. 51             PUSH ECX
005BCE2E  |. E8 1B293300    CALL 
005BCE33  |. 8D55 88        LEA EDX,DWORD PTR SS:[EBP-78]             |
005BCE36  |. 52             PUSH EDX                                  |Arg1
005BCE37  |. E8 34341F00    CALL ACAD.007B0270                        \ACAD.007B0270
005BCE3C  |. 83C4 14        ADD ESP,14
005BCE3F  |> E8 8C020000    CALL ACAD.005BD0D0
005BCE44  |. A1 24FAAF00    MOV EAX,DWORD PTR DS:[AFFA24]
005BCE49  |. 85C0           TEST EAX,EAX
005BCE4B  |. 75 0A          JNZ SHORT ACAD.005BCE57
005BCE4D  |. E8 7EDDF0FF    CALL ACAD.004CABD0
005BCE52  |. A3 24FAAF00    MOV DWORD PTR DS:[AFFA24],EAX
005BCE57  |> 68 BCA6B500    PUSH ACAD.00B5A6BC
005BCE5C  |. 68 BAA6B500    PUSH ACAD.00B5A6BA
005BCE61  |. E8 0ACD1F00    CALL ACAD.007B9B70
005BCE66  |. 83C4 08        ADD ESP,8
005BCE69  |. E8 A2FCFFFF    CALL ACAD.005BCB10      这里从我们的断点走过来的 ret from 005BCCCC,

我们接着走下去, 接着F8,走

005BCE6E  |. 84C0           TEST AL,AL                                 al=1
005BCE70  |. 75 08          JNZ SHORT ACAD.005BCE7A
005BCE72  |. 5F             POP EDI
005BCE73  |. 33C0           XOR EAX,EAX
005BCE75  |. 5E             POP ESI
005BCE76  |. 8BE5           MOV ESP,EBP
005BCE78  |. 5D             POP EBP
005BCE79  |. C3             RETN
005BCE7A  |> A0 3C19B000    MOV AL,BYTE PTR DS:[B0193C]
005BCE7F  |. 84C0           TEST AL,AL                                 al=0
005BCE81  |. 75 3E          JNZ SHORT ACAD.005BCEC1
005BCE83  |. 8D45 F4        LEA EAX,DWORD PTR SS:[EBP-C]
005BCE86  |. 8D4D F8        LEA ECX,DWORD PTR SS:[EBP-8]
005BCE89  |. 50             PUSH EAX
005BCE8A  |. 8D55 EC        LEA EDX,DWORD PTR SS:[EBP-14]
005BCE8D  |. 51             PUSH ECX
005BCE8E  |. 52             PUSH EDX
005BCE8F  |. 68 4068AC00    PUSH ACAD.00AC6840                         ASCII "%d/%d/%d"
005BCE94  |. 68 1046AC00    PUSH ACAD.00AC4610     ASCII "junkjunkjunkjunk"
看上面到了吗,垃圾垃圾什么意思啊?!变态
005BCE99  |. E8 FC2A3300    CALL 
005BCE9E  |. 83C4 14        ADD ESP,14
005BCEA1  |. 83F8 03        CMP EAX,3
005BCEA4  |. 75 1B          JNZ SHORT ACAD.005BCEC1
005BCEA6  |. 8B45 EC        MOV EAX,DWORD PTR SS:[EBP-14]
005BCEA9  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
......
......省略
......
005BD06B  |. 83CE FF        OR ESI,FFFFFFFF
005BD06E  |. 83F8 03        CMP EAX,3
005BD071  |. B8 1068AC00    MOV EAX,ACAD.00AC6810                      ASCII "MAXOBJMEM"
005BD076  |. 74 05          JE SHORT ACAD.005BD07D
005BD078  |. B8 0068AC00    MOV EAX,ACAD.00AC6800                      ASCII "ACADMAXOBJMEM"
005BD07D  |> 50             PUSH EAX                                  /Arg1
005BD07E  |. E8 9DD61F00    CALL ACAD.007BA720                        \ACAD.007BA720
005BD083  |. 83C4 04        ADD ESP,4
005BD086  |. 85C0           TEST EAX,EAX
005BD088  |. 74 08          JE SHORT ACAD.005BD092
005BD08A  |. 50             PUSH EAX
005BD08B  |. FFD7           CALL EDI
005BD08D  |. 83C4 04        ADD ESP,4
005BD090  |. 8BF0           MOV ESI,EAX
005BD092  |> 8B0D 6C869E00  MOV ECX,DWORD PTR DS:[<&acdb15.maxObjMem>;  ACDB15.maxObjMem
005BD098  |. 33C0           XOR EAX,EAX
005BD09A  |. 85F6           TEST ESI,ESI
005BD09C  |. 0F9CC0         SETL AL
005BD09F  |. 48             DEC EAX
005BD0A0  |. 68 BCA6B500    PUSH ACAD.00B5A6BC
005BD0A5  |. 23C6           AND EAX,ESI
005BD0A7  |. 68 BAA6B500    PUSH ACAD.00B5A6BA
005BD0AC  |. 8901           MOV DWORD PTR DS:[ECX],EAX
005BD0AE  |. E8 BDCA1F00    CALL ACAD.007B9B70
005BD0B3  |. A0 48C4AF00    MOV AL,BYTE PTR DS:[AFC448]
005BD0B8  |. 83C4 08        ADD ESP,8
005BD0BB  |. 24 07          AND AL,7
005BD0BD  |. F6D8           NEG AL
005BD0BF  |. 1BC0           SBB EAX,EAX
005BD0C1  |. 5F             POP EDI
005BD0C2  |. 40             INC EAX
005BD0C3  |. 5E             POP ESI
005BD0C4  |. 8BE5           MOV ESP,EBP
005BD0C6  |. 5D             POP EBP
005BD0C7  \. C3             RETN              返回ret 6d80ea,我们接着走

----------------------------------------------------------
上面又返回到下面的006D80EA  CALL ACAD.005BCD90,好累啊。

006D8022   . 6A 01          PUSH 1
006D8024   . E8 17232B00    CALL 
006D8029   . 8B83 38010000  MOV EAX,DWORD PTR DS:[EBX+138]
006D802F   . 8B50 20        MOV EDX,DWORD PTR DS:[EAX+20]
006D8032   . 52             PUSH EDX                             /hWnd
006D8033   . FF15 2C639E00  CALL DWORD PTR DS:[<&USER32.UpdateW>; \UpdateWindow
006D8039   > 8BCB           MOV ECX,EBX
006D803B   . E8 00320000    CALL ACAD.006DB240
006D8040   . E8 BBE60000    CALL ACAD.006E6700
006D8045   . 6A 30          PUSH 30
006D8047   . E8 481D2B00    CALL 
006D804C   . 83C4 04        ADD ESP,4
006D804F   . 8945 C8        MOV DWORD PTR SS:[EBP-38],EAX
006D8052   . 85C0           TEST EAX,EAX
006D8054   . C645 FC 10     MOV BYTE PTR SS:[EBP-4],10
006D8058   . 74 09          JE SHORT ACAD.006D8063
006D805A   . 8BC8           MOV ECX,EAX
006D805C   . E8 8FBCF4FF    CALL ACAD.00623CF0
006D8061   . EB 02          JMP SHORT ACAD.006D8065
006D8063   > 33C0           XOR EAX,EAX
006D8065   > 8983 5C010000  MOV DWORD PTR DS:[EBX+15C],EAX
006D806B   . BF 1B46AC00    MOV EDI,ACAD.00AC461B          ASCII "kjunk"
006D8070   . 83C9 FF        OR ECX,FFFFFFFF
006D8073   . 33C0           XOR EAX,EAX
006D8075   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
006D8077   . F7D1           NOT ECX
006D8079   . 2BF9           SUB EDI,ECX
006D807B   . C645 FC 0E     MOV BYTE PTR SS:[EBP-4],0E
006D807F   . 8BC1           MOV EAX,ECX
006D8081   . 8BF7           MOV ESI,EDI
006D8083   . BF 1046AC00    MOV EDI,ACAD.00AC4610         ASCII "junkjunkjunkjunk"
006D8088   . C1E9 02        SHR ECX,2
006D808B   . F3:A5          REP MOVS DWORD PTR ES:[EDI],DWORD P>
006D808D   . 8BC8           MOV ECX,EAX
006D808F   . 83E1 03        AND ECX,3
006D8092   . F3:A4          REP MOVS BYTE PTR ES:[EDI],BYTE PTR>
006D8094   . E8 87CA0D00    CALL ACAD.007B4B20
006D8099   . FF15 849F9E00  CALL DWORD PTR DS:[<&sharedb15.?get>;  SHAREDB1.?getCachedUserName@ShareDB@@YAPBDXZ
006D809F   . 85C0           TEST EAX,EAX
006D80A1   . 74 18          JE SHORT ACAD.006D80BB
006D80A3   . 8038 00        CMP BYTE PTR DS:[EAX],0
006D80A6   . 74 13          JE SHORT ACAD.006D80BB
006D80A8   . 6A 1E          PUSH 1E                              /n = 1E (30.)
006D80AA   . 50             PUSH EAX                             |s2
006D80AB   . 68 F0F1AF00    PUSH ACAD.00AFF1F0                   |s1 = "user"
006D80B0   . FF15 9C5E9E00  CALL DWORD PTR DS:[<&MSVCRT._mbsnbc>; \_mbsnbcpy
006D80B6   . 83C4 0C        ADD ESP,0C
006D80B9   . EB 1C          JMP SHORT ACAD.006D80D7
006D80BB   > 6A 00          PUSH 0
006D80BD   . E8 1E5CE5FF    CALL ACAD.0052DCE0
006D80C2   . 6A 1E          PUSH 1E                              /n = 1E (30.)
006D80C4   . 68 BC5FAC00    PUSH ACAD.00AC5FBC                   |s2 = "这里隐去:是你版权所有信息"
006D80C9   . 68 F0F1AF00    PUSH ACAD.00AFF1F0                   |s1 = "user"
006D80CE   . FF15 9C5E9E00  CALL DWORD PTR DS:[<&MSVCRT._mbsnbc>; \_mbsnbcpy
006D80D4   . 83C4 10        ADD ESP,10
006D80D7   > C605 0EF2AF00 >MOV BYTE PTR DS:[AFF20E],0
006D80DE   . E8 6DABD2FF    CALL ACAD.00402C50
006D80E3   . 8D8B C8000000  LEA ECX,DWORD PTR DS:[EBX+C8]
006D80E9   . 51             PUSH ECX                             /Arg1
006D80EA   . E8 A14CEEFF    CALL ACAD.005BCD90           我们返回这里接着走下去
*****接着F8,走
006D80EF   . 83C4 04        ADD ESP,4
006D80F2   . 85C0           TEST EAX,EAX
006D80F4   . 75 0A          JNZ SHORT ACAD.006D8100
006D80F6   . E8 75ABD2FF    CALL ACAD.00402C70
006D80FB   . E9 4D030000    JMP ACAD.006D844D
......
......省略
......
006D82AC   . E8 8F202B00    CALL 
006D82B1   . 8B43 20        MOV EAX,DWORD PTR DS:[EBX+20]
006D82B4   . 8B40 20        MOV EAX,DWORD PTR DS:[EAX+20]
*******************
一路接着F8,走到这里
**********************
006D82B7   . 50             PUSH EAX                             /hWnd到了关键地方了
006D82B8   . FF15 2C639E00  CALL DWORD PTR DS:[<&USER32.UpdateW>; \UpdateWindow
006D82BE   > E8 ED1C0E00    CALL ACAD.007B9FB0       关键call,如果拔掉网线这里会等很久啊。这里看license是否安装啦!F7进入
006D82C3   . 85C0           TEST EAX,EAX             如果验证成功,eax=0。
006D82C5   . 0F85 82010000  JNZ ACAD.006D844D
006D82CB   . E8 F01C0E00    CALL ACAD.007B9FC0    ;关键call,如果拔掉网线这里会验证失败。这里check license的正确啦,当然还有好几处!F7进入
006D82D0   . 85C0           TEST EAX,EAX             如果验证成功,eax=0。
006D82D2   . 0F85 75010000  JNZ ACAD.006D844D
006D82D8   . 8D4D CC        LEA ECX,DWORD PTR SS:[EBP-34] ;到此以后,成功,
006D82DB   . E8 E41A2B00    CALL 
006D82E0   . 8D4D A8        LEA ECX,DWORD PTR SS:[EBP-58]
006D82E3   . 6A 00          PUSH 0                               /Arg2 = 00000000
006D82E5   . 51             PUSH ECX                             |Arg1
006D82E6   . C645 FC 11     MOV BYTE PTR SS:[EBP-4],11           |
......
......省略
......
走向成功
.............
------------------------------------------------
我们先F7进入关键CALL ACAD.007B9FB0,
(如果拔掉网线这里会等很久啊。这里看license是否安装啦!)
007B9FB0  /$ E8 5B56E0FF    CALL ACAD.005BF610    ;我们go into看看F7。如果验证成功,返回eax=1。
007B9FB5  |. F6D8           NEG AL                          eax=000000ff
007B9FB7  |. 1BC0           SBB EAX,EAX                     FFFFFFFF
007B9FB9  |. F7D8           NEG EAX                         eax=1
007B9FBB  |. 48             DEC EAX                         eax=0
007B9FBC  |. 83E0 01        AND EAX,1             eax=0,返回成功
007B9FBF  \. C3             RETN

----------------------------------------------
我们go into CALL ACAD.005BF610 来到这里
005BF610  /$ 55             PUSH EBP
005BF611  |. 8BEC           MOV EBP,ESP
005BF613  |. 51             PUSH ECX
005BF614  |. 53             PUSH EBX
005BF615  |. 56             PUSH ESI
005BF616  |. 57             PUSH EDI
005BF617  |. BE 2E46AC00    MOV ESI,ACAD.00AC462E
005BF61C  |. BF A02EAC00    MOV EDI,ACAD.00AC2EA0
005BF621  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
005BF628  |. 81EE 86000000  SUB ESI,86
005BF62E  |. 83EF 72        SUB EDI,72
005BF631  |. C705 809FB500 >MOV DWORD PTR DS:[B59F80],1
005BF63B  |. E8 C0CBFFFF    CALL ACAD.005BC200      *********第一个最关键call F7进去吧*****
005BF640  |. 8BD8           MOV EBX,EAX                                        ebx=eax=0
005BF642  |. C705 809FB500 >MOV DWORD PTR DS:[B59F80],0
005BF64C  |. 85DB           TEST EBX,EBX
005BF64E  |. 75 53          JNZ SHORT ACAD.005BF6A3
005BF650  |. E8 7BF7FFFF    CALL ACAD.005BEDD0
005BF655  |. 83F8 2A        CMP EAX,2A                                         eax=19
005BF658  |. 75 1A          JNZ SHORT ACAD.005BF674
005BF65A  |. A1 106DAC00    MOV EAX,DWORD PTR DS:[AC6D10]
005BF65F  |. C745 FC 430000>MOV DWORD PTR SS:[EBP-4],43
005BF666  |. 8B88 0C010000  MOV ECX,DWORD PTR DS:[EAX+10C]
005BF66C  |. C701 04000000  MOV DWORD PTR DS:[ECX],4
005BF672  |. EB 41          JMP SHORT ACAD.005BF6B5
005BF674  |> E8 57F7FFFF    CALL ACAD.005BEDD0
005BF679  |. 83F8 11        CMP EAX,11                                         eax=19
005BF67C  |. 74 0A          JE SHORT ACAD.005BF688
005BF67E  |. E8 4DF7FFFF    CALL ACAD.005BEDD0                                 eax=19
005BF683  |. 83F8 19        CMP EAX,19
005BF686  |. 75 2D          JNZ SHORT ACAD.005BF6B5
005BF688  |> 8B15 106DAC00  MOV EDX,DWORD PTR DS:[AC6D10]                      ACAD.00AC69C4
005BF68E  |. C745 FC 430000>MOV DWORD PTR SS:[EBP-4],43       ;看到吗DWORD PTR SS:[EBP-4]=43
005BF695  |. 8B82 0C010000  MOV EAX,DWORD PTR DS:[EDX+10C]
005BF69B  |. C700 03000000  MOV DWORD PTR DS:[EAX],3
005BF6A1  |. EB 12          JMP SHORT ACAD.005BF6B5
005BF6A3  |> 8B0D 106DAC00  MOV ECX,DWORD PTR DS:[AC6D10]                      ACAD.00AC69C4
005BF6A9  |. 8B91 0C010000  MOV EDX,DWORD PTR DS:[ECX+10C]
005BF6AF  |. C702 00000000  MOV DWORD PTR DS:[EDX],0
005BF6B5  |> 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]                      eax=43
005BF6B8  |. 83C0 BD        ADD EAX,-43                eax=0
005BF6BB  |. F7D8           NEG EAX  
005BF6BD  |. 1BC0           SBB EAX,EAX
005BF6BF  |. 25 4D2F0000    AND EAX,2F4D                                       eax=0
005BF6C4  |. 05 59E8FFFF    ADD EAX,-17A7                                      eax=FFFFE859
005BF6C9  |. 35 59E8FFFF    XOR EAX,FFFFE859                                   0
005BF6CE  |. 66:8947 72     MOV WORD PTR DS:[EDI+72],AX
005BF6D2  |. 66:8986 860000>MOV WORD PTR DS:[ESI+86],AX
005BF6D9  |. 33C0           XOR EAX,EAX
005BF6DB  |. 83FB FE        CMP EBX,-2                                         ebx=0
005BF6DE  |. 5F             POP EDI
005BF6DF  |. 5E             POP ESI
005BF6E0  |. 0F95C0         SETNE AL                                           到这 eax=1
005BF6E3  |. 5B             POP EBX
005BF6E4  |. 8BE5           MOV ESP,EBP
005BF6E6  |. 5D             POP EBP
005BF6E7  \. C3             RETN              
-------------------------------------------------
*********第一个最关键call 进去吧*****
005BC214处的call是在adlmbase.dll里的,F7追进去,你会发现很多东东,
这对你编写无限制的license文件很有用,但第2个关键call才是重点。闲话少说。

005BC200  /$ B9 1019B000    MOV ECX,ACAD.00B01910
005BC205  |. E8 060F1D00    CALL ACAD.0078D110
005BC20A  |. 85C0           TEST EAX,EAX               eax=00f8c70
005BC20C  |. 75 04          JNZ SHORT ACAD.005BC212  一般应该jmp,保险就改eb04
005BC20E  |. 83C8 FF        OR EAX,FFFFFFFF        ;到这个可不行,-1。
005BC211  |. C3             RETN
005BC212  |> 8BC8           MOV ECX,EAX    ;看到下面的adlmbase.?Authorize@AdlmLic,太明白了
005BC214  |. FF15 3C999E00  CALL DWORD PTR DS:[<&adlmbase.?Authorize@AdlmLic>;  ADLMBASE.?Authorize@AdlmLicense@@QAEHXZ
005BC21A  |. 35 903F0000    XOR EAX,3F90        eax=0,0 xor 3F90=3F90,那末此时eax=3F90
005BC21F  |. 3D 903F0000    CMP EAX,3F90        ;相等不跳
005BC224  |. 75 03          JNZ SHORT ACAD.005BC229   ;跳了可不行!
005BC226  |. 33C0           XOR EAX,EAX   ;eax=0
005BC228  |. C3             RETN       ;返回eax=0,成功
005BC229  |> 35 903F0000    XOR EAX,3F90
005BC22E  |. 33C9           XOR ECX,ECX
005BC230  |. 83C0 4F        ADD EAX,4F
005BC233  |. 35 A4CE0000    XOR EAX,0CEA4
005BC238  |. 3D F5CE0000    CMP EAX,0CEF5
005BC23D  |. 0F95C1         SETNE CL
005BC240  |. 83C1 FE        ADD ECX,-2
005BC243  |. 8BC1           MOV EAX,ECX
005BC245  \. C3             RETN


----------------------------------------------------------------
 再来看看006D82CB  CALL ACAD.007B9FC0是关键call,如果拔掉网线这里会验证失败。
这里check license的正确啦,当然还有好几处!
* Referenced by a CALL at Address:
|:006D82CB   
|
:007B9FC0 55                      push ebp
:007B9FC1 8BEC                    mov ebpesp
:007B9FC3 83EC08                  sub esp, 00000008
:007B9FC6 56                      push esi
:007B9FC7 8D45F8                  lea eaxdword ptr [ebp-08]
:007B9FCA 57                      push edi
:007B9FCB 50                      push eax
:007B9FCC BE85FFFFFF              mov esi, FFFFFF85
:007B9FD1 E8FE021D00              call 0098A2D4
:007B9FD6 8B0DD06AAC00            mov ecxdword ptr [00AC6AD0]
:007B9FDC 8B38                    mov edidword ptr [eax]
:007B9FDE 8B01                    mov eaxdword ptr [ecx]
:007B9FE0 83F803                  cmp eax, 00000003
:007B9FE3 7404                    je 007B9FE9     ;-----jmp
:007B9FE5 85C0                    test eaxeax
:007B9FE7 7511                    jne 007B9FFA

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:007B9FE3(C)

-------------------

007B9FE9  |> E8 6222E0FF    CALL ACAD.005BC250        第二个最关键call F7进去吧into
007B9FEE  |. 8BF0           MOV ESI,EAX
007B9FF0  |. F7DE           NEG ESI
007B9FF2  |. 1BF6           SBB ESI,ESI
007B9FF4  |. 83E6 01        AND ESI,1
007B9FF7  |. 83EE 7B        SUB ESI,7B
007B9FFA  |> 8B15 D06AAC00  MOV EDX,DWORD PTR DS:[AC6AD0]               ACAD.00B01F64
007BA000  |. 833A 04        CMP DWORD PTR DS:[EDX],4
......
......省略
......
007BA04B  |. E8 10000000    CALL ACAD.007BA060                         \ACAD.007BA060
007BA050  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
007BA052  |. 5F             POP EDI
007BA053  |. 5E             POP ESI
007BA054  |. 8BE5           MOV ESP,EBP
007BA056  |. 5D             POP EBP
007BA057  \. C3             RETN


---------------------------------------------------------
*********第二个最关键call 进去吧*****
005BC264处的call是在adlmbase.dll里的,F7追进去,你会发现很多东东,
这对你编写无限制的license文件很有用。闲话少说。
这个call,被好几处调用,我们可以改它!

005BC250  /$ B9 1019B000    MOV ECX,ACAD.00B01910
005BC255  |. E8 B60E1D00    CALL ACAD.0078D110
005BC25A  |. 85C0           TEST EAX,EAX
005BC25C  |. 75 04          JNZ SHORT ACAD.005BC262       ;一般应该jmp,保险就改eb04
005BC25E  |. 83C8 FF        OR EAX,FFFFFFFF      ;到这个可不行,-1。      
005BC261  |. C3             RETN
005BC262  |> 8BC8           MOV ECX,EAX         看到下面的adlmbase.?Check@AdlmLicens,太明白了
005BC264  |. FF15 38999E00  CALL DWORD PTR DS:[<&adlmbase.?Check@AdlmLicens>;  ADLMBASE.?Check@AdlmLicense@@QAEHXZ
005BC26A  |. 35 903F0000    XOR EAX,3F90       ;上面eax返回0,那就成功了。
005BC26F  |. 2D 903F0000    SUB EAX,3F90
005BC274  |. F7D8           NEG EAX
005BC276  |. 1BC0           SBB EAX,EAX
005BC278  |. 25 7AF10000    AND EAX,0F17A       ;成功,返回eax=0
005BC27D  \. C3             RETN

--------
破解方法
--------
方法1.我们要她还去网络验证,但无论返回成功与否,我们都可以用。
此法好处是,万一有人在服务器端监控,可以看到我们在同时使用,至多
是点数满了,不会发现我们在作弊。除非他同时有很多人来查我们同时在线
,才会发现怎么点数满了,还能用,如果你有50个点以上,让他查吧。
005BC20C  |. 75 04          JNZ SHORT ACAD.005BC212   一般应该jmp,保险就改75 改为eb
005BC21A  |. 35 903F0000    XOR EAX,3F90           改为 mov eax,3f90,35改为B8

005BC25C  |. 75 04          JNZ SHORT ACAD.005BC262  一般应该jmp,保险就改75 改为eb
005BC26A  |. 35 903F0000    XOR EAX,3F90       ;改为 mov eax,3f90,35改为B8

这时你甚至可以拔掉网线使用,你可以验证一下。
运行acad,停顿时间比联网长多了,原因我在cadR14破文里说过
过一会出现Flex license窗口,这时你点击cancel,再点出错窗口的确定,即可进入。
另外,当然点数满时,也会有出错窗口出现,但再点出错窗口的确定,即可进入。这是因为我们没有使用90大法。

如果你始终联接在网上,而Flex license服务器也不关闭,那可以只改2个字节!!
就是:
005BC21A  |. 35 903F0000    XOR EAX,3F90        改为 mov eax,3f90,35改为B8
005BC26A  |. 35 903F0000    XOR EAX,3F90       ;改为 mov eax,3f90,35改为B8

解释:以上分析可以看到来到005BC21A,005BC26A 时,若eax=0就验证成功,
此后下一句 XOR EAX,3F90,
而eax=0那么 0 XOR 3f90=3F90!!
那末此时eax=3F90,我们不管前面eax返回什么值,我强制让eax=3F90就行了
mov eax,3f90
他的机器码:B8 903F0000,
你再看XOR EAX,3F90的机器码35 903F0000。

因此只改2处共2字节!


方法2.我们要去掉网络验证,我们都可以用。
此法好处是,没有网络验证验证,节约时间,但你最好自己在家里用。
否则,他们来查,怎么一个人也没有在服务器显示,而你们明明都在用。

很简单:在方法1的基础上,把那前面的两个call都nop掉,90大法显神威。

到此,我们可以都使用正版了!!!哈哈
如果你想家里也使用,你把机子抗来,联网安装成功后,再打上补丁,回去就可以用了。

总结:
    Flexlm加密看雪地书里讲得很详细了。我看Flexlm加密的弱点就是可以爆破,他无法像一些狗加密那样把程序的关键数据或加地址密并储存在狗里,而只能返回成功失败标志!虽然CAD2002加密不使用标准的Flexlm的Dll,但我怀疑adlmbase.dll就是我们要找的,很可能是专为autodesk做的,有兴趣可以仔细研究。
    对于Flexlm一类的加密,我们除了作无限制的license以外,就是爆破它,关键是找到断点!愿我的一些找断点的经验于大家有所帮助。首先吃透软件的运行规律,反汇编找它的可疑处下断。
    最后,建议Flexlm加密等可以象一些狗加密那样把程序的关键数据或地址加密并储存在狗里一样,而不是只返回成功失败标志!或者,在程序运行中间再随机验证,不过这会影响客户端运行速度,想象你有100个点会怎样,服务器也受不了吧。
    当然,这还是防不住的。