dede有大用----如何用dede解“網際飛鷹之極速FTP1.0” (4千字)

看雪資料發表於2001-07-07

DEDE的作用
                        ----網際飛鷹之極速FTP1.0 keygen

    主程式為NetEagle.exe。據說用language知道這個程式是delphi編譯的,但fileinfo不能識別。用dede2.5可以反編譯。

    dede反編譯成功後,在Forms欄,有如下:
        Classes Info      Offset
      -----------------------------
        TAboutForm        000d81dc
        TChangeDirForm    000da4b0
        .....              ......
        .....              ......
        TInputSerialForm  000ea244
        ......            ......

    很明顯,TInputSerialForm視窗與處理註冊碼有關,滑鼠點選,顯示這個視窗的細節。由執行NetEagle.exe知道,註冊窗有edit1(使用者名稱),edit2(序列號),button1(註冊),button2(取消)等元件,所以在TInputSerialForm視窗中找“button1(註冊)”,發現
  object FlatButton1: TFlatButton
    Left = 72
    Top = 80
    Width = 73
    Height = 25
    Caption = '注  冊(&R)'
    TabOrder = 2
    OnClick = FlatButton1Click  <--“註冊”按鈕按下後的事件。
  end

    然後,回到dede的Procedures欄,這包括了Forms欄所有視窗的事件程式碼。
        Unit Name          Class Name
    --------------------------------------
        AboutFrm            TAboutForm
        ......              ......
        ......              ......
        InputSerialFrm      TInputSerialForm
        ......              ......

    滑鼠左鍵點選InputSerialFrm,展示此視窗內包含的所有事件。其中有
        Event                  RVA      Hint
      ------------------------------------------
        FlatButton1Click      004a1b7c  0017
        FlatButton2Click      004a1b84  0017
        ......                ......
        ......                ......

    滑鼠雙擊FlatButton1Click,顯示事件的反編譯程式碼:
......
004A1BBD  E83A000000  call    004A1BFC  <--關鍵
004A1BC2  84C0        test    al, al
004A1BC4  740E        jz      004A1BD4
......

滑鼠雙擊004A1BBD  E83A000000  call    004A1BFC進入:
* Possible String Reference to: 'NE-'    <-------
|                                              |
004A1C7F  BA341E4A00  mov    edx, $004A1E34  |
                                                |
* Reference to: system.@LStrCmp;                |
|                                              |
004A1C84  E85723F6FF  call    00403FE0  <--註冊碼起始部分為“NE-”
004A1C89  750F        jnz    004A1C9A
004A1C8B  8B45EC      mov    eax, [ebp-$14]

* Possible String Reference to: '-EWD'  <--------
|                                              |
004A1C8E  BA401E4A00  mov    edx, $004A1E40  |
                                                |
* Reference to: system.@LStrCmp;                |
|                                              |
004A1C93  E84823F6FF  call    00403FE0  <--註冊碼結束部分為“-EWD”
004A1C98  740D        jz      004A1CA7
004A1C9A  8B45FC      mov    eax, [ebp-$04]
004A1C9D  E8A6010000  call    004A1E48
004A1CA2  E92B010000  jmp    004A1DD2
......
......
......
004A1CFF  81FB00E1F505 cmp    ebx, $05F5E100 <--註冊碼數字部分必須在
004A1D05  7C08        jl      004A1D0F        |  100000000至
004A1D07  81FBFFC99A3B cmp    ebx, $3B9AC9FF  |  999999999之間
004A1D0D  7E0D        jle    004A1D1C      <--
004A1D0F  8B45FC      mov    eax, [ebp-$04]
004A1D12  E831010000  call    004A1E48
004A1D17  E9B6000000  jmp    004A1DD2
004A1D1C  8BC3        mov    eax, ebx
004A1D1E  B94D000000  mov    ecx, $0000004D
004A1D23  99          cdq
004A1D24  F7F9        idiv    ecx            <--註冊碼除以77
004A1D26  05C0169430  add    eax, +$309416C0<--商+815011520
004A1D2B  B94D000000  mov    ecx, $0000004D
004A1D30  99          cdq
004A1D31  F7F9        idiv    ecx            <--和除以77
004A1D33  85D2        test    edx, edx
004A1D35  0F858B000000 jnz    004A1DC6      <--餘數為0,註冊碼數字正確。


    隨後就是寫序號產生器了,用窮舉辦法,我用delphi5.0及控制元件KOL&MCK0.82編譯。序號產生器介面中有editbox1(輸入使用者名稱),editbox2(註冊碼),button1(生成註冊碼),button2(退出)等元件。

keygen.pas中:

var code:integer;

procedure TForm1.Button1Click(Sender: PObj);
begin
  if length(editbox1.text)=0 then editbox2.text:='請輸入使用者名稱!'
  else begin
  Randomize;
  code:=random(800000000)+100000000;
  while (((code div 77)+$309416c0) mod 77)<>0 do
    begin
      code:=code+1;
    end;
  editbox2.text:='NE-'+int2str(code)+'-EWD';
end;
end;

procedure TForm1.Button2Click(Sender: PObj);
begin
form.close;
end;
end.

  誰說dede沒用?dede有大用!

相關文章