Ixis Research LTD 系列軟體破解之 一(Windows Lockup V2.0)

看雪資料發表於2004-08-19

Ixis Research LTD 是一家軟體公司,以電腦安全為主要方向
官方主頁:http://www.softheap.com


Windows Lockup 是其公司開發的一個電腦安全防護軟體,當你離開電腦時,可以設定密碼,防止別人亂動你的電腦。可以設定自動手動啟動密碼保護,還支援省電功能、密碼保護的螢幕程式、網路使用者確認等等。試用者請在序列號輸入對對話方塊不輸入就可以了。
最新版本 2.0

-------------------------------------------------------------
小弟初學破解,只是感興趣,放上來只是為了多交流,請不吝賜教
-------------------------------------------------------------

          用PeiD查無殼,Delphi編寫,
註冊時候在Enter Your Registation Code :裡填上123456789abcdefg共十六位,我隨便輸入的,點OK,這個時候出現一錯誤對話方塊,對話方塊標題是 Error, 內容是:Sorry,this registration code is invalid.
好了,我們知道出錯提示就可以用這個來找到關鍵的地方
用OD載入主程式wlock.exe,右擊=>搜尋=>字元參考, 然後我們找到上面的那個出錯提示,呵呵,就一處,而且連 Thank you for support !也找到了。雙擊到了對應程式碼處,如下
004C3928   |.  E8 9F0FF4FF       call wlock.004048CC
004C392D   |.  33C0              xor eax,eax
004C392F   |.  E8 58FEFFFF       call wlock.004C378C;這 是關鍵Call,我們在此下斷,直接跟進去看看
004C3934   |.  84C0              test al,al          ; al與自身相與,隻影響標誌位也就是看看al是否為0
004C3936   |.  74 77             je short wlock.004C39AF ;如果 ZF=1,即al為0,那麼就跳到下面的出錯提示,否則就註冊成功
004C3938   |.  B3 01             mov bl,1
004C393A   |.  A0 F47B4C00       mov al,byte ptr ds:[4C7BF4]
004C393F   |.  50                push eax
004C3940   |.  8B0D D4A14C00     mov ecx,dword ptr ds:[4CA1D4]
004C3946   |.  B2 01             mov dl,1
004C3948   |.  A1 687D4B00       mov eax,dword ptr ds:[4B7D68]
004C394D   |.  E8 E24BFFFF       call wlock.004B8534
004C3952   |.  8BF0              mov esi,eax
004C3954   |.  E8 E372F4FF       call wlock.0040AC3C
004C3959   |.  83C4 F4           add esp,-0C
004C395C   |.  DB3C24            fstp tbyte ptr ss:[esp]              ; |浮點運算?
004C395F   |.  9B                wait                                 ; |這附近有個call是加密我們的註冊碼的,呵呵
004C3960   |.  8D45 FC           lea eax,dword ptr ss:[ebp-4]         ; |
004C3963   |.  E8 686CF4FF       call wlock.0040A5D0                  ; \wlock.0040A5D0
004C3968   |.  8B45 FC           mov eax,dword ptr ss:[ebp-4]
004C396B   |.  50                push eax
004C396C   |.  B9 F4394C00       mov ecx,wlock.004C39F4               ;  ASCII "DT"
004C3971   |.  33D2              xor edx,edx
004C3973   |.  8BC6              mov eax,esi
004C3975   |.  E8 2650FFFF       call wlock.004B89A0
004C397A   |.  A1 D0A14C00       mov eax,dword ptr ds:[4CA1D0]
004C397F   |.  50                push eax
004C3980   |.  B9 003A4C00       mov ecx,wlock.004C3A00
004C3985   |.  33D2              xor edx,edx
004C3987   |.  8BC6              mov eax,esi
004C3989   |.  E8 1250FFFF       call wlock.004B89A0
004C398E   |.  8BC6              mov eax,esi
004C3990   |.  E8 F300F4FF       call wlock.00403A88
004C3995   |.  6A 40             push 40
004C3997   |.  B9 043A4C00       mov ecx,wlock.004C3A04               ;  ASCII "Information"
004C399C   |.  BA 103A4C00       mov edx,wlock.004C3A10               ;  ASCII "Thank you for support !"
004C39A1   |.  A1 407F4C00       mov eax,dword ptr ds:[4C7F40]
004C39A6   |.  8B00              mov eax,dword ptr ds:[eax]
004C39A8   |.  E8 1338FAFF       call wlock.004671C0
004C39AD   |.  EB 18             jmp short wlock.004C39C7
004C39AF   |>  6A 10             push 10
004C39B1   |.  B9 283A4C00       mov ecx,wlock.004C3A28               ;  ASCII "Error"
004C39B6   |.  BA 303A4C00       mov edx,wlock.004C3A30               ;  ASCII "Sorry, this registration code is invalid."
004C39BB   |.  A1 407F4C00       mov eax,dword ptr ds:[4C7F40]
004C39C0   |.  8B00              mov eax,dword ptr ds:[eax]
004C39C2   |.  E8 F937FAFF       call wlock.004671C0
004C39C7   |>  33C0              xor eax,eax
004C39C9   |.  5A                pop edx
004C39CA   |.  59                pop ecx
004C39CB   |.  59                pop ecx
004C39CC   |.  64:8910           mov dword ptr fs:[eax],edx
004C39CF   |.  68 E4394C00       push wlock.004C39E4
004C39D4   |>  8D45 FC           lea eax,dword ptr ss:[ebp-4]
004C39D7   |.  E8 9C0EF4FF       call wlock.00404878
004C39DC   \.  C3                retn
 好,我們就在上面那個關鍵call F2設斷 
 F9 執行,填上Registration Code:123456789abcdefg,然後點OK,被OD攔下,看來我們斷點設對了。這個時候我們觀察一下暫存器的值:eax=0,esi指向我們輸入假碼的首地址,edx=0,現在我們跟進004C392F 處的這個call F7  我們來到
