• 标 题:破解心得之3DMark2001篇 (10千字)
  • 作 者:时空幻影
  • 时 间:2001-4-18 14:34:06
  • 链 接:http://bbs.pediy.com

破解心得之3DMark2001篇
作者:时空幻影
时间:2001年4月17日
工具:W23DASM白金版汉化版、TRW2000 v1.22注册版

    用TRW2000载入3DMark2001.EXE后按F5让程序继续运行,然后点菜单中的“Register->Register 3DMark2001...”,
输入User Name:时空幻影
输入Registration Code:12345-67890-09876-54321
按Ctrl+N激活TRW2000,用BPX HMEMCPY设置断点,再按F5,点OK,程序会被拦。
输入PMODULE后再回车,进入3DMark2001的领空,再一直按F10到下面这个地方:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00439CD4(C)
|
:00439D33 8B4B48                  mov ecx, dword ptr [ebx+48]
:00439D36 8D542410                lea edx, dword ptr [esp+10]
:00439D3A 52                      push edx
:00439D3B 8D442424                lea eax, dword ptr [esp+24]
:00439D3F 50                      push eax
:00439D40 E8AB7CFDFF              call 004119F0            <--按F8进入
:00439D45 83F803                  cmp eax, 00000003
:00439D48 7737                    ja 00439D81
:00439D4A FF2485189E4300          jmp dword ptr [4*eax+00439E18]
:00439D51 6A01                    push 00000001
:00439D53 8BCD                    mov ecx, ebp

进入后再一直按F10到下面这个地方:

* Referenced by a CALL at Address:
|:00439D40 
|
:004119F0 8B442408                mov eax, dword ptr [esp+08]
:004119F4 56                      push esi
:004119F5 57                      push edi
:004119F6 6A01                    push 00000001
:004119F8 8BF9                    mov edi, ecx
:004119FA 8B4C2410                mov ecx, dword ptr [esp+10]
:004119FE 50                      push eax
:004119FF 51                      push ecx
:00411A00 8BCF                    mov ecx, edi
:00411A02 E839030000              call 00411D40            <--按F8进入
:00411A07 8BF0                    mov esi, eax
:00411A09 85F6                    test esi, esi
:00411A0B 7507                    jne 00411A14
:00411A0D 8BCF                    mov ecx, edi
:00411A0F E8ACFEFFFF              call 004118C0

进入后再一直按F10到下面这个地方:

* Possible StringData Ref from Code Obj ->"竴 j"
                                  |
:00411D42 68E2186600              push 006618E2
:00411D47 64A100000000            mov eax, dword ptr fs:[00000000]
:00411D4D 50                      push eax
:00411D4E 64892500000000          mov dword ptr fs:[00000000], esp
:00411D55 83EC24                  sub esp, 00000024
:00411D58 53                      push ebx
:00411D59 56                      push esi
:00411D5A 8BF1                    mov esi, ecx
:00411D5C 57                      push edi
:00411D5D 8974240C                mov dword ptr [esp+0C], esi
:00411D61 E8CA21FFFF              call 00403F30
:00411D66 8B00                    mov eax, dword ptr [eax]
:00411D68 33DB                    xor ebx, ebx
:00411D6A 3BC3                    cmp eax, ebx
:00411D6C 0F85E6010000            jne 00411F58
:00411D72 8B7C2444                mov edi, dword ptr [esp+44]
:00411D76 57                      push edi
:00411D77 8BCE                    mov ecx, esi
:00411D79 E8A2FCFFFF              call 00411A20            <--按F8进入
:00411D7E 84C0                    test al, al
:00411D80 0F84B9010000            je 00411F3F
:00411D86 385C2448                cmp byte ptr [esp+48], bl
:00411D8A 0F848C010000            je 00411F1C
:00411D90 8B5704                  mov edx, dword ptr [edi+04]
:00411D93 3BD3                    cmp edx, ebx
:00411D95 7506                    jne 00411D9D

进入后再一直按F10到下面这个地方:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00411A84(C)
|
:00411AA6 8B4C2410                mov ecx, dword ptr [esp+10]
:00411AAA 8B4904                  mov ecx, dword ptr [ecx+04]
:00411AAD 8B11                    mov edx, dword ptr [ecx]
:00411AAF 8D442414                lea eax, dword ptr [esp+14]
:00411AB3 50                      push eax
:00411AB4 895C2430                mov dword ptr [esp+30], ebx
:00411AB8 FF520C                  call [edx+0C]            <--按F8进入
:00411ABB 8AD8                    mov bl, al
:00411ABD 8B442418                mov eax, dword ptr [esp+18]
:00411AC1 85C0                    test eax, eax
:00411AC3 5F                      pop edi
:00411AC4 5D                      pop ebp
:00411AC5 741C                    je 00411AE3
:00411AC7 8D48FF                  lea ecx, dword ptr [eax-01]
:00411ACA 8A01                    mov al, byte ptr [ecx]
:00411ACC 84C0                    test al, al
:00411ACE 740A                    je 00411ADA
:00411AD0 3CFF                    cmp al, FF
:00411AD2 7406                    je 00411ADA
:00411AD4 FEC8                    dec al
:00411AD6 8801                    mov byte ptr [ecx], al
:00411AD8 EB09                    jmp 00411AE3

