木馬克星5.33.60破解過程 (9千字)

看雪資料發表於2002-03-28

木馬克星5.33.60破解過程

老是聽朋友說現在的網頁很多木馬(特別是一種叫網路神偷的軟體能穿過很多防夥牆進入我們的系統進行盜竊),只要你看了它的網頁就會中招,所以擔心的情況下就馬上到華軍的網頁上下了一個叫“木馬克星”的軟體,但是要註冊碼的,反正最近心情一般,就打算拿這個軟體來試試,增加一下信心!

軟體介紹:
軟體名稱:木馬克星(iparmor)
整理日期:2002.3.27
最新版本:5.33.60
檔案大小:1392KB
軟體授權:共享軟體
使用平臺:Win9x/Me/NT/2000
釋出公司:http://www.luosoft.com/
軟體簡介:
  可以查殺5021種國際木馬,112種電子郵件木馬,保證查殺冰河類檔案關聯木馬,oicq類寄生木馬,icmp類幽靈木馬,網路神偷類反彈木馬。內建木馬防火牆,任何駭客試圖與本機建立連線,都需要Iparmor 確認,不僅可以查殺木馬,更可以查駭客。


下栽地址:http://gwbn.onlinedown.net/down/iparmor.exe

破解工具:trw2000(ver:1.23), PW32Dasm9b.exe

破解作者:zwlzwl
信箱:tsgmx@21cn.com


首先用PW32Dasm9b.exe把Iparmor.exe進行反編譯
在字串參考中找到:“軟體已經被成功註冊”的字串,再向上能看到下面的程式碼,大家請跟我一起來分析一下這些程式碼

:004F6C39 8B8024020000            mov eax, dword ptr [eax+00000224]
:004F6C3F 2D6E020000              sub eax, 0000026E
:004F6C44 E86B31F1FF              call 00409DB4
:004F6C49 8B95ECFEFFFF            mov edx, dword ptr [ebp+FFFFFEEC]
:004F6C4F 8B45FC                  mov eax, dword ptr [ebp-04]
:004F6C52 E861DFF0FF              call 00404BB8〈--因為下面的是關鍵,所以說明註冊碼是在這裡比較的,所以我們進入去做深入研究
:004F6C57 0F858F000000            jne 004F6CEC〈---關鍵的跳,不能跳,一跳就出錯
:004F6C5D C6050C12510001          mov byte ptr [0051120C], 01
:004F6C64 33D2                    xor edx, edx
:004F6C66 8B83E0020000            mov eax, dword ptr [ebx+000002E0]
:004F6C6C E8830BF4FF              call 004377F4

* Possible StringData Ref from Code Obj ->"Reistered successfully."
                                  |
:004F6C71 BA3C774F00              mov edx, 004F773C
:004F6C76 8B83E8020000            mov eax, dword ptr [ebx+000002E8]
:004F6C7C E8670DF4FF              call 004379E8
:004F6C81 803F00                  cmp byte ptr [edi], 00
:004F6C84 7410                    je 004F6C96

* Possible StringData Ref from Code Obj ->"軟體已經被
成功註冊."
                                  |
:004F6C86 BA5C774F00              mov edx, 004F775C
:004F6C8B 8B83E8020000            mov eax, dword ptr [ebx+000002E8]
:004F6C91 E8520DF4FF              call 004379E8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F6C84(C)
|
:004F6C96 33D2                    xor edx, edx


進入了
:004F6C52 E861DFF0FF              call 00404BB8
我們能看到下面程式碼,大家請看我的分析


