EMEDITOR V3.0破解過程~~~~~呵呵~~~~~我第一次寫過程~~~~累死我了~~~~呵呵 (14千字)

看雪資料發表於2001-01-11

破解EMEDITOR v3.0
小弟第一次寫過程,有不對的地方大家指正~~~~呵呵~~
EMEDITOR 3.0是一個完全可以代替WINDOWS下NOTEBOOK的小玩意~~~~
這東西使用30天就需要註冊,現將註冊過程寫一下
這個軟體在我的主頁有下載http://zop.yeah.net/download/crem.zip 660K左右
我使用的工具:TRW2000+W32DASM89+ULTRAEDIT
安裝完EMEDITOR後執行並選說明中的關於,關於註冊資訊點那個輸入序列號:
這時彈出一對話視窗,需要填一個分為四部分的序列號,我們設這四個部分為
X1,X2,X3,X4
我第一次填的是 X1=1234,X2=4321,X3=1324,X4=1423
執行TRW2000 下 BPX HMEMCPY(小弟暫時只會用這個斷點~~~~呵呵~~~~~)
順利攔到,我們PMODULE 程式蹦到417A01處,見下:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00417A0A(C)
|
:004179EF 53                      push ebx
:004179F0 8D86F2030000            lea eax, dword ptr [esi+000003F2]
:004179F6 53                      push ebx
:004179F7 50                      push eax
:004179F8 FF7508                  push [ebp+08]

* Reference To: USER32.GetDlgItemInt, Ord:0103h
                                  |