004C378C   /$  55                push ebp
004C378D   |.  8BEC              mov ebp,esp
004C378F   |.  6A 00             push 0
004C3791   |.  6A 00             push 0
004C3793   |.  6A 00             push 0
004C3795   |.  53                push ebx
004C3796   |.  56                push esi
004C3797   |.  57                push edi
004C3798   |.  8845 FF           mov byte ptr ss:[ebp-1],al           ;  把0送到ss:[ebp-1]
004C379B   |.  BF D0A14C00       mov edi,wlock.004CA1D0
004C37A0   |.  33C0              xor eax,eax
004C37A2   |.  55                push ebp
004C37A3   |.  68 D0384C00       push wlock.004C38D0
004C37A8   |.  64:FF30           push dword ptr fs:[eax]
004C37AB   |.  64:8920           mov dword ptr fs:[eax],esp
004C37AE   |.  33DB              xor ebx,ebx
004C37B0   |.  807D FF 00        cmp byte ptr ss:[ebp-1],0            ;  ss:[ebp-1]是剛剛被置0的
004C37B4   |.  0F84 A5000000     je wlock.004C385F                    ;  跳過去
004C37BA   |.  A0 F47B4C00       mov al,byte ptr ds:[4C7BF4]
004C37BF   |.  50                push eax
004C37C0   |.  8B0D D4A14C00     mov ecx,dword ptr ds:[4CA1D4]
004C37C6   |.  B2 01             mov dl,1
004C37C8   |.  A1 687D4B00       mov eax,dword ptr ds:[4B7D68]
004C37CD   |.  E8 624DFFFF       call wlock.004B8534
004C37D2   |.  8BF0              mov esi,eax
004C37D4   |.  57                push edi
004C37D5   |.  B9 E8384C00       mov ecx,wlock.004C38E8               ;  ASCII "DT"
004C37DA   |.  33D2              xor edx,edx
004C37DC   |.  8BC6              mov eax,esi
004C37DE   |.  E8 2156FFFF       call wlock.004B8E04
004C37E3   |.  8D45 F8           lea eax,dword ptr ss:[ebp-8]
004C37E6   |.  8B0F              mov ecx,dword ptr ds:[edi]
004C37E8   |.  BA F4384C00       mov edx,wlock.004C38F4
004C37ED   |.  E8 8A13F4FF       call wlock.00404B7C
004C37F2   |.  8B45 F8           mov eax,dword ptr ss:[ebp-8]
004C37F5   |.  E8 DA6EF4FF       call wlock.0040A6D4
004C37FA   |.  DD1D DCA14C00     fstp qword ptr ds:[4CA1DC]
004C3800   |.  9B                wait
004C3801   |.  57                push edi
004C3802   |.  B9 00394C00       mov ecx,wlock.004C3900
004C3807   |.  33D2              xor edx,edx
004C3809   |.  8BC6              mov eax,esi
004C380B   |.  E8 F455FFFF       call wlock.004B8E04
004C3810   |.  DD05 DCA14C00     fld qword ptr ds:[4CA1DC]
004C3816   |.  D81D 04394C00     fcomp dword ptr ds:[4C3904]
004C381C   |.  DFE0              fstsw ax
004C381E   |.  9E                sahf
004C381F   |.  75 26             jnz short wlock.004C3847
004C3821   |.  E8 1674F4FF       call wlock.0040AC3C
004C3826   |.  83C4 F4           add esp,-0C
004C3829   |.  DB3C24            fstp tbyte ptr ss:[esp]              ; |
004C382C   |.  9B                wait                                 ; |
004C382D   |.  8D45 F4           lea eax,dword ptr ss:[ebp-C]         ; |
004C3830   |.  E8 9B6DF4FF       call wlock.0040A5D0                  ; \wlock.0040A5D0
004C3835   |.  8B45 F4           mov eax,dword ptr ss:[ebp-C]
004C3838   |.  50                push eax
004C3839   |.  B9 E8384C00       mov ecx,wlock.004C38E8               ;  ASCII "DT"
004C383E   |.  33D2              xor edx,edx
004C3840   |.  8BC6              mov eax,esi
004C3842   |.  E8 5951FFFF       call wlock.004B89A0
004C3847   |>  8BC6              mov eax,esi
004C3849   |.  E8 3A02F4FF       call wlock.00403A88
004C384E   |.  DD05 DCA14C00     fld qword ptr ds:[4CA1DC]
004C3854   |.  D81D 04394C00     fcomp dword ptr ds:[4C3904]
004C385A   |.  DFE0              fstsw ax
004C385C   |.  9E                sahf
004C385D   |.  74 56             je short wlock.004C38B5
004C385F   |>  8B07              mov eax,dword ptr ds:[edi]           ;  ds:[edi]指向假碼,這裡相當於把假碼移到eax去參與運算
004C3861   |.  E8 CA12F4FF       call wlock.00404B30                  ;  取註冊碼的位數call,結果送eax
004C3866   |.  83F8 0C           cmp eax,0C                           ;  註冊碼小於12位嗎?
004C3869   |.  7C 43             jl short wlock.004C38AE              ;  小於跳走
004C386B   |.  8B07              mov eax,dword ptr ds:[edi]           ;  ds:[edi]指向假碼,這裡相當於把假碼移到eax去參與運算
004C386D   |.  8038 37           cmp byte ptr ds:[eax],37             ;  第一位是不是7?這裡我們要改,右擊=>修改資料
004C3870   |.  75 3C             jnz short wlock.004C38AE             ;  不是跳走
004C3872   |.  8B07              mov eax,dword ptr ds:[edi]           ;  723456789abcdef=>eax
004C3874   |.  8078 01 30        cmp byte ptr ds:[eax+1],30           ;  第二位是不是0?所以也要改
004C3878   |.  75 34             jnz short wlock.004C38AE
004C387A   |.  8B07              mov eax,dword ptr ds:[edi]           ;  703456789abcdef=>eax
004C387C   |.  8078 02 37        cmp byte ptr ds:[eax+2],37           ;  第三位是不是7?
004C3880   |.  75 2C             jnz short wlock.004C38AE
004C3882   |.  8B07              mov eax,dword ptr ds:[edi]           ;  707456789abcdef=>eax
004C3884   |.  8078 03 32        cmp byte ptr ds:[eax+3],32           ;  第四位是不是2?
004C3888   |.  75 24             jnz short wlock.004C38AE
004C388A   |.  8B07              mov eax,dword ptr ds:[edi]           ;  707256789abcdef=>eax
004C388C   |.  8078 04 31        cmp byte ptr ds:[eax+4],31           ;  第五位是不是1?
004C3890   |.  75 1C             jnz short wlock.004C38AE
004C3892   |.  8B07              mov eax,dword ptr ds:[edi]
004C3894   |.  8078 09 43        cmp byte ptr ds:[eax+9],43           ;  第十位是不是C?
004C3898   |.  75 14             jnz short wlock.004C38AE
004C389A   |.  8B07              mov eax,dword ptr ds:[edi]
004C389C   |.  8078 0A 57        cmp byte ptr ds:[eax+A],57           ;  第十一位是不是W?
004C38A0   |.  75 0C             jnz short wlock.004C38AE
004C38A2   |.  8B07              mov eax,dword ptr ds:[edi]
004C38A4   |.  8078 0B 4C        cmp byte ptr ds:[eax+B],4C           ;  第十二位是不是L?
004C38A8   |.  75 04             jnz short wlock.004C38AE
004C38AA   |.  B3 01             mov bl,1                             ;  註冊成功標記?
004C38AC   |.  EB 07             jmp short wlock.004C38B5             ;  跳過出錯的地方
004C38AE   |>  8BC7              mov eax,edi
004C38B0   |.  E8 C30FF4FF       call wlock.00404878
004C38B5   |>  33C0              xor eax,eax                          ;  eax清零
004C38B7   |.  5A                pop edx
004C38B8   |.  59                pop ecx
004C38B9   |.  59                pop ecx
004C38BA   |.  64:8910           mov dword ptr fs:[eax],edx
004C38BD   |.  68 D7384C00       push wlock.004C38D7
004C38C2   |>  8D45 F4           lea eax,dword ptr ss:[ebp-C]
004C38C5   |.  BA 02000000       mov edx,2
004C38CA   |.  E8 CD0FF4FF       call wlock.0040489C                ;這個是??
004C38CF   \.  C3                retn
呵呵,返回後呢,我們的eax=01,那麼al=1了,也就是註冊碼是正確的,也就說
只要我們的註冊碼滿足上面的幾個判斷條件就可以啦。
註冊資訊放在Windows Lockup目錄下的wlock.dat檔案裡,是加過密的,有興趣的可以看看加密演算法,在上面的幾個call裡.

相關文章