• 标 题:破解FAQGenie (4千字)
  • 作 者:henryw
  • 时 间:2001-4-10 13:28:30
  • 链 接:http://bbs.pediy.com

破解FAQGenie

[软件简介]
    FAQGenie是一个专门用来作FAQ网页的软件。不注册30天限制。
    在www.inhua.com有下载。

[破解工具]
DeDe 2.50
trw2000
W32Dasm

[破解经过]
简单的发现:
    (1) FI报告是Delphi程序。
    (2) 启动软件,没有发现输入注册码的地方,只告诉你,NOT LICENSED(没有注册)。

用DeDe处理一下,看到下面的东东:

procedure TfrmMain.LogoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
{
00491158  55                    push    ebp
00491159  8BEC                  mov    ebp, esp
0049115B  53                    push    ebx
0049115C  8BD8                  mov    ebx, eax
0049115E  80F901                cmp    cl, $01
00491161  7523                  jnz    00491186
00491163  803D505A490000        cmp    byte ptr [$495A50], $00
0049116A  741A                  jz      00491186
0049116C  B201                  mov    dl, $01

* Reference to control TfrmMain.edtRegCode : TEdit
|
0049116E  8B83E8020000          mov    eax, [ebx+$02E8]

* Reference to: controls.TControl.SetVisible(TControl;System.Boolean);
|
00491174  E843CEF9FF            call    0042DFBC
00491179  B201                  mov    dl, $01

* Reference to control TfrmMain.lblRegCode : TLabel
|
0049117B  8B83E4020000          mov    eax, [ebx+$02E4]

* Reference to: controls.TControl.SetVisible(TControl;System.Boolean);
|
00491181  E836CEF9FF            call    0042DFBC
00491186  5B                    pop    ebx
00491187  5D                    pop    ebp
00491188  C20C                  ret    $0C


}
end ;

这是什么?我猜是鼠标对logo进行操作后,便出现可以输入注册码的东东了。
开始试验,经过数分钟的乱试,发现只要先对滚动字符的地方双击,然后用鼠标右键点击logo,
注册码输入的地方就显示出来了。

如何拦住输入的注册码呢?用hmemcpy试了一下,没成功。

正在苦恼之际,看了一下W32Dasm里面的stringlist,发现有几处关于RegCode的地方。这是其中一处。

* Referenced by a CALL at Addresses:
|:0048A371  , :0048A3B8  , :0048A57B  , :0048CFF8  , :0048DDBD 
|:0048E632  , :00490158  , :00490AD4  , :004911D9 
|
:00490B78 55                      push ebp
:00490B79 8BEC                    mov ebp, esp
:00490B7B 6A00                    push 00000000
:00490B7D 6A00                    push 00000000
:00490B7F 53                      push ebx
:00490B80 56                      push esi
:00490B81 33C0                    xor eax, eax
:00490B83 55                      push ebp
:00490B84 681D0C4900              push 00490C1D
:00490B89 64FF30                  push dword ptr fs:[eax]
:00490B8C 648920                  mov dword ptr fs:[eax], esp
:00490B8F 33DB                    xor ebx, ebx
:00490B91 C705485A49008DECA200    mov dword ptr [00495A48], 00A2EC8D
:00490B9B 8D45FC                  lea eax, dword ptr [ebp-04]
:00490B9E 50                      push eax
:00490B9F 33C9                    xor ecx, ecx

* Possible StringData Ref from Code Obj ->"RegCode"
                                  |
:00490BA1 BA340C4900              mov edx, 00490C34

* Possible StringData Ref from Code Obj ->"Software\Virdi Software\FAQGenie"
                                  |
:00490BA6 B8440C4900              mov eax, 00490C44
:00490BAB E8F04BFFFF              call 004857A0
:00490BB0 B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"TBase64SV勔t兡痂叮?嬟嬸3覌畦仩?艶嬈勠t?
                                        ->"颍?d?"
                                  |                        <------ 注册码变成base64编码后放入注册表里面去?
:00490BB2 A1808C4800              mov eax, dword ptr [00488C80]
:00490BB7 E81881FFFF              call 00488CD4
:00490BBC 8BF0                    mov esi, eax
:00490BBE 8D4DF8                  lea ecx, dword ptr [ebp-08]
:00490BC1 8B55FC                  mov edx, dword ptr [ebp-04]
:00490BC4 8BC6                    mov eax, esi
:00490BC6 E86584FFFF              call 00489030
:00490BCB 8BC6                    mov eax, esi
:00490BCD E8CE21F7FF              call 00402DA0
:00490BD2 33D2                    xor edx, edx
:00490BD4 8B45F8                  mov eax, dword ptr [ebp-08]
:00490BD7 E86C73F7FF              call 00407F48
:00490BDC A34C5A4900              mov dword ptr [00495A4C], eax    <------ ? eax可以看见假注册码
:00490BE1 A1485A4900              mov eax, dword ptr [00495A48]   
:00490BE6 3B054C5A4900            cmp eax, dword ptr [00495A4C]    <------ ? eax就是真注册码了。假的和真的作比较。
:00490BEC 7514                    jne 00490C02
:00490BEE A1105A4900              mov eax, dword ptr [00495A10]
:00490BF3 8B8048040000            mov eax, dword ptr [eax+00000448]
:00490BF9 B201                    mov dl, 01
:00490BFB E8BCD3F9FF              call 0042DFBC
:00490C00 B301                    mov bl, 01

输入注册码后,需要退出程序然后重新进入,就会发现是注册版了。