:004179FB FF1588434300            Call dword ptr [00434388]
:00417A01 668907                  mov word ptr [edi], ax      ----->就是蹦到這裡了~~呵呵,看一眼EAX
:00417A04 46                      inc esi                        | ,裡面裝的就是我們的X1,往下走……
:00417A05 47                      inc edi                        |
:00417A06 47                      inc edi                        |
:00417A07 83FE04                  cmp esi, 00000004              |  這裡比較ESI和4如果小於則往上蹦(就是
:00417A0A 7CE3                    jl 004179EF                    |  上面那段程式碼~~~直到我們序列號的四個部分
:00417A0C 8D45F4                  lea eax, dword ptr [ebp-0C]    |  完全存進EBP-C中(不知道這麼說合不合適~)
:00417A0F 50                      push eax                        | 
:00417A10 E8F5FEFFFF              call 0041790A                  |  呵呵~~~~~一個CALL,看看底下,一個對比,如果
:00417A15 3BC3                    cmp eax, ebx                    |  是,怎麼怎麼樣,不是又怎麼怎麼樣,很顯然這是
:00417A17 5F                      pop edi                    -----> 關鍵CALL,我們按F8跟進去 HAVE A LOOK ~~~~~
****************************************************************************************************************
* Referenced by a CALL at Addresses:
|:00417A10  , :00417B90 
|
:0041790A 56                      push esi                      --->這段程式碼比較作用是
:0041790B 8B742408                mov esi, dword ptr [esp+08]        將我們輸入的X1,即1234除以10後
:0041790F 57                      push edi                          和171比較,171哪來得?就是那個
:00417910 6A0A                    push 0000000A                      AB轉換成十進位制得到的,如果是呢
:00417912 0FB706                  movzx eax, word ptr [esi]          就繼續,不是的話~~~~嘿嘿嘿嘿~~
:00417915 99                      cdq                                你就等著出序列號錯誤吧~~~由於我
:00417916 59                      pop ecx                            們輸入的是1234,不符合要求,所以
:00417917 F7F9                    idiv ecx                          這時我們對X1進行第一次修正,現在
:00417919 3DAB000000              cmp eax, 000000AB                  新的X1=171x 其中“x”為任意數,
:0041791E 7405                    je 00417925                        我的是X1=1710,接著往下走~~~~~~
:00417920 6A01                    push 00000001                      走…………………………………………
:00417922 58                      pop eax                            走……………………………………
:00417923 EB15                    jmp 0041793A                  ---->走………………………………

* Referenced by a (U)nconditional or (C)onditional Jump at Address:  走…………………………
|:0041791E(C)
|
:00417925 668B7E06                mov di, word ptr [esi+06]          走到此處,程式將我們的X4移到DI中
:00417929 56                      push esi                          走……………………
:0041792A E834FFFFFF              call 00417863                      走到此處又有一個CALL,不要著急,看看
:0041792F 85C0                    test eax, eax                      下面,呵呵~~~~又是一個關鍵CALL我們跟
:00417931 7507                    jne 0041793A                      進去瞧瞧~~~~~~~~
###################################################################################################################
* Referenced by a CALL at Address:
|:0041792A 
|
:00417863 56                      push esi                      ---->到目前ESI中存放的還是我們輸入的序列號   
:00417864 8B742408                mov esi, dword ptr [esp+08]        走………………………………………………
:00417868 668B4602                mov ax, word ptr [esi+02]          這行將我們的X2移入AX中
:0041786C 6683660600              and word ptr [esi+06], 0000       
:00417871 663D0F27                cmp ax, 270F                      比較X2和9999
:00417875 0F8788000000            ja 00417903                        大於的話蹦到 417903,不過不大可能大於
:0041787B 668B4E04                mov cx, word ptr [esi+04]          這行將我們的X3移入CX中
:0041787F 6681F90F27              cmp cx, 270F                      比較X2和9999
:00417884 777D                    ja 00417903                        大於的話蹦到 417903,不過不大可能大於
:00417886 6685C0                  test ax, ax                       
:00417889 7474                    je 004178FF                       
:0041788B 663DAE08                cmp ax, 08AE                      比較X2和2222,X2和5678,我們的X2=4321
:0041788F 746E                    je 004178FF                        沒有蹦~~後來發現蹦了就DIE了
:00417891 663D2E16                cmp ax, 162E                     
:00417895 7468                    je 004178FF                       
:00417897 53                      push ebx                         
:00417898 55                      push ebp                         
:00417899 57                      push edi                         
:0041789A 6A0A                    push 0000000A                      下面會提到這個A
:0041789C 0FB7F9                  movzx edi, cx                      把X3放入EDI
:0041789F 0FB70E                  movzx ecx, word ptr [esi]          把X1放入ECX
:004178A2 0FB7C0                  movzx eax, ax                     
:004178A5 89442418                mov dword ptr [esp+18], eax        把X2放入ESP+18中
:004178A9 8BC1                    mov eax, ecx                        把X1放入EAX中
:004178AB 99                      cdq                               
:004178AC 5B                      pop ebx                            把上面那個A放到EBX中
:004178AD F7FB                    idiv ebx                            用X1/10 1710÷10=171整數放入EAX,餘數放入EDX
:004178AF 6A64                    push 00000064                      下面會提到這個64
:004178B1 5D                      pop ebp                           
:004178B2 55                      push ebp                           
:004178B3 8BD8                    mov ebx, eax                        把結果的整數放入EBX
:004178B5 8BC7                    mov eax, edi                        把X3放入EAX中
:004178B7 99                      cdq                               
:004178B8 F7FD                    idiv ebp                            用X3除以100(就是上面那個64)
:004178BA 8B542418                mov edx, dword ptr [esp+18]        把X2放入EDX中
:004178BE 03D3                    add edx, ebx                        把X2+(X1/10的整數)放入EDX
:004178C0 03C2                    add eax, edx                        把X2+(X1/10的整數)+(X3/100的整數)放入EAX
:004178C2 03C7                    add eax, edi                        用X2+(X1/10的整數)+(X3/100的整數)+X3放入
:004178C4 5F                      pop edi                            EAX
:004178C5 99                      cdq                                用X2+(X1/10的整數)+(X3/100的整數)+X3除以
:004178C6 F7FF                    idiv edi                            100,整數放入EAX,餘數放入EDX
:004178C8 8B442414                mov eax, dword ptr [esp+14]        把X2放入EAX中
:004178CC 55                      push ebp                           
:004178CD 5B                      pop ebx                           
:004178CE 55                      push ebp                           
:004178CF 8B3C95288C4300          mov edi, dword ptr [4*edx+00438C28] 把剛才那個餘數x4+438C28中的值放入EDI中
:004178D6 99                      cdq                                關於這個438C28文章最後有它的值
:004178D7 6BFF64                  imul edi, 00000064                  用EDIx100,得的結果放入EDI中我們這裡是2300
:004178DA F7FB                    idiv ebx                            把X2/100的整數放入EAX中,餘數放入EDX中
:004178DC 8BD8                    mov ebx, eax                        把X2/100的整數放入EBX中
:004178DE 8BC1                    mov eax, ecx                        把X1放入EAX中
:004178E0 99                      cdq                                用X1/100,結果整數放入EAX中,餘數放入EDX中
:004178E1 F7FD                    idiv ebp                           
:004178E3 03CB                    add ecx, ebx                        把X1+(X2/100的整數)放入ECX中
:004178E5 03C1                    add eax, ecx                        把X1+(X2/100的整數)+(X1/100的整數)放入EAX
:004178E7 59                      pop ecx                            把100放入ECX中
:004178E8 99                      cdq                                用[X1+(X2/100的整數)+(X1/100的整數)]/100
:004178E9 F7F9                    idiv ecx                            結果整數放入EAX中,餘數放入EDX中
:004178EB 8B0495288C4300          mov eax, dword ptr [4*edx+00438C28] 把(剛剛得到的餘數x4+438C28)的值放入EAX中我們這裡是69
:004178F2 03F8                    add edi, eax                        EDI=EDI+EAX=2369,即把這兩次的結果相加我們設它為X4`
:004178F4 33C0                    xor eax, eax                        清空EAX
:004178F6 66897E06                mov word ptr [esi+06], di          把ESI+6的值用X4`代替
:004178FA 5F                      pop edi                            走…………………………………………………………
:004178FB 5D                      pop ebp                            走……………………………………………………
:004178FC 5B                      pop ebx                            走………………………………………………
:004178FD EB07                    jmp 00417906                        蹦…………………………………………


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004178FD(U)
|
:00417906 5E                      pop esi                            走……………………………………
:00417907 C20400                  ret 0004                            回去嘍…………………………

#######################################################################################################################
:00417933 663B7E06                cmp di, word ptr [esi+06]          呵呵~~~讓我們來比較一下DI中是我們的X4,ESI+6的值
                                                                    是我們的X4`
:00417937 0F95C0                  setne al                          如果不一樣那麼就把AL改為1,聰明的你一定想到了這個
                                                                    X4`就是正確的序列號的最後一部分~~現在我們修正
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:X4=X4`=2369
|:00417923(U), :00417931(C)
|
:0041793A 5F                      pop edi                           
:0041793B 5E                      pop esi
:0041793C C20400                  ret 0004                            返回
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00417923(U), :00417931(C)
|
:0041793A 5F                      pop edi                           
:0041793B 5E                      pop esi
:0041793C C20400                  ret 0004                          返回
********************************************************************************************************************
:00417A15 3BC3                    cmp eax, ebx                      這時的EBX本身是0,如果沒出以外的話你的EAX
:00417A17 5F                      pop edi                            現在也該是0,比較一下,一樣呀~~~呵呵
:00417A18 742A                    je 00417A44                        那就蹦到正確的地方去吧
:00417A1A 33C9                    xor ecx, ecx
:00417A1C 83F802                  cmp eax, 00000002
:00417A1F 0F95C1                  setne cl
:00417A22 49                      dec ecx
:00417A23 6A30                    push 00000030
:00417A25 83E103                  and ecx, 00000003
:00417A28 81C154040000            add ecx, 00000454
:00417A2E 51                      push ecx
:00417A2F E8E3ACFFFF              call 00412717                  這是出錯的 CALL

總結:
輸入X1必須為171x,
X4={{[X2+(X1/10的整數)+(X3/100的整數)+X3]/100的餘數}x4在下表中的位置的值}x100
  +{{[X1+(X2/100的整數)+(X1/100的整數)]/100的餘數}x4在下表中的位置的值}
如X1=1710,X2=4321,X3=1324
  根據上式得X4=2369

附438C28表:
260000005B0000006200000036000000340000006600000013000000350000001900000054000000
3F000000440000004C000000380000005D0000003300000056000000610000004200000021000000
3E0000002D000000230000000E0000001E0000005F00000057000000120000001B00000017000000
22000000580000002C000000630000005C000000180000002700000041000000590000004D000000
150000005A000000530000000B000000050000001C000000100000002E0000004900000040000000
0D00000007000000500000003D00000032000000460000000A000000430000002B00000000000000
3B000000480000005E0000004E000000510000001F000000200000003A000000010000002A000000
45000000550000004A000000020000005200000027000000030000004B000000080000003C000000
0F0000001400000024000000250000002800000029000000160000001D0000001A00000011000000
2F000000390000000900000047000000060000004F00000004000000310000000C00000030000000

後記:
      本人以前沒寫過破解過程,真沒想到寫過程這麼費勁,我也是看著前輩們的教程入的門
      在此小弟對以前寫過程引導我們入門的前輩們說一聲你們辛苦了~~~
      另外,有人可能會問,文章中提到的三個工具好象只用到了一個,其實W32DASM和ULTRA
      EDIT對破解這個軟體確實沒有多大作用,但是小弟要用它們進行復制貼上呀~~~~呵呵
      最後我還想問一個問題,EMEDITOR V3.0的說明檔案中說可以註冊不同的使用者數量,小弟
      一直沒找到在哪~~~~~哪位大嚇知道告訴小弟一聲~~~~謝謝! 



                                                            偽裝者
                                                  破解樂園:http://zop.yeah.net
                                                            http://www.y6y6.net

相關文章