查看單個文章
舊 2006-05-24, 01:20 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 [算法入門]LRC 傻瓜編輯器 V1.1 簡單算法分析

[算法入門]LRC 傻瓜編輯器 V1.1 簡單算法分析

把以前的破文翻出來,發現這個軟體沒有再更新過,連接還有效。

LRC 傻瓜編輯器 V1.1 簡單算法分析

註冊名:LeExOyO
試驗碼:87654321
註冊碼:6631015573321

點此下載

主文件Easy_LRC_Editor.exe,ASPack 1.06b / 1.061b -> Alexey Solodovnikov的殼,手動脫殼很簡單,Borland Delphi 編程。

執行軟體,點擊說明 ,彈出另外的介面,輸入註冊名、試驗碼,點擊沒有反應。

DEDE載入,看到總共有兩個Form,點擊"Procedures",會點編程的一看就知道軟體註冊介面上的"註冊"按

鈕就是"Button1Click"這個事件了。哈哈~~

OK,OD載入軟體,F9執行,下斷47B588,輸入註冊名、試驗碼,點擊"註冊",攔下:

0047B588 /. 55 push ebp
0047B589 |. 8BEC mov ebp,esp
0047B58B |. 33C9 xor ecx,ecx
0047B58D |. 51 push ecx
0047B58E |. 51 push ecx
0047B58F |. 51 push ecx
0047B590 |. 51 push ecx
0047B591 |. 51 push ecx
0047B592 |. 51 push ecx
0047B593 |. 51 push ecx
0047B594 |. 51 push ecx
0047B595 |. 53 push ebx
0047B596 |. 56 push esi
0047B597 |. 57 push edi
0047B598 |. 8945 FC mov dword ptr ss:[ebp-4],eax
0047B59B |. 33C0 xor eax,eax
0047B59D |. 55 push ebp
0047B59E |. 68 54B74700 push EasyLRCd.0047B754
0047B5A3 |. 64:FF30 push dword ptr fs:[eax]
0047B5A6 |. 64:8920 mov dword ptr fs:[eax],esp
0047B5A9 |. 8D45 F4 lea eax,dword ptr ss:[ebp-C]
0047B5AC |. E8 A784F8FF call EasyLRCd.00403A58
0047B5B1 |. 8D55 F0 lea edx,dword ptr ss:[ebp-10]
0047B5B4 |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
0047B5B7 |. 8B80 040300>mov eax,dword ptr ds:[eax+304]
0047B5BD |. E8 FE0CFBFF call EasyLRCd.0042C2C0
0047B5C2 |. 837D F0 00 cmp dword ptr ss:[ebp-10],0 ; //檢測是否輸入註冊名
0047B5C6 |. 0F84 500100>je EasyLRCd.0047B71C
0047B5CC |. 8D55 F8 lea edx,dword ptr ss:[ebp-8]
0047B5CF |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
0047B5D2 |. 8B80 040300>mov eax,dword ptr ds:[eax+304]
0047B5D8 |. E8 E30CFBFF call EasyLRCd.0042C2C0
0047B5DD |. 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; //eax="LeExOyO"
0047B5E0 |. E8 F386F8FF call EasyLRCd.00403CD8
0047B5E5 |. 8BF0 mov esi,eax ; //esi=eax=0x7
0047B5E7 |. 85F6 test esi,esi
0047B5E9 |. 7E 3C jle short EasyLRCd.0047B627
0047B5EB |. BF 01000000 mov edi,1
0047B5F0 |> 8B45 F8 /mov eax,dword ptr ss:[ebp-8] ; //eax="LeExOyO"
0047B5F3 |. 33DB |xor ebx,ebx
0047B5F5 |. 8A5C38 FF |mov bl,byte ptr ds:[eax+edi-1] ; //依次取註冊名各字串hex值送bl,以第一個字串"L"為例
0047B5F9 |. 8BC3 |mov eax,ebx ; //eax=ebx=0x4C
0047B5FB |. F7EB |imul ebx ; //eax=eax * ebx =0x1690
0047B5FD <>|. F7EB |imul ebx ; //eax=eax * ebx =0x6B2C0
0047B5FF |. 8945 EC |mov dword ptr ss:[ebp-14],eax ; //[ebp-14]=eax=0x6B2C0
0047B602 |. DB45 EC |fild dword ptr ss:[ebp-14] ; //取此值的十進制浮點數438976
0047B605 |. D9FA |fsqrt ; //開平方,值四捨五入,eax=663
0047B607 |. E8 D072F8FF |call EasyLRCd.004028DC ; //開平方的值轉成16進制
0047B60C |. 8BD8 |mov ebx,eax ; //ebx=eax=開平方後的16進制值
0047B60E |. 8D55 E8 |lea edx,dword ptr ss:[ebp-18]
0047B611 |. 8BC3 |mov eax,ebx
0047B613 |. E8 78CFF8FF |call EasyLRCd.00408590 ; //再將這個值轉成10進制
0047B618 |. 8B55 E8 |mov edx,dword ptr ss:[ebp-18]
0047B61B |. 8D45 F4 |lea eax,dword ptr ss:[ebp-C]
0047B61E |. E8 BD86F8FF |call EasyLRCd.00403CE0
0047B623 |. 47 |inc edi
0047B624 |. 4E |dec esi
0047B625 |.^ 75 C9 \jnz short EasyLRCd.0047B5F0 //這個循環就是註冊名的運算了
0047B627 |> 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; //eax=註冊名各字串字串計算後相連組成的字串"663101557313157021331702"
0047B62A |. E8 A986F8FF call EasyLRCd.00403CD8 ; //取上面字串的長度
0047B62F |. 83F8 0A cmp eax,0A ; //與10比較
0047B632 |. 7E 26 jle short EasyLRCd.0047B65A ; //小於則跳
0047B634 |. 8D45 E4 lea eax,dword ptr ss:[ebp-1C]
0047B637 |. 50 push eax
0047B638 |. B9 0A000000 mov ecx,0A
0047B63D |. BA 01000000 mov edx,1
0047B642 |. 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; //eax="663101557313157021331702"
0047B645 |. E8 9688F8FF call EasyLRCd.00403EE0 ; //取字串的前10位
0047B64A |. 8B55 E4 mov edx,dword ptr ss:[ebp-1C] ; //edx="6631015573"
0047B64D |. 8D45 F4 lea eax,dword ptr ss:[ebp-C]
0047B650 |. B9 6CB74700 mov ecx,EasyLRCd.0047B76C ; //ecx=固定字串串"321"
0047B655 |. E8 CA86F8FF call EasyLRCd.00403D24 ; //此函數在上面的字串後加上固定字串"321"
0047B65A |> 8D55 E0 lea edx,dword ptr ss:[ebp-20]
0047B65D |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
0047B660 |. 8B80 100300>mov eax,dword ptr ds:[eax+310]
0047B666 |. E8 550CFBFF call EasyLRCd.0042C2C0
0047B66B |. 8B55 E0 mov edx,dword ptr ss:[ebp-20] ; //edx=試驗碼"87654321"
0047B66E |. 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; eax="6631015573321"
0047B671 |. E8 7287F8FF call EasyLRCd.00403DE8 ; //關鍵比較
0047B676 |. 0F85 A00000>jnz EasyLRCd.0047B71C
0047B67C |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
0047B67F |. 8B80 F40200>mov eax,dword ptr ds:[eax+2F4]
0047B685 |. BA 78B74700 mov edx,EasyLRCd.0047B778
0047B68A |. E8 610CFBFF call EasyLRCd.0042C2F0
0047B68F |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
0047B692 |. 8B80 F80200>mov eax,dword ptr ds:[eax+2F8]
0047B698 |. 33D2 xor edx,edx
0047B69A |. E8 390BFBFF call EasyLRCd.0042C1D8
0047B69F |. A1 24024800 mov eax,dword ptr ds:[480224]
0047B6A4 |. 8B00 mov eax,dword ptr ds:[eax]
0047B6A6 |. 8B80 840300>mov eax,dword ptr ds:[eax+384]
0047B6AC |. 33D2 xor edx,edx
0047B6AE |. E8 4515FDFF call EasyLRCd.0044CBF8
0047B6B3 |. B2 01 mov dl,1
0047B6B5 |. A1 A0B64400 mov eax,dword ptr ds:[44B6A0]
0047B6BA |. E8 E100FDFF call EasyLRCd.0044B7A0
0047B6BF |. 8BD8 mov ebx,eax
0047B6C1 |. BA 01000080 mov edx,80000001
0047B6C6 |. 8BC3 mov eax,ebx
0047B6C8 |. E8 7301FDFF call EasyLRCd.0044B840
0047B6CD |. BA 98B74700 mov edx,EasyLRCd.0047B798 ; ASCII "software\gcbjq" 註冊成功後寫入 註冊表的鍵值
0047B6D2 |. 8BC3 mov eax,ebx
0047B6D4 |. E8 2F06FDFF call EasyLRCd.0044BD08
0047B6D9 |. 84C0 test al,al
0047B6DB |. 75 0C jnz short EasyLRCd.0047B6E9
0047B6DD |. BA 98B74700 mov edx,EasyLRCd.0047B798 ; ASCII "software\gcbjq"
0047B6E2 |. 8BC3 mov eax,ebx
0047B6E4 |. E8 BB01FDFF call EasyLRCd.0044B8A4
0047B6E9 |> 33C9 xor ecx,ecx
0047B6EB |. BA 98B74700 mov edx,EasyLRCd.0047B798 ; ASCII "software\gcbjq"
0047B6F0 |. 8BC3 mov eax,ebx
0047B6F2 |. E8 8902FDFF call EasyLRCd.0044B980
0047B6F7 |. BA B0B74700 mov edx,EasyLRCd.0047B7B0 ; ASCII "zhuche" 是否註冊的標誌
0047B6FC |. 8BC3 mov eax,ebx
0047B6FE |. E8 5D05FDFF call EasyLRCd.0044BC60
0047B703 |. 84C0 test al,al
0047B705 |. 75 0E jnz short EasyLRCd.0047B715
0047B707 |. B1 01 mov cl,1
0047B709 |. BA B0B74700 mov edx,EasyLRCd.0047B7B0 ; ASCII "zhuche"


REGEDIT4

[HKEY_CURRENT_USER\Software\gcbjq]
"zhuche"=dword:00000001

算法總結:

將註冊名各字串分別運算得到的字串相連,如果大於10位則取前10位然後加上固定字串"321",如果小於10位則就取這幾位。

單字串運算流程:
字串的hex值連乘3次,得到的值換成10進制後開方,如字串"L",hex值為0x4C,則0x4C * 0x4C * 0x4C=0x6B2C0,換成10進制438976,開方得662.55,取整為663。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次