:00404BB8 53                      push ebx
:00404BB9 56                      push esi
:00404BBA 57                      push edi
:00404BBB 89C6                    mov esi, eax〈--使用ESI做EAX的影像,[EAX]裡放著假的註冊碼
:00404BBD 89D7                    mov edi, edx〈--使用EDI做EDX的影像,[EDX]裡放著真的註冊碼
:00404BBF 39D0                    cmp eax, edx〈--比較真假註冊碼的地址是不是一樣
:00404BC1 0F848F000000            je 00404C56 〈--如相同就跳到不能註冊裡去
:00404BC7 85F6                    test esi, esi〈--測試假註冊碼的地址是不是0(也就是是不是存在)
:00404BC9 7468                    je 00404C33  〈--如等於0(不存在)就跳到不能註冊裡去
:00404BCB 85FF                    test edi, edi〈--測試假註冊碼的地址是不是0(也就是是不是存在)
:00404BCD 746B                    je 00404C3A  〈--如等於0(不存在)就跳到不能註冊裡去
:00404BCF 8B46FC                  mov eax, dword ptr [esi-04]〈--取得假註冊碼的位數
:00404BD2 8B57FC                  mov edx, dword ptr [edi-04] 〈--取得真註冊碼的位數
:00404BD5 29D0                    sub eax, edx〈--真假註冊碼的位數相減
:00404BD7 7702                    ja 00404BDB 〈--假註冊碼的位數大過真的註冊碼,就跳到不能註冊
:00404BD9 01C2                    add edx, eax〈--把假註冊碼的位數放到EDX中去

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404BD7(C)
|
:00404BDB 52                      push edx〈----把假註冊碼的位數儲存起來
:00404BDC C1EA02                  shr edx, 02〈--把位數值(2進位制)右移動2位
:00404BDF 7426                    je 00404C07〈--如假註冊碼的位數小於不大於2就跳到不能註冊那裡

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404BFD(C)
|
:00404BE1 8B0E                    mov ecx, dword ptr [esi]〈--取出假註冊碼的ASCII碼轉換的前4位
:00404BE3 8B1F                    mov ebx, dword ptr [edi]〈--取出真註冊碼的ASCII碼轉換的前4位
:00404BE5 39D9                    cmp ecx, ebx〈--比較這4個ASCII碼
:00404BE7 7558                    jne 00404C41〈--不相等就跳到不能註冊
:00404BE9 4A                      dec edx〈--註冊碼位數計數器減1
:00404BEA 7415                    je 00404C01〈--如計數器等於0就跳到不能註冊
:00404BEC 8B4E04                  mov ecx, dword ptr [esi+04]〈--取出假註冊碼的ASCII碼轉換的5-8位
:00404BEF 8B5F04                  mov ebx, dword ptr [edi+04]〈--取出真註冊碼的ASCII碼轉換的5-8位
:00404BF2 39D9                    cmp ecx, ebx〈--比較這4個ASCII碼
:00404BF4 754B                    jne 00404C41〈--不相等就跳到不能註冊
:00404BF6 83C608                  add esi, 00000008〈--把地址指標指向第9個假ASCII碼
:00404BF9 83C708                  add edi, 00000008〈--把地址指標指向第9個真ASCII碼
:00404BFC 4A                      dec edx〈--註冊碼位數計數器再次減1
:00404BFD 75E2                    jne 00404BE1〈--不等於0就繼續跳回上面去進行每次4個ASCII碼比較的流程裡面去
:00404BFF EB06                    jmp 00404C07〈--如計數器等於0就跳到每次1個ASCII碼比較的流程裡面去(因為如是正確的註冊碼現在只剩下9-8=1位ASCII碼了)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404BEA(C)
|
:00404C01 83C604                  add esi, 00000004
:00404C04 83C704                  add edi, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404BDF(C), :00404BFF(U)
|
:00404C07 5A                      pop edx〈--取回假註冊碼的位數
:00404C08 83E203                  and edx, 00000003〈--擷取2進製表示式的最後兩位數放到EDX中
:00404C0B 7422                    je 00404C2F〈--如最後兩位都是0就跳到不能註冊裡去
:00404C0D 8B0E                    mov ecx, dword ptr [esi]〈--取出最後一位假ASCII碼放到CL中
:00404C0F 8B1F                    mov ebx, dword ptr [edi]〈--取出最後一位假ASCII碼放到BL中
:00404C11 38D9                    cmp cl, bl〈--比較最後一位ASCII碼
:00404C13 7541                    jne 00404C56〈--不相等就跳到不能註冊裡去
:00404C15 4A                      dec edx〈--最後兩位數 的 位數計數器 減一
:00404C16 7417                    je 00404C2F〈--如位數計數器等於0就比較完畢,跳到正確註冊裡去
:00404C18 38FD                    cmp ch, bh
:00404C1A 753A                    jne 00404C56
:00404C1C 4A                      dec edx
:00404C1D 7410                    je 00404C2F
:00404C1F 81E30000FF00            and ebx, 00FF0000
:00404C25 81E10000FF00            and ecx, 00FF0000
:00404C2B 39D9                    cmp ecx, ebx
:00404C2D 7527                    jne 00404C56

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404C0B(C), :00404C16(C), :00404C1D(C)
|
:00404C2F 01C0                    add eax, eax
:00404C31 EB23                    jmp 00404C56

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404BC9(C)
|
:00404C33 8B57FC                  mov edx, dword ptr [edi-04]
:00404C36 29D0                    sub eax, edx
:00404C38 EB1C                    jmp 00404C56

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404BCD(C)
|
:00404C3A 8B46FC                  mov eax, dword ptr [esi-04]
:00404C3D 29D0                    sub eax, edx
:00404C3F EB15                    jmp 00404C56

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404BE7(C), :00404BF4(C)
|
:00404C41 5A                      pop edx
:00404C42 38D9                    cmp cl, bl
:00404C44 7510                    jne 00404C56
:00404C46 38FD                    cmp ch, bh
:00404C48 750C                    jne 00404C56
:00404C4A C1E910                  shr ecx, 10
:00404C4D C1EB10                  shr ebx, 10
:00404C50 38D9                    cmp cl, bl
:00404C52 7502                    jne 00404C56
:00404C54 38FD                    cmp ch, bh

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404BC1(C), :00404C13(C), :00404C1A(C), :00404C2D(C), :00404C31(U)
|:00404C38(U), :00404C3F(U), :00404C44(C), :00404C48(C), :00404C52(C)
|
:00404C56 5F                      pop edi
:00404C57 5E                      pop esi
:00404C58 5B                      pop ebx
:00404C59 C3                      ret

所以我們從上面分析可知道在
:00404BBB 89C6                    mov esi, eax〈--按下D EAX能看到假的註冊碼
:00404BBD 89D7                    mov edi, edx〈--按下D EDX能看到真的註冊碼

我的為
name:zyx
code:381039972

因為我寫這篇文章的物件是那些和我一樣是菜鳥的朋友看的,所以就儘量詳細一點,
希望各位高手不要看到我的文章說我寫得太煩瑣了。
本篇文章只可做交流技術使用,不要用做商業用途。
希望大家轉載時能保持完整!

如有什麼地方寫得不好,或不對的地方,歡迎大家來信指出
我的信箱:tsgmx@21cn.com

相關文章