Word to PDF Converter v3.0 算法分析及註冊機

Word to PDF Converter v3.0算法分析及註冊機

--------------------------------------------------------------------------------
【詳細過程】

1,主程序在C:/Program Files/doc2pdf/DOC2PDF.dll,PEID查殼爲ASProtect 1.23 RC1 -> Alexey Solodovnikov
對於ASPR,低版本的用看雪tool提供的脫殼機,高版本的用VOLX大俠的腳本,沒有SDK和VM,這殼就比ESP要稍稍等上那麼一會

2,新建空白DOC,運行之。看到插件已經加載,點擊"SAVE AS PDF",彈出未註冊提示和註冊框[第一次還會提示下個什麼driver,得按照他的意思去下]

3,OD掛接(一作附加),彈窗直接API下斷,其他的下斷方式還有很多種,略過。
堆棧顯示:

代碼:
0012E370   1001E168  /CALL 到 MessageBoxA 來自 DOC2PDF.1001E162
0012E374   00060850  |hOwner = 00060850 ('Registration',class='#32770',parent=00380062)
0012E378   10031A08  |Text = "Registration failed, please check the code and try again!"
0012E37C   01EB3B08  |Title = "Word to PDF Converter"
0012E380   00000010  /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL

調用堆棧顯示[OD上的K按鈕]:

代碼:
調用堆棧
地址       堆棧       程序過程 / 參數                       調用來自                      結構
0012E370   1001E168   user32.MessageBoxA                    DOC2PDF.1001E162              0012E3C0
0012E374   00060850     hOwner = 00060850 ('Registration',
0012E378   10031A08     Text = "Registration failed, pleas
0012E37C   01EB3B08     Title = "Word to PDF Converter"
0012E380   00000010     Style = MB_OK|MB_ICONHAND|MB_APPLM
0012E388   1000CECC   DOC2PDF.1001E13A                      DOC2PDF.1000CEC7
0012E38C   10031A08     Arg1 = 10031A08 ASCII "Registratio
0012E390   01EB3B08     Arg2 = 01EB3B08 ASCII "Word to PDF
0012E394   00000010     Arg3 = 00000010

跟隨地址,來到:

代碼:
1000CE5A   .  E8 77020000   CALL 1000D0D6                            ;  關鍵CALL
1000CE5F   .  85C0          TEST EAX,EAX
1000CE61   .  74 43         JE SHORT 1000CEA6                        ;  註冊判斷跳轉
........
1000CE73   .  6A 40         PUSH 40
1000CE75   .  50            PUSH EAX
1000CE76   .  68 441A0310   PUSH 10031A44                            ;  ASCII "Registration successed, thank for your registration!"
1000CE7B   .  8BCE          MOV ECX,ESI
1000CE7D   .  C745 FC 03000>MOV DWORD PTR SS:[EBP-4],3
1000CE84   .  E8 B1120100   CALL 1001E13A                            ;  調用MessageBoxA
........
1000CEB9   .  68 081A0310   PUSH 10031A08                            ;  ASCII "Registration failed, please check the code and try again!"
1000CEBE   .  8BCE          MOV ECX,ESI
1000CEC0   .  C745 FC 04000>MOV DWORD PTR SS:[EBP-4],4
1000CEC7   .  E8 6E120100   CALL 1001E13A                            ;  調用MessageBoxA

 

跟進關鍵CALL:

 
代碼:
1000D0D6  /$  B8 D84F0210   MOV EAX,10024FD8
........
1000D100  |.  E8 52F5FFFF   CALL 1000C657                            ;  用戶名小於2位則加上"AA",取其前兩位。有字母就轉爲大寫,再與"3wefr23rw"組合爲新字串。爲節省篇幅,就不寫跟進過程了- -!
........
1000D127  |.  50            PUSH EAX
1000D128  |.  E8 D5C0FFFF   CALL 10009202                            ;  MD5加密組合字串的32位輸出
........
1000D15E  |.  E8 BDD20000   CALL 1001A420                            ;  MD5輸出的前16位

........
1000D176  |.  E8 3C250000   CALL 1000F6B7                            ;  比較真假碼,局部調用來自 1000880B, 1000D176
1000D17B  |.  59            POP ECX
1000D17C  |.  85C0          TEST EAX,EAX
1000D17E  |.  59            POP ECX
1000D17F  |.  75 03         JNZ SHORT 1000D184                       ;  跳過標誌位置1
1000D181  |.  6A 01         PUSH 1
1000D183  |.  5B            POP EBX                                  ;  相當於 MOV EBX,1
1000D184  |>  834D FC FF    OR DWORD PTR SS:[EBP-4],FFFFFFFF
1000D188  |.  8D4D F0       LEA ECX,DWORD PTR SS:[EBP-10]
1000D18B  |.  E8 A3D10000   CALL 1001A333                            ;  CALL A333
1000D190  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]
1000D193  |.  8BC3          MOV EAX,EBX                              ;  EBX --> EAX
1000D195  |.  5E            POP ESI
1000D196  |.  5B            POP EBX
1000D197  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
1000D19E  |.  C9            LEAVE
1000D19F  /.  C2 0800       RETN 8

 

