a46213599 发表于 2026-7-3 16:14:05

破解一个自己写的Delphi7.0程序

unit MainUnit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;
type
TfrmMain=class(TForm)
    btnFunc1: TButton;
    btnFunc2: TButton;
    lblTip: TLabel;
    procedure FormCreate(Sender : TObject);
    procedure btnFunc1Click(Sender : TObject);
    procedure btnFunc2Click(Sender : TObject);
    procedure _PROC_00452954(Sender : TObject);
    procedure _PROC_00452BE5(Sender : TObject);
    procedure _PROC_00452C14(Sender : TObject);
private
    { Private declarations }
public
    { Public declarations }
end ;

var
frmMain: TfrmMain;

{This file is generated by DeDe Ver 3.99a Copyright (c) 1999-2002 DaFixer}

implementation

{$R *.DFM}

procedure TfrmMain.FormCreate(Sender : TObject);
begin
(*
00452A28   55                     push    ebp
00452A29   8BEC                   mov   ebp, esp
00452A2B   83C4F8               add   esp, -$08
00452A2E   8955F8               mov   , edx
00452A31   8945FC               mov   , eax

* Reference to frmMain
|
00452A34   8B45FC               mov   eax,
* Reference to : TfrmMain._PROC_00452954()
|
00452A37   E818FFFFFF             call    00452954
* Reference to frmMain
|
00452A3C   8B55FC               mov   edx,
* Reference to field TfrmMain.OFFS_0304
|
00452A3F   888204030000         mov   , al
* Reference to frmMain
|
00452A45   8B45FC               mov   eax,
* Reference to field TfrmMain.OFFS_0304
|
00452A48   80B80403000000         cmp   byte ptr , $00
00452A4F   7542                   jnz   00452A93
00452A51   33C9                   xor   ecx, ecx
00452A53   B201                   mov   dl, $01
* Reference to class TfrmReg
|
00452A55   A110254500             mov   eax, dword ptr [$00452510]
* Reference to : TApplication._PROC_004497C0()
|
00452A5A   E8616DFFFF             call    004497C0
* Reference to TfrmReg instance
|
00452A5F   8B1570424500         mov   edx, [$00454270]
00452A65   8902                   mov   , eax
* Reference to TfrmReg instance
|
00452A67   A170424500             mov   eax, dword ptr [$00454270]
00452A6C   8B00                   mov   eax,
00452A6E   8B10                   mov   edx,
* Reference to method TfrmReg.ShowModal()
|
00452A70   FF92EC000000         call    dword ptr
* Reference to TfrmReg instance
|
00452A76   A170424500             mov   eax, dword ptr [$00454270]
00452A7B   8B00                   mov   eax,
* Reference to: System.Proc_00403630
|
00452A7D   E8AE0BFBFF             call    00403630
* Reference to frmMain
|
00452A82   8B45FC               mov   eax,
* Reference to : TfrmMain._PROC_00452954()
|
00452A85   E8CAFEFFFF             call    00452954
* Reference to frmMain
|
00452A8A   8B55FC               mov   edx,
* Reference to field TfrmMain.OFFS_0304
|
00452A8D   888204030000         mov   , al
* Reference to frmMain
|
00452A93   8B45FC               mov   eax,
* Reference to field TfrmMain.OFFS_0304
|
00452A96   8A9004030000         mov   dl, byte ptr
* Reference to frmMain
|
00452A9C   8B45FC               mov   eax,
* Reference to control TfrmMain.btnFunc1 : TButton
|
00452A9F   8B80F8020000         mov   eax,
00452AA5   8B08                   mov   ecx,
* Reference to method TButton.SetEnabled(Boolean)
|
00452AA7   FF5164               call    dword ptr
* Reference to frmMain
|
00452AAA   8B45FC               mov   eax,
* Reference to field TfrmMain.OFFS_0304
|
00452AAD   8A9004030000         mov   dl, byte ptr
* Reference to frmMain
|
00452AB3   8B45FC               mov   eax,
* Reference to control TfrmMain.btnFunc2 : TButton
|
00452AB6   8B80FC020000         mov   eax,
00452ABC   8B08                   mov   ecx,
* Reference to method TButton.SetEnabled(Boolean)
|
00452ABE   FF5164               call    dword ptr
* Reference to frmMain
|
00452AC1   8B45FC               mov   eax,
* Reference to field TfrmMain.OFFS_0304
|
00452AC4   80B80403000000         cmp   byte ptr , $00
00452ACB   7415                   jz      00452AE2
* Possible String Reference to: '软件已注册,全部功能可用'
|
00452ACD   BA042B4500             mov   edx, $00452B04
* Reference to frmMain
|
00452AD2   8B45FC               mov   eax,
* Reference to control TfrmMain.lblTip : TLabel
|
00452AD5   8B8000030000         mov   eax,
* Reference to: Controls.Proc_00431A58
|
00452ADB   E878EFFDFF             call    00431A58
00452AE0   EB13                   jmp   00452AF5
* Possible String Reference to: '未注册,请放入sRegFile2020.Dat 密钥文件... ... ...'
|
00452AE2   BA282B4500             mov   edx, $00452B28
* Reference to frmMain
|
00452AE7   8B45FC               mov   eax,
* Reference to control TfrmMain.lblTip : TLabel
|
00452AEA   8B8000030000         mov   eax,
* Reference to: Controls.Proc_00431A58
|
00452AF0   E863EFFDFF             call    00431A58
00452AF5   59                     pop   ecx
00452AF6   59                     pop   ecx
00452AF7   5D                     pop   ebp
00452AF8   C3                     ret
*)
end;