进入后再一直按F10到下面这个地方:

* Reference To: MFC42.Ordinal:0337, Ord:0337h
                                  |
:005FE0E4 E87F290000              Call 00600A68
:005FE0E9 83C404                  add esp, 00000004
:005FE0EC 8D542450                lea edx, dword ptr [esp+50]
:005FE0F0 52                      push edx
:005FE0F1 6A14                    push 00000014
:005FE0F3 50                      push eax
:005FE0F4 8D4C241C                lea ecx, dword ptr [esp+1C]
:005FE0F8 89442420                mov dword ptr [esp+20], eax
:005FE0FC E8AFA9F9FF              call 00598AB0
:005FE101 8B442414                mov eax, dword ptr [esp+14]
:005FE105 83C050                  add eax, 00000050
:005FE108 89442418                mov dword ptr [esp+18], eax
:005FE10C 8944241C                mov dword ptr [esp+1C], eax
:005FE110 8D4C2410                lea ecx, dword ptr [esp+10]
:005FE114 51                      push ecx
:005FE115 8D542434                lea edx, dword ptr [esp+34]
:005FE119 52                      push edx
:005FE11A 8D442428                lea eax, dword ptr [esp+28]
:005FE11E 50                      push eax
:005FE11F 8BCE                    mov ecx, esi
:005FE121 C644245402              mov [esp+54], 02
:005FE126 E8450A0000              call 005FEB70            <--把注册码的每个字符(除开"-")与密码表中的字符比较,
:005FE12B 84C0                    test al, al                求出该字符在密码表中的序号。
:005FE12D 755B                    jne 005FE18A            <--跳至注册码计算部分
:005FE12F 8B4C2418                mov ecx, dword ptr [esp+18]
:005FE133 8B542414                mov edx, dword ptr [esp+14]
:005FE137 51                      push ecx
:005FE138 52                      push edx
:005FE139 8D4C2418                lea ecx, dword ptr [esp+18]
:005FE13D C644245001              mov [esp+50], 01
:005FE142 E849ADE6FF              call 00468E90
:005FE147 8B442414                mov eax, dword ptr [esp+14]
:005FE14B 50                      push eax

以下为注册码计算部分:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005FE12D(C)
|
:005FE18A 8B4C2414                mov ecx, dword ptr [esp+14]    <--[ECX]="12345678900987654321"中每个
                                                                    字符在密码表中的序号,每个占4个字节
