Delphi學習寶典1.2版的破解(vb版)

看雪資料發表於2015-11-15

標 題:Delphi學習寶典1.2版的破解(vb版)

發信人:mejy

時 間:2003年11月02日 08:36 

詳細資訊: 




Delphi學習寶典1.2版的破解(vb版)
軟體簡介:Delphi是全新的視覺化程式設計環境,為我們提供了一種方便、快捷的Windows應用程式開發工具。它使用了Microsoft Windows圖形使用者介面的許多先進特性和設計思想,採用了彈性可重複利用的完整的物件導向程式語言(Object-Oriented Language)、當今世界上最快的編輯器、最為領先的資料庫技術。對於廣大的程式開發人員來講,使用Delphi開發應用軟體,無疑會大大地提高程式設計效率,而且隨著應用的深入,您將會發現程式設計不再是枯燥無味的工作――Delphi的每一個設計細節,都將帶給您一份欣喜。 
破解宣告:只為技術而破解!
最近心血來潮,找了些vb的咚咚,發現有的也不是很難得,這個軟體的這個註冊碼演算法很簡單,嚷大俠見笑了,需要重啟驗證!
笨辦法:當檢測重啟驗證的時候,不行就用萬能斷點,雖然慢點,但一般都能發現目標
受fly兄登錄檔終結者的啟發在MSVBVM60.rtcMidCharBstr是破解vb程式的一個很有效的斷點!在004221FA處設斷,他的作用是從字串的位置i上得到相應的字元。
註冊演算法的開始
004221D3   > 66:3BB5 1CFFFF>CMP SI,WORD PTR SS:[EBP-E4]
004221DA   . 0F8F 94000000  JG Delphi學.00422274[
004221E0   . 8B55 D0        MOV EDX,DWORD PTR SS:[EBP-30]
004221E3   . 8D45 B4        LEA EAX,DWORD PTR SS:[EBP-4C]
004221E6   . 0FBFCE         MOVSX ECX,SI
004221E9   . 50             PUSH EAX
004221EA   . 51             PUSH ECX
004221EB   . 52             PUSH EDX
004221EC   . C745 BC 010000>MOV DWORD PTR SS:[EBP-44],1
004221F3   . C745 B4 020000>MOV DWORD PTR SS:[EBP-4C],2
004221FA   . FF15 80104000  CALL DWORD PTR DS:[<&MSVBVM60.#631>]               ;  MSVBVM60.rtcMidCharBstr
//設斷
00422200   . 50             PUSH EAX
00422201   . 8D45 D4        LEA EAX,DWORD PTR SS:[EBP-2C]
00422204   . 50             PUSH EAX
00422205   . 6A 01          PUSH 1
00422207   . FF15 E8104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaLsetFixstrFree>>;  MSVBVM60.__vbaLsetFixstrFree
0042220D   . 8D4D B4        LEA ECX,DWORD PTR SS:[EBP-4C]
00422210   . FF15 14104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeVar>]       ;  MSVBVM60.__vbaFreeVar
00422216   . 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
00422219   . 51             PUSH ECX
0042221A   . 6A 01          PUSH 1
0042221C   . FF15 74104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrFixstr>]     ;  MSVBVM60.__vbaStrFixstr
00422222   . 8BD0           MOV EDX,EAX
00422224   . 8D4D C8        LEA ECX,DWORD PTR SS:[EBP-38]
00422227   . FF15 60114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrMove>]       ;  MSVBVM60.__vbaStrMove
0042222D   . 50             PUSH EAX
0042222E   . FF15 30104000  CALL DWORD PTR DS:[<&MSVBVM60.#516>]               ;  MSVBVM60.rtcAnsiValueBstr
00422234   . 8B55 C8        MOV EDX,DWORD PTR SS:[EBP-38]
00422237   . 52             PUSH EDX
00422238   . 8BD8           MOV EBX,EAX
0042223A   . 8D45 D4        LEA EAX,DWORD PTR SS:[EBP-2C]
0042223D   . 50             PUSH EAX
0042223E   . 6A 01          PUSH 1
00422240   . FF15 3C104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaLsetFixstr>]    ;  MSVBVM60.__vbaLsetFixstr
00422246   . 0FBFCB         MOVSX ECX,BX
00422249   . 03CF           ADD ECX,EDI
0042224B   . 0F80 92030000  JO Delphi學.004225E3
00422251   . 8BF9           MOV EDI,ECX
00422253   . 8D4D C8        LEA ECX,DWORD PTR SS:[EBP-38]
00422256   . FF15 80114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]       ;  MSVBVM60.__vbaFreeStr
0042225C   . 8B5D 08        MOV EBX,DWORD PTR SS:[EBP+8]
0042225F   . B8 01000000    MOV EAX,1
00422264   . 66:03C6        ADD AX,SI
00422267   . 0F80 76030000  JO Delphi學.004225E3   //當使用者名稱取完後,跳出
0042226D   . 8BF0           MOV ESI,EAX
0042226F   .^E9 5FFFFFFF    JMP Delphi學.004221D3   
 //以上的作用是取使用者名稱的相應字元的ascii碼累加,存入eax中,並轉入edi