附:在點SAVE AS PDF按鈕會被斷下,說明此時會進行判斷...:


算法分析:
1,取用戶名,不足兩位的加"AA",再取前兩位,是字母的話轉換成大寫
2,和固定字符串"3wefr23rw"組成新字符串
3,標準MD5加密該字符串
4, 取前16位得到註冊碼


JS註冊機源碼[簡單算法,各位見笑了]:

代碼:
<script language="javascript" src="md5.js"></script>
<script language="JavaScript" type="text/javascript">
//No copyright (C) 11/21/2009   ty1921

function getCode(user) {
         var s0="";
         if (user.length<2)
         { user += "AA"; }                       //取用戶名,不足兩位的加"AA"
          user = user.substring(0,2);            //用戶名截取   
          user = user.toUpperCase();             //用戶名大寫
          user += "3wefr23rw";                   //和固定字符串"3wefr23rw"組成新字符串
          s0 = MD5(user);                        //標準MD5加密
          ty.passwd.value = s0.substring(0,16);  //取前16位,得到註冊碼   
}
</script>
<form name="ty">
<table align="center">
    <tr>
         <td> user: <input  name="user" /></td>
    </tr>
    <tr>
         <td> code: <input readonly="readonly"  name="passwd" /></td>
    </tr>
    <tr>
         <td> <hr> </td>
    </tr>
    <tr>
         <td align="center"> <input type="button"  value=" get  it  " οnclick="javascript:getCode(user.value)" /></td>
    </tr>
         <td align="center">
             <br>
             <font color="#808080" size="2">
                 <a href="http://bbs.chinaPYG.com" style="text-decoration: none">bbs.chinaPYG.com</a>  ty1921^_^
             </font>
        </td>
    </tr>
</table>
</form>

總結:
1,算法很簡單,適合我等新手學習,比上一個屏幕保護那軟件有很大的差別
2,註冊信息保存在HKEY_USERS/S-1-5-21-1343024091-57989841-1417001333-500/Software/Pdf-convert/word2pdf/DataInfo下,如果找不到,請在註冊表中直接搜索你輸入的用戶名或註冊碼
3,標準的MD5.JS請在網上搜素下載。[因爲不能上傳附件,(⊙o⊙)]

4,最新下載的V3.0版本算法沒有改變,但字符串已經更改,在這裏提供兩組註冊碼,一組不行換另外一組:

 

用戶名/註冊碼: ty1921/ef0f2eba70c7a00d

                或: ty1921/1e43681f1ea3a064

 

 

發佈了38 篇原創文章 · 獲贊 15 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章