:005FE18E 8B5108                  mov edx, dword ptr [ecx+08]
:005FE191 8B410C                  mov eax, dword ptr [ecx+0C]
:005FE194 8B6904                  mov ebp, dword ptr [ecx+04]
:005FE197 8B742428                mov esi, dword ptr [esp+28]    <--ESI为密码表的长度,即21h
:005FE19B 03C2                    add eax, edx
:005FE19D 8B11                    mov edx, dword ptr [ecx]
:005FE19F 03C5                    add eax, ebp
:005FE1A1 03C2                    add eax, edx
:005FE1A3 33D2                    xor edx, edx
:005FE1A5 F7F6                    div esi
:005FE1A7 8B5910                  mov ebx, dword ptr [ecx+10]
:005FE1AA 3BDA                    cmp ebx, edx
:005FE1AC 0F8510010000            jne 005FE2C2                    <--这个和以下的JNE都不能跳转,否则GAME OVER
:005FE1B2 8B511C                  mov edx, dword ptr [ecx+1C]
:005FE1B5 8B4120                  mov eax, dword ptr [ecx+20]
:005FE1B8 8B5918                  mov ebx, dword ptr [ecx+18]
:005FE1BB 03C2                    add eax, edx
:005FE1BD 8B5114                  mov edx, dword ptr [ecx+14]
:005FE1C0 03C3                    add eax, ebx
:005FE1C2 03C2                    add eax, edx
:005FE1C4 33D2                    xor edx, edx
:005FE1C6 F7F6                    div esi
:005FE1C8 8B6924                  mov ebp, dword ptr [ecx+24]
:005FE1CB 3BEA                    cmp ebp, edx
:005FE1CD 0F85EF000000            jne 005FE2C2
:005FE1D3 8B5130                  mov edx, dword ptr [ecx+30]
:005FE1D6 8B4134                  mov eax, dword ptr [ecx+34]
:005FE1D9 03C2                    add eax, edx
:005FE1DB 03412C                  add eax, dword ptr [ecx+2C]
:005FE1DE 034128                  add eax, dword ptr [ecx+28]
:005FE1E1 33D2                    xor edx, edx
:005FE1E3 F7F6                    div esi
:005FE1E5 8B5938                  mov ebx, dword ptr [ecx+38]
:005FE1E8 3BDA                    cmp ebx, edx
:005FE1EA 0F85D2000000            jne 005FE2C2
:005FE1F0 8B5110                  mov edx, dword ptr [ecx+10]
:005FE1F3 8D042B                  lea eax, dword ptr [ebx+ebp]
:005FE1F6 03C2                    add eax, edx
:005FE1F8 33D2                    xor edx, edx
:005FE1FA F7F6                    div esi
:005FE1FC 8B793C                  mov edi, dword ptr [ecx+3C]
:005FE1FF 3BFA                    cmp edi, edx
:005FE201 0F85B9000000            jne 005FE2C0
:005FE207 8B5124                  mov edx, dword ptr [ecx+24]
:005FE20A 8D041F                  lea eax, dword ptr [edi+ebx]
:005FE20D 03C2                    add eax, edx
:005FE20F 33D2                    xor edx, edx
:005FE211 F7F6                    div esi
:005FE213 8B6940                  mov ebp, dword ptr [ecx+40]
:005FE216 3BEA                    cmp ebp, edx
:005FE218 0F85A2000000            jne 005FE2C0
:005FE21E 8D042F                  lea eax, dword ptr [edi+ebp]
:005FE221 03C3                    add eax, ebx
:005FE223 33D2                    xor edx, edx
:005FE225 F7F6                    div esi
:005FE227 8B5944                  mov ebx, dword ptr [ecx+44]
:005FE22A 3BDA                    cmp ebx, edx
:005FE22C 0F858E000000            jne 005FE2C0
:005FE232 8D042B                  lea eax, dword ptr [ebx+ebp]
:005FE235 03C7                    add eax, edi
:005FE237 33D2                    xor edx, edx
:005FE239 F7F6                    div esi
:005FE23B 8B4148                  mov eax, dword ptr [ecx+48]
:005FE23E 3BC2                    cmp eax, edx
:005FE240 757E                    jne 005FE2C0
:005FE242 03C3                    add eax, ebx
:005FE244 03C5                    add eax, ebp
:005FE246 33D2                    xor edx, edx
:005FE248 F7F6                    div esi
:005FE24A 39514C                  cmp dword ptr [ecx+4C], edx
:005FE24D 7571                    jne 005FE2C0
:005FE24F 51                      push ecx

  • 标 题:3DMark2001注册机源代码(C++ Build 5.0编译通过) (1千字)
  • 作 者:时空幻影
  • 时 间:2001-4-18 14:37:05

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString Passcode="ABCDEFHJKLMNPQRSTUVWXYZ0123456789";
  AnsiString r;
  AnsiString s1,s2,s3,s4;
  int i,k,t1,t2,t3,m[5];
  if (Edit1->Text=="") r="shikonghuanying@sina.com";
    else
      {
        r=Edit1->Text.Delete(6,2);
        r=r.Delete(11,2);
        r=r.Delete(16,2);
        r=r.Delete(3,1);
      }
  for (i=1,t1=0;i<5;i++)
    {
      k=int(r[i])%0x21;
      t1=t1+k;
      s1=s1+Passcode[k+1];
    }
  s1=s1+Passcode[t1%0x21+1];
  for (i=6,t2=0;i<10;i++)
    {
      k=int(r[i])%0x21;
      t2=t2+k;
      s2=s2+Passcode[k+1];
    }
  s2=s2+Passcode[t2%0x21+1];
  for (i=11,t3=0;i<15;i++)
    {
      k=int(r[i])%0x21;
      t3=t3+k;
      s3=s3+Passcode[k+1];
    }
  s3=s3+Passcode[t3%0x21+1];
  m[0]=(t1+t2+t3)%0x21;
  m[1]=(t2+t3+m[0])%0x21;
  m[2]=(t3+m[0]+m[1])%0x21;
  m[3]=(m[0]+m[1]+m[2])%0x21;
  m[4]=(m[1]+m[2]+m[3])%0x21;
  s4+=Passcode[m[0]+1];
  s4+=Passcode[m[1]+1];
  s4+=Passcode[m[2]+1];
  s4+=Passcode[m[3]+1];
  s4+=Passcode[m[4]+1];
  Edit1->Text=s1+"-"+s2+"-"+s3+"-"+s4;
}
//---------------------------------------------------------------------------