例如mejy ----'m'+'e'+'j'+'y'==1b5
00422274   > 8B13           MOV EDX,DWORD PTR DS:[EBX]
00422276   . 69FF 87D61200  IMUL EDI,EDI,12D687   乘法將使用者名稱ascii碼的累加結果
與12d687(十六進位制)相乘,結果存入edi中
這就是註冊碼的演算法了,很簡單!(他的十進位制就是他的註冊碼)
0042227C   . 0F80 61030000  JO Delphi學.004225E3
00422282   . 53             PUSH EBX
00422283   . 897D CC        MOV DWORD PTR SS:[EBP-34],EDI
00422286   . FF92 00030000  CALL DWORD PTR DS:[EDX+300]
0042228C 8B3D 5C104000  MOV EDI,DWORD PTR 
DS:[<&MSVBVM60.__vbaObjSet>]     ;  MSVBVM60.__vbaObjSet
00422292   . 50             PUSH EAX
00422293   . 8D45 C4        LEA EAX,DWORD PTR SS:[EBP-3C]
00422296   . 50             PUSH EAX
00422297   . FFD7           CALL EDI
;  <&MSVBVM60.__vbaObjSet>

00422299   . 8D55 C8        LEA EDX,DWORD PTR SS:[EBP-38]
0042229C   . 8BF0           MOV ESI,EAX
0042229E   . 8B0E           MOV ECX,DWORD PTR DS:[ESI]
004222A0   . 52             PUSH EDX
004222A1   . 56             PUSH ESI
004222A2   . FF91 A0000000  CALL DWORD PTR DS:[ECX+A0]
004222A8   . DBE2           FCLEX
004222AA   . 85C0           TEST EAX,EAX
004222AC   . 7D 12          JGE SHORT Delphi學.004222C0
004222AE   . 68 A0000000    PUSH 0A0
004222B3   . 68 C0874000    PUSH Delphi學.004087C0
004222B8   . 56             PUSH ESI
004222B9   . 50             PUSH EAX
004222BA   . FF15 44104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresultCheckObj>;  MSVBVM60.__vbaHresultCheckObj
004222C0   > DB45 CC        FILD DWORD PTR SS:[EBP-34]   //經過浮點運算得到上面結果的,十進位制
004222C3   . 8B45 C8        MOV EAX,DWORD PTR SS:[EBP-38] 
//輸入的假序列號入棧
004222C6   . 50             PUSH EAX
004222C7   . DD9D 08FFFFFF  FSTP QWORD PTR SS:[EBP-F8]
  //此時能看見正確序列號的浮點數形式
