• 标 题:Reptile V2.01之暴力破解(难度:简单,但反映出一种思路) (6千字)
  • 作 者:KanKer
  • 时 间:2000-10-31 10:34:51
  • 链 接:http://bbs.pediy.com

Reptile V2.01之暴力破解(难度:简单,但反映出一种思路)

来源:整理D盘时发现的,软件上提供的地址为:http://www.sausage.com中的某处,估计已有新版本出来了。
      但据我估计,其加密方式应该不会变的。Size:2M
功能:制作网页背景的好东东(广告语:感觉设计个人风格的网页很难吗?试试它,轻松做个很有味道的背景出来......)
限制:必须注册才能运行。用UPX5.0压缩过的,用Procdump1.62解压后不能正常运行。
    其判断注册的程序是位于windows\system\SausReg.exe
工具:trw2k122,ultraedit
破解过程:

1。用TRW载入运行,设断bpm createwindowex,中断后,下pmodule。

2。一直按F10直到出现NAG屏。在其上的CALL处设断。如下:
0167:004B73BC E8EFEAF4FF      CALL    00405EB0
0167:004B73C1 8B1D48924B00    MOV      EBX,[004B9248]
0167:004B73C7 8B03            MOV      EAX,[EBX]
0167:004B73C9 E87294F7FF      CALL    00430840
0167:004B73CE 8B03            MOV      EAX,[EBX]
0167:004B73D0 BA28744B00      MOV      EDX,004B7428
0167:004B73D5 E87E91F7FF      CALL    00430558
0167:004B73DA 8B0D80924B00    MOV      ECX,[004B9280]
0167:004B73E0 8B03            MOV      EAX,[EBX]
0167:004B73E2 8B15A0C44A00    MOV      EDX,[004AC4A0]
0167:004B73E8 E86B94F7FF      CALL    00430858  **在此处设断,按F8进入**
0167:004B73ED 8B0DD0914B00    MOV      ECX,[004B91D0]
0167:004B73F3 8B03            MOV      EAX,[EBX]
0167:004B73F5 8B15ECC04900    MOV      EDX,[0049C0EC]
0167:004B73FB E85894F7FF      CALL    00430858

3。再次运行中断后,按F8进入,按F10直到出现NAG屏,重复该两步。依次为:
0167:00430877 33C0            XOR      EAX,EAX
0167:00430879 55              PUSH    EBP
0167:0043087A 689B084300      PUSH    DWORD 0043089B
0167:0043087F 64FF30          PUSH    DWORD [FS:EAX]
0167:00430882 648920          MOV      [FS:EAX],ESP
0167:00430885 8BCB            MOV      ECX,EBX
0167:00430887 33D2            XOR      EDX,EDX
0167:00430889 8B45F8          MOV      EAX,[EBP-08]
0167:0043088C 8B30            MOV      ESI,[EAX]
0167:0043088E FF5624          CALL    NEAR [ESI+24]  **在此处设断,按F8进入**
0167:00430891 33C0            XOR      EAX,EAX
0167:00430893 5A              POP      EDX
0167:00430894 59              POP      ECX
0167:00430895 59              POP      ECX
0167:00430896 648910          MOV      [FS:EAX],EDX
*********************
*********************
0167:0042BA32 64FF30          PUSH    DWORD [FS:EAX]
0167:0042BA35 648920          MOV      [FS:EAX],ESP
0167:0042BA38 8B45FC          MOV      EAX,[EBP-04]
0167:0042BA3B 6683B8CE01000000 CMP      WORD [EAX+01CE],BYTE +00
0167:0042BA43 7412            JZ      0042BA57
0167:0042BA45 8B5DFC          MOV      EBX,[EBP-04]
0167:0042BA48 8B55FC          MOV      EDX,[EBP-04]
0167:0042BA4B 8B83D0010000    MOV      EAX,[EBX+01D0]
0167:0042BA51 FF93CC010000    CALL    NEAR [EBX+01CC]  **在此处设断,按F8进入**
0167:0042BA57 33C0            XOR      EAX,EAX
0167:0042BA59 5A              POP      EDX
0167:0042BA5A 59              POP      ECX
0167:0042BA5B 59              POP      ECX
*********************
*********************
0167:004B01AA E8A139F5FF      CALL    00403B50
0167:004B01AF 8D45DC          LEA      EAX,[EBP-24]
0167:004B01B2 E821C0FCFF      CALL    0047C1D8  **在此处设断,按F8进入**
0167:004B01B7 2C01            SUB      AL,01
0167:004B01B9 0F8282000000    JC      NEAR 004B0241
0167:004B01BF 48              DEC      EAX
0167:004B01C0 2C02            SUB      AL,02
0167:004B01C2 0F838A000000    JNC      NEAR 004B0252
0167:004B01C8 33C9            XOR      ECX,ECX
0167:004B01CA B201            MOV      DL,01
0167:004B01CC A188B94900      MOV      EAX,[0049B988]
0167:004B01D1 E862B7F7FF      CALL    0042B938
0167:004B01D6 8945F4          MOV      [EBP-0C],EAX
0167:004B01D9 33C0            XOR      EAX,EAX