procedure TfrmMain.btnFunc1Click(Sender : TObject);
begin
(*
00452B5C   55                     push    ebp
00452B5D   8BEC                   mov   ebp, esp
00452B5F   83C4F8               add   esp, -$08
00452B62   8955F8               mov   , edx
00452B65   8945FC               mov   , eax
* Possible String Reference to: '功能1执行成功,仅注册后可访问'
|
00452B68   B8802B4500             mov   eax, $00452B80
* Reference to : TMessageForm._PROC_00427930()
|
00452B6D   E8BE4DFDFF             call    00427930
00452B72   59                     pop   ecx
00452B73   59                     pop   ecx
00452B74   5D                     pop   ebp
00452B75   C3                     ret
*)
end;

procedure TfrmMain.btnFunc2Click(Sender : TObject);
begin
(*
00452BA0   55                     push    ebp
00452BA1   8BEC                   mov   ebp, esp
00452BA3   83C4F8               add   esp, -$08
00452BA6   8955F8               mov   , edx
00452BA9   8945FC               mov   , eax
* Possible String Reference to: '功能2执行成功,仅注册后可访问'
|
00452BAC   B8C42B4500             mov   eax, $00452BC4
* Reference to : TMessageForm._PROC_00427930()
|
00452BB1   E87A4DFDFF             call    00427930
00452BB6   59                     pop   ecx
00452BB7   59                     pop   ecx
00452BB8   5D                     pop   ebp
00452BB9   C3                     ret
*)
end;

procedure TfrmMain._PROC_00452954(Sender : TObject);
begin
(*
00452954   55                     push    ebp
00452955   8BEC                   mov   ebp, esp
00452957   81C428FEFFFF         add   esp, $FFFFFE28
0045295D   33D2                   xor   edx, edx
0045295F   8955F4               mov   , edx
00452962   8945FC               mov   , eax
00452965   33C0                   xor   eax, eax
00452967   55                     push    ebp
00452968   68FC294500             push    $004529FC
***** TRY
|
0045296D   64FF30               push    dword ptr fs:
00452970   648920               mov   fs:, esp
00452973   C645FB00               mov   byte ptr , $00
* Possible String Reference to: 'sRegFile2020.Dat'
|
00452977   B8142A4500             mov   eax, $00452A14; // 密钥文件名字符串地址
* Reference to: Unit_0040727C.Proc_00408714
|
0045297C   E8935DFBFF             call    00408714; // 调用文件存在性检测函数
00452981   84C0                   test    al, al;   // 判断文件是否存在(al返回值)
// -------------------------------修改点1:jmp 004529E0------------------------------------------------------------------
00452983   7461                   jz      004529E6; // 文件不存在直接跳出校验逻辑
* Possible String Reference to: 'sRegFile2020.Dat'
|
00452985   BA142A4500             mov   edx, $00452A14
0045298A   8D8528FEFFFF         lea   eax,
* Reference to: System.Proc_00402C58
|
00452990   E8C302FBFF             call    00402C58
00452995   8D8528FEFFFF         lea   eax,
* Reference to: System.Proc_004029F4
|
0045299B   E85400FBFF             call    004029F4
* Reference to: System.Proc_00402864
|
004529A0   E8BFFEFAFF             call    00402864
004529A5   8D55F4               lea   edx,
004529A8   8D8528FEFFFF         lea   eax,
* Reference to: System.Proc_00402FD0
|
004529AE   E81D06FBFF             call    00402FD0
004529B3   8D8528FEFFFF         lea   eax,
* Reference to: System.Proc_0040303C
|
004529B9   E87E06FBFF             call    0040303C
* Reference to: System.Proc_00402864
|
004529BE   E8A1FEFAFF             call    00402864
004529C3   8D8528FEFFFF         lea   eax,
* Reference to: System.Proc_00402D14
|
004529C9   E84603FBFF             call    00402D14
* Reference to: System.Proc_00402864
|
004529CE   E891FEFAFF             call    00402864
004529D3   8B45F4               mov   eax,
* Reference to: MainUnit.Proc_004528F4
|
004529D6   E819FFFFFF             call    004528F4; // 密钥校验算法函数
004529DB   3D21C3E498             cmp   eax, $98E4C321; // 对比校验正确哈希值
004529E0   7504                   jnz   004529E6; // 校验不匹配跳过注册标记赋值
// -------------------------------修改点2:jmp 004529E2--------------------------------------------------------------
004529E2   C645FB01               mov   byte ptr , $01; // 校验通过,标记置1(已注册)
004529E6   33C0                   xor   eax, eax
004529E8   5A                     pop   edx
004529E9   59                     pop   ecx
004529EA   59                     pop   ecx
004529EB   648910               mov   fs:, edx
****** FINALLY
|
* Possible String Reference to: '奅麐錧?'
|
004529EE   68032A4500             push    $00452A03
004529F3   8D45F4               lea   eax,
* Reference to: System.Proc_00404380
|
004529F6   E88519FBFF             call    00404380
004529FB   C3                     ret
004529FC   E98313FBFF             jmp   00403D84
00452A01   EBF0                   jmp   004529F3
****** END
|
00452A03   8A45FB               mov   al, byte ptr
00452A06   8BE5                   mov   esp, ebp
00452A08   5D                     pop   ebp
00452A09   C3                     ret
*)
end;

procedure TfrmMain._PROC_00452BE5(Sender : TObject);
begin
(*
00452BE5   8BEC                   mov   ebp, esp
00452BE7   33C0                   xor   eax, eax
00452BE9   55                     push    ebp
00452BEA   68092C4500             push    $00452C09
***** TRY
|
00452BEF   64FF30               push    dword ptr fs:
00452BF2   648920               mov   fs:, esp
00452BF5   FF05085C4500         inc   dword ptr [$00455C08]
00452BFB   33C0                   xor   eax, eax
00452BFD   5A                     pop   edx
00452BFE   59                     pop   ecx
00452BFF   59                     pop   ecx
00452C00   648910               mov   fs:, edx
****** FINALLY
|
00452C03   68102C4500             push    $00452C10
00452C08   C3                     ret
00452C09   E97611FBFF             jmp   00403D84
00452C0E   EBF8                   jmp   00452C08
****** END
|
00452C10   5D                     pop   ebp
00452C11   C3                     ret
*)
end;

procedure TfrmMain._PROC_00452C14(Sender : TObject);
begin
(*
00452C14   832D085C450001         sub   dword ptr [$00455C08], +$01
00452C1B   C3                     ret
*)
end;

end.

反汇编里标注了2处破解点,纯属于没入门的玩具,高手飘过吧......!



linxiansen 发表于 2026-7-3 17:03:58

PYG有你更精彩!

chchhau 发表于 2026-7-3 17:13:21

PYG21周年生日快乐

飞天梦 发表于 2026-7-4 05:33:48

谢谢分享

782878952 发表于 2026-7-5 18:18:50

PYG21周年生日快乐!
页: [1]
查看完整版本: 破解一个自己写的Delphi7.0程序