如果知道有软件在访问本程序的地址空间?(防破解??)欢迎讨论

smilelhh 2004-10-25 03:25:30
rt
...全文
156 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
smilelhh 2004-10-26
  • 打赏
  • 举报
回复
谢过消失在人海!
问题再讨论下去也就这样。结帐了
ksaiy 2004-10-25
  • 打赏
  • 举报
回复
可以.你上面说的。用ollydbg调试会有提示.
其实关于Anti-loader我在上面已经给了一个例子了。
呵呵:0
smilelhh 2004-10-25
  • 打赏
  • 举报
回复
不知道这个怎么样,效果:
procedure TForm1.FormCreate(Sender: TObject);
var
isDebuggerPresent: function:Boolean;
DllModule: THandle;
begin
DllModule := LoadLibrary('kernel32.dll');
isDebuggerPresent := GetProcAddress(DllModule, 'IsDebuggerPresent');
if isDebuggerPresent then
begin
MessageBox(self.Handle, '请不要调试我!', '抗议',
MB_OK or MB_ICONASTERISK);
Application.Terminate;
end;
end;

ksaiy 2004-10-25
  • 打赏
  • 举报
回复
to smilelhh(blue)
如果是载到内存进行调试的就很弄了.
如果是静态的你可以用加壳、压缩、花指令来进行干扰。
为了防止脱壳。你可以增加CRC校验。并且在多个地方进行校验。
rjy206 2004-10-25
  • 打赏
  • 举报
回复
up
smilelhh 2004-10-25
  • 打赏
  • 举报
回复
to ksaiy(消失在人海) ( )
你这好象只是检测一些流行的跟踪软件是否已经运行,正如你好说,如果是直接载到到内存中进行发编译就没办法。

如果是这种情况怎么办呢?
ksaiy 2004-10-25
  • 打赏
  • 举报
回复
因为高版的DEDE是直接载到到内存中进行发编译的。而低版本的DEDE是不载入内存进行反编译的。
呵呵:)
ksaiy 2004-10-25
  • 打赏
  • 举报
回复
Procedure Anti_DeDe();//检测DEDE;
var
DeDeHandle:THandle;
i:integer;
begin
DeDeHandle:=FindWindow(nil,chr($64)+chr($65)+chr($64)+chr($65));
if DeDeHandle<>0 then
begin
For i:=1 to 4500 do
SendMessage(DeDeHandle,WM_CLOSE,0,0);
end;
end;

这段代码只对高版的DEDE起作用.如果是2.5版以前的就不起作用了。
jinjazz 2004-10-25
  • 打赏
  • 举报
回复
不会
ksaiy 2004-10-25
  • 打赏
  • 举报
回复
反跟踪.........
如果是静态载入的话.你是反跟踪不到的。所以在程序还应该加入反调试工具的代码.建议加上壳然后进行CRC校验....

下面给段代码:
unit Anti;

interface

uses
Messages,Classes, Windows,TlHelp32,SysUtils,Dialogs;

Function SofticeLoaded:Boolean;
Procedure Anti_DeDe();
Function RegLoaded:Boolean;
Function FileLoaded:Boolean;
Function SoftIceXPLoaded:Boolean;
Function IsBPX(addr:Pointer):Boolean;
Function IsDebug():Boolean;

implementation

////////////////////////////////////////////////////////////////////////////////
//Anti-Debug
Function SoftIceLoaded: Boolean; //检测Win98下SoftICE
var
hFile: Thandle;
Begin
Result := false;
hFile := CreateFileA('\\.\SICE', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if( hFile <> INVALID_HANDLE_VALUE ) then begin
CloseHandle(hFile);
Result := TRUE;
end;
End;

Function SoftIceXPLoaded:Boolean;//检测Win2000/XP下的SoftIce
var
mark:Integer;
YesInt,NoInt:Integer;
begin
YesInt:=0;NoInt:=0;
mark:=0;
asm
push offset @handler
push dword ptr fs:[0]
mov dword ptr fs:[0],esp
xor eax,eax
int 1
inc eax
inc eax
pop dword ptr fs:[0]
add esp,4
or eax,eax
jz @found
cmp mark, 0
jnz @found
jmp @Nofound
@handler:
mov ebx,[esp+0ch]
add dword ptr [ebx+0b8h],02h
mov ebx,[esp+4]
cmp [ebx], 80000004h
jz @Table
inc mark
@Table:
xor eax,eax
ret
@found:
mov YesInt,1
@Nofound:
mov NoInt,1
end;
if Yesint=1 then
Result:=True;
if NoInt=1 then
Result:=False;
end;

////////////////////////////////////////////////////////////////////////////////
//Anti-Monitor
Function DumpLoaded: Boolean; //检测RegMON;
var
hFile: Thandle;
Begin
Result:= false;
hFile := FindWindow(nil,'ProcDump32 (C) 1998, 1999, 2000 G-RoM, Lorian & Stone');
if( hFile <> 0 ) then
begin
Result:= TRUE;
end;
End;

Function RegLoaded: Boolean; //检测RegMON;
var
hFile: Thandle;
Begin
Result:= false;
hFile := FindWindow(nil,'Registry Monitor - Sysinternals: www.sysinternals.com');
if( hFile <> 0 ) then
begin
Result:= TRUE;
end;
End;

Function FileLoaded: Boolean; //检测FileMON;
var
hFile: Thandle;
Begin
Result:= false;
hFile := FindWindow(nil,'File Monitor - Sysinternals: www.sysinternals.com');
if( hFile <> 0 ) then
begin
Result:= TRUE;
end;
End;

////////////////////////////////////////////////////////////////////////////////
//Anti-loader
Function IsDebug():Boolean; //检测调试器;
var
YInt,NInt:Integer;
begin
asm
mov eax,fs:[30h]
movzx eax,byte ptr[eax+2h]
or al,al
jz @No
jnz @Yes
@No:
mov NInt,1
@Yes:
Mov YInt,1
end;
if YInt=1 then
Result:=True;
if NInt=1 then
Result:=False;
end;

////////////////////////////////////////////////////////////////////////////////
//DetectBreakpoint
Function IsBPX(addr:Pointer):Boolean;//防范BPX断点
var
YInt,NInt:Integer;
begin
asm
mov esi,addr
mov al,[esi]
cmp al,$CC
je @Yes
jne @No
@Yes:
mov YInt,1
@No:
mov NInt,1
end;
if YInt=1 then
Result:=True;
if NInt=1 then
Result:=False;
end;

Procedure Anti_DeDe();//检测DEDE;
var
DeDeHandle:THandle;
i:integer;
begin
DeDeHandle:=FindWindow(nil,chr($64)+chr($65)+chr($64)+chr($65));
if DeDeHandle<>0 then
begin
For i:=1 to 4500 do
SendMessage(DeDeHandle,WM_CLOSE,0,0);
end;
end;

end.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