004222CD   . FF15 00114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8Str>]         ;  MSVBVM60.__vbaR8Str 
//將字串轉化為雙精度型
004222D3   . DC9D 08FFFFFF  FCOMP QWORD PTR SS:[EBP-F8]
//假序列號的浮點數形式
004222D9   . DFE0           FSTSW AX
004222DB   . F6C4 40        TEST AH,40           //比較語句
004222DE     74 07          JE SHORT Delphi學.004222E7    //關鍵跳轉  爆破點1
004222E0   . B8 01000000    MOV EAX,1
004222E5   . EB 02          JMP SHORT Delphi學.004222E9
004222E7   > 33C0           XOR EAX,EAX
004222E9   > F7D8           NEG EAX
004222EB   . 8D4D C8        LEA ECX,DWORD PTR SS:[EBP-38]
004222EE   . 8BF0           MOV ESI,EAX
004222F0   . FF15 80114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeStr>]      
;  MSVBVM60.__vbaFreeStr
004222F6   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
004222F9   . FF15 7C114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeObj>]
 ;  MSVBVM60.__vbaFreeObj
004222FF   . 66:85F6        TEST SI,SI               
00422302   . 0F84 C3010000  JE Delphi學.004224CB    

以下是程式啟動時驗證註冊碼的部分,先從登錄檔中讀出使用者名稱(當然先要成功註冊即要修改上面的爆破點1)
0041430B   > 66:3B75 94     CMP SI,WORD PTR SS:[EBP-6C]
0041430F   . 0F8F 8F000000  JG Delphi學.004143A4[
00414315   . 8B55 E4        MOV EDX,DWORD PTR SS:[EBP-1C]
00414318   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]
0041431B   . 0FBFCE         MOVSX ECX,SI
0041431E   . 50             PUSH EAX
0041431F   . 51             PUSH ECX
00414320   . 52             PUSH EDX
00414321   . C745 D0 010000>MOV DWORD PTR SS:[EBP-30],1
00414328   . C745 C8 020000>MOV DWORD PTR SS:[EBP-38],2
0041432F   . FF15 80104000  CALL DWORD PTR DS:[<&MSVBVM60.#631>]     ;  MSVBVM60.rtcMidCharBstr
00414335   . 50             PUSH EAX
00414336   . 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18]
00414339   . 50             PUSH EAX
0041433A   . 6A 01          PUSH 1
0041433C   . FF15 E8104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaLsetF>;  MSVBVM60.__vbaLsetFixstrFree
00414342   . 8D4D C8        LEA ECX,DWORD PTR SS:[EBP-38]
00414345   . FF15 14104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>;  MSVBVM60.__vbaFreeVar
0041434B   . 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
0041434E   . 51             PUSH ECX
0041434F   . 6A 01          PUSH 1
00414351   . FF15 74104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrFi>;  MSVBVM60.__vbaStrFixstr
00414357   . 8BD0           MOV EDX,EAX
00414359   . 8D4D D8        LEA ECX,DWORD PTR SS:[EBP-28]
0041435C   . FFD3           CALL EBX
0041435E   . 50             PUSH EAX
0041435F   . FF15 30104000  CALL DWORD PTR DS:[<&MSVBVM60.#516>]     ;  MSVBVM60.rtcAnsiValueBstr
00414365   . 8B55 D8        MOV EDX,DWORD PTR SS:[EBP-28]
00414368   . 52             PUSH EDX
00414369   . 8945 A4        MOV DWORD PTR SS:[EBP-5C],EAX
0041436C   . 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18]
0041436F   . 50             PUSH EAX
00414370   . 6A 01          PUSH 1
00414372   . FF15 3C104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaLsetF>;  MSVBVM60.__vbaLsetFixstr
00414378   . 0FBF4D A4      MOVSX ECX,WORD PTR SS:[EBP-5C]
0041437C   . 03CF           ADD ECX,EDI
0041437E   . 0F80 7F020000  JO Delphi學.00414603
00414384   . 8BF9           MOV EDI,ECX
00414386   . 8D4D D8        LEA ECX,DWORD PTR SS:[EBP-28]
00414389   . FF15 80114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
0041438F   . B8 01000000    MOV EAX,1
00414394   . 66:03C6        ADD AX,SI
00414397   . 0F80 66020000  JO Delphi學.00414603
0041439D   . 8BF0           MOV ESI,EAX
0041439F   .^E9 67FFFFFF    JMP Delphi學.0041430B   和上面的演算法一樣
004143A4   > 8B75 E0        MOV ESI,DWORD PTR SS:[EBP-20]
004143A7   . 69FF 87D61200  IMUL EDI,EDI,12D687
004143AD   . 8B45 E4        MOV EAX,DWORD PTR SS:[EBP-1C]
004143B0   . 0F80 4D020000  JO Delphi學.00414603S
004143B6   . 33D2           XOR EDX,EDX
004143B8   . 3BF7           CMP ESI,EDI
004143BA   . 0F95C2         SETNE DL
004143BD   . 50             PUSH EAX
004143BE   . 68 80684000    PUSH Delphi學.00406880
004143C3   . 4A             DEC EDX
004143C4   . 66:8915 484042>MOV WORD PTR DS:[424048],DX
004143CB   . FF15 94104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>;  MSVBVM60.__vbaStrCmp
004143D1   . 85C0           TEST EAX,EAX
004143D3   . 74 04          JE SHORT Delphi學.004143D9 
004143D5   . 85F6           TEST ESI,ESI
004143D7   . 75 09          JNZ SHORT Delphi學.004143E2
004143D9   > 66:C705 484042>MOV WORD PTR DS:[424048],0
004143E2   > 66:833D 484042>CMP WORD PTR DS:[424048],0
004143EA     0F84 55010000  JE Delphi學.004145454   此處為關鍵跳轉,爆破點2
004143F0   . A1 10404200    MOV EAX,DWORD PTR DS:[424010]
004143F5   . 85C0           TEST EAX,EAX
004143F7   . 75 10          JNZ SHORT Delphi學.00414409
004143F9   . 68 10404200    PUSH Delphi學.004240101
004143FE   . 68 48384000    PUSH Delphi學.004038481
00414403   . FF15 08114000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaNew2>>;  MSVBVM60.__vbaNew2
00414409   > 8B35 10404200  MOV ESI,DWORD PTR DS:[424010]
0041440F   . 8B0E           MOV ECX,DWORD PTR DS:[ESI]
00414411   . 6A 0B          PUSH 0B
00414413   . 56             PUSH ESI

更改上述兩個爆破點後,可使其成為註冊辦,但還是有功能限制,這需要繼續跟蹤,在每個功能限制的地方,改掉關鍵跳轉就能解除限制,這兒我就不跟蹤下去了,因為畢竟註冊碼演算法已找到。有興趣可以做作  !  :)
寫完了呵呵!
註冊資訊儲存在hkey_CURRent_USERSOFTWAREVB AND VBA program SETtingsDelphi學習寶典資訊下面。。刪掉key的鍵值可重新註冊!
目的是增強大家破解vb的信心!讓大家笑話了!
一個可用的註冊碼:mejy-------539505779

vc下的序號產生器:
               char h[15],ch;  
  int i=0;
  m_zcm=0;
  UpdateData(TRUE);
  strcpy(h,m_yhm);
  while(h[i]!=' ')
  {   
    ch=int(h[i]);
    m_zcm+=ch;
    i++;
  }
  m_zcm*=1234567;
  UpdateData(FALSE);


_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
----------------******---------------
--------------"歡迎交流"------------------
----------------******---------------
【BCG】【FCG】【DFCG】【NUKE】【IPB】
-----------學習、學習、在練習----------


相關文章