4。在该CALL进入后,便进入判断核心:
0167:0047C1D8 55              PUSH    EBP
0167:0047C1D9 8BEC            MOV      EBP,ESP
0167:0047C1DB 83C4E8          ADD      ESP,BYTE -18
0167:0047C1DE 53              PUSH    EBX
0167:0047C1DF 56              PUSH    ESI
0167:0047C1E0 57              PUSH    EDI
0167:0047C1E1 8BF0            MOV      ESI,EAX
0167:0047C1E3 8D7DE8          LEA      EDI,[EBP-18]
0167:0047C1E6 B906000000      MOV      ECX,06
0167:0047C1EB F3A5            REP MOVSD
0167:0047C1ED 8D45E8          LEA      EAX,[EBP-18]
0167:0047C1F0 8B1500B94700    MOV      EDX,[0047B900]
0167:0047C1F6 E87183F8FF      CALL    0040456C
0167:0047C1FB 33C0            XOR      EAX,EAX
0167:0047C1FD 55              PUSH    EBP
0167:0047C1FE 6867C24700      PUSH    DWORD 0047C267
0167:0047C203 64FF30          PUSH    DWORD [FS:EAX]
0167:0047C206 648920          MOV      [FS:EAX],ESP
0167:0047C209 E84AFAFFFF      CALL    0047BC58  **此CALL为判断是否注册处,标志存放于AL**
0167:0047C20E A2D4A94B00      MOV      [004BA9D4],AL  **若AL=0,则未注册,否则注册**
0167:0047C213 803DD4A94B0000  CMP      BYTE [004BA9D4],00
0167:0047C21A 752D            JNZ      0047C249  **在此设断,把此处改为JMP**
0167:0047C21C E86FFFFFFF      CALL    0047C190
0167:0047C221 84C0            TEST    AL,AL
0167:0047C223 7410            JZ      0047C235
0167:0047C225 813DD8A94B009001+CMP      DWORD [004BA9D8],0190
0167:0047C22F 7D04            JNL      0047C235
0167:0047C231 B302            MOV      BL,02
0167:0047C233 EB16            JMP      SHORT 0047C24B
0167:0047C235 8D45E8          LEA      EAX,[EBP-18]
0167:0047C238 E803F7FFFF      CALL    0047B940
0167:0047C23D 84C0            TEST    AL,AL
0167:0047C23F 7404            JZ      0047C245
0167:0047C241 B303            MOV      BL,03

在47c21a处,下r fl z,按F5看看,OK,程序正常运行,因此可知,只须把此处的75改为EB即可。
但该程序由UPX压缩,没法直接改,便下断bpm 47c21a,看是什么地方往此处写的75。

5。重新运行,第二次中断后,你会来到下处:
0167:00561061 11DB            ADC      EBX,EBX
0167:00561063 730B            JNC      00561070
0167:00561065 8A06            MOV      AL,[ESI]  **在此处给AL赋值**
0167:00561067 46              INC      ESI
0167:00561068 8807            MOV      [EDI],AL
0167:0056106A 47              INC      EDI  **程序在此处中断,edi=47c21a,al=75**
0167:0056106B EBEB            JMP      SHORT 00561058

看看EDI恰好等于47c21a,AL恰好等于75。呵呵,看看75是从哪里来的呢?——[ESI]。

6。下断bpm esi-1,重新运行。结果发现程序仍中断于0167:0056106A,由此可知esi-1处的代码没被
改变过。

7。下指令d esi-1,抄下内存中的代码。
  75 2d 12 fc 9e 88 a0 b1 a0 81 11 d8 90
  --
8。用ultraedit打开Reptile.exe,查找上述代码,把75改为EB即可。
  运行一下,作几个背景瞧瞧,呵呵,成功了吧?


                                <Cracked by KanKer>