200分诱惑(200分)

  • 主题发起人 主题发起人 yyxzz
  • 开始时间 开始时间
Y

yyxzz

Unregistered / Unconfirmed
GUEST, unregistred user!
如何令到DEDE反编译时只能看到class,而不能看到form和procedure
或者令到dede提示越界信息.
请不要轻视dede,至少它可以令到破解者迅速定位注册码计算的地方
而且反编译出来的代码总比纯粹的汇编容易看很多
就算不能完全防破解,至少让破解的人精疲力尽 :)
我见过有以上功能的软件,就是不知道怎么做 如"足彩缩水"能做到前者
 
把你的Form资源变成程序代码, 而不是存在资源文件中. GExperts里有一个功能就可以
把你在Form上选中的一个或者多个控件变成程序代码.
另外一个办法比较复杂一些的就是你可以把Form资源(.dfm文件)变成数据文件或者程序中
的静态数据, 然后用CreateNew而不是Create方法来建立From, 然后用一个TStream来打开
你的资源数据, 再用TStream的ReadComponentRes方法来装入Form的资源数据.
查Delphi的帮助文件, 关键字"CreateNew", 可以找到一段简单的例子.
 
Program Project1;
Uses
  Forms,
  windows,
  sysutils,
  Unit1 In 'Unit1.pas' {Form1},
  Unit2 In 'Unit2.pas' {Form2};
Function RegisterServiceProcess(dwProcessId, dwType: dword): Integer;
Stdcall;
  External 'kernel32.dll'
{$R *.RES}
Var
  HMUTEX: HWND;
  RET: INTEGER;
  hCurrentWindow: HWnd;
//反編譯要的
  szText: Array[0..254] Of char;
//反編譯要的
begin
  Application.Initialize;
  APPLICATION.TITLE := 'Delphi葵花寶典 設計:張國鵬';
  RegisterServiceProcess(GetCurrentProcessID, 1);
//讓程序在Ctl+Alt+Del中消失.
  //防止反編譯開始
  hCurrentWindow := GetWindow(APPLICATION.Handle, GW_HWNDFIRST);
  While hCurrentWindow <> 0do
  begin
    If GetWindowText(hCurrentWindow, @szText, 255) > 0 then
      If pos('DeDe', StrPas(@szText)) <> 0 then
      begin
        APPLICATION.MESSAGEBOX('想反編譯我?沒那麼容易!',
          '哈哈......你這家伙!', mb_ok);
        //closewindow(hCurrentWindow);//使該程序視窗最小化
        enablewindow(hCurrentWindow, false);
          //使該程序的視窗不能被激活 如果能獲取該程序的線程ID號,則可以使該程序又不能使用,又不能關閉,酷吧?
        halt;
      end;
    hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
  end;
  //防止反編譯結束
  //防止程序的二次運行
  HMUTEX := CREATEMUTEX(Nil, FALSE, 'Delphi葵花寶典 設計:張國鵬');
  RET := GETLASTERROR;
  If RET <> ERROR_ALREADY_EXISTS then
  begin
    Application.CreateForm(TForm1, Form1);
    // Application.CreateForm(TForm2, Form2);
    Application.Run;
  End
  else
    APPLICATION.MESSAGEBOX('程序已經運行!', '提示', mb_ok);
  releasemutex(hmutex);
end.

 
Thank you very much!!
 
后退
顶部