QuickCHM2.01破解小記,歡迎大家一起交流

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

************************************************************************
**      The Tutorial For QuickCHM ver 2.01  By LostInUnASM 2003.3.6   **
************************************************************************
宣告:
   今天想用QuickCHM把以前蒐集的材料整理一下,才發現由於沒有註冊,不能編輯和編譯大於15個節點的專案 :(於是決定自己動手豐衣足食 QuickCHM2.01破解小記,歡迎大家一起交流  在這裡先向吳新兵老兄陪個不是:呵呵,大哥你也喜歡用DELPHI寫程式,小弟也一樣,有空可以交流經驗 QuickCHM2.01破解小記,歡迎大家一起交流 這個QuickCHM的版本好象不是最新的吧,不知道你有何新的研究成果 QuickCHM2.01破解小記,歡迎大家一起交流

程式:QuickChM 2.01
型別:Delphi Aspack
工具:W32Dasm、ProDump、Dede、TRW2000  //高手完全可以不用那麼多吧
分析:先用PRODUMP脫殼,再用W32DASM反彙編,結合DEDE可以找到具體比較註冊碼的關鍵地方是
    :004F246D 8B4334                  mov eax, dword ptr [ebx+34]
    :004F2470 8B55F8                  mov edx, dword ptr [ebp-08]
    :004F2473 E83429F1FF              call 00404DAC  ==》這裡是具體比較的CALL LstrCmp Call
    :004F2478 0F85BA000000            jne 004F2538   ==》在這裡修改就可以暴力破解了 :P

    不過只要你重新啟動程式,依然會出現UnRegister的字樣,SO繼續跟蹤程式啟動時呼叫了哪些過程
    發現:
   * Possible StringData Ref from Code Obj ->"F0E1"  ==》注意:這是一個很有用的字串
                                 |
   :004EDC9D BAB8E04E00              mov edx, 004EE0B8
   :004EDCA2 8BC7                    mov eax, edi
   :004EDCA4 E8DBABFFFF              call 004E8884  ==》這是一個特別重要的CALL哦!
   :004EDCA9 8BC7                    mov eax, edi
   :004EDCAB E8CCAEFFFF              call 004E8B7C  ==》這也很重要哦
   :004EDCB0 8B4734                  mov eax, dword ptr [edi+34]  ==》儲存正確的註冊碼
   :004EDCB3 8B55F0                  mov edx, dword ptr [ebp-10]
   :004EDCB6 E8F170F1FF              call 00404DAC ==》顯然這個CALL和上面那個所呼叫的過程a一樣
   :004EDCBB 7532                    jne 004EDCEF  ==》修改這裡就可去除UnRegister的字樣了

   使用者名稱:   L  o  s  t  I  n  U  n  A  s  m
   註冊碼:64 F6 56 8C 30 3F 9D B7 17 1E A1 4A
 
   使用TRW在004EDCB0處設端點,再按了無數個F10後,終於有所發現。
   跟蹤後發現其計算規律如下:
   1、首字母的ASCII值X加100 除 255得餘數X1,X1 再XOR 字串F0E1中相對應的第一個字母的ASCII值得出       數X2 再把該數轉換為16進位制就可以了。
   2、把第二字母的ASCII值Y加上 X2,取得 Y1  Y1 再XOR 字串F0E1中想對應的第二個字母的ASCII值得出
      數X3 再把該數轉換為16進位制就可以了。 依次類推.

   EG: Name: F       U       C       K    Key:68487498(隨便輸入)
             70     85      67      75
    Add     100    236     114     240
       ---------------------------------
            170    321     181     315
    Mod     255    255     255     255  
       ---------------------------------
            170     66     181     60
    XOR      70     48      69     49   ====>70 48 69 49 分別為F0E1的ASCII值
       ---------------------------------
            236    114     240     13
  InttoHex   EC     72      F0     0D

             70    48    69    49   ===》正確的註冊碼是:  64EC72F00D  (不要漏了‘64’哦)
             F     0     E     1  

   於是順利地寫出了序號產生器,用DELPHI 6.0

program KeygenForQChm;
{$APPTYPE CONSOLE}
Uses sysutils;
Var
   Name,XorStr,Key:String;
   LastModResult,Mr:Integer;
   StrLen,I,J,IntXor:Integer;
begin
 writeln('===========================================================');
 writeln('This is a Keygen For QuickCHM ver 2.01   ----By LostInUnAsm');
 writeln('===========================================================');
 Write('Please Enter your Name(Length>=4):');
 LastModResult:=100;
 XorStr:='F0E1';
 J:=1;
 Read(Name);
 StrLen:=Length(Name);

 For I:=1 to StrLen do
     Begin
       Mr:=(Ord(Name[i])+LastModResult) Mod 255;
       IntXor:=Mr Xor Ord(XorStr[J]);
       Key:=Key+InttoHex(IntXor,2);
       LastModResult:=IntXor;
       If J<4 then Inc(J) Else J:=1;
     End;
 Writeln('Correct Serial Is: 64',Key);  //注意,每個註冊碼都是以64開頭的 QuickCHM2.01破解小記,歡迎大家一起交流
 Readln;
 Readln;
end.

===================================忙了好幾個小時!累死我了!=============================

PS:破解完全不用拘泥於形式,如果你想簡單得到註冊碼,完全可以使用WINHEX,
   用她來檢視QuickCHM的記憶體,幾秒就可以找到正確的註冊碼(好象是根據誰的理論,正確的註冊碼一定在錯誤的註冊碼附近)

相關文章