对与现在dnf出现的DLL外挂的编写,有兴趣的可以看下

社区服务
高级搜索
猴岛论坛DNF地下城与勇士对与现在dnf出现的DLL外挂的编写,有兴趣的可以看下
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
6个回复

对与现在dnf出现的DLL外挂的编写,有兴趣的可以看下

楼层直达
wuyoubin

ZxID:1705384

等级: 列兵
举报 只看楼主 使用道具 楼主   发表于: 2008-10-31 0
相信大多数人对DELPHI语言并不陌生
此类dll外挂说白了就是通过窗口钩子搭建DLL注入
下面奉上本人对此DLL编写的部分代码
1. 要在目标行程内执行的程式
procedure myMessageBegin(param: PParam); stdcall;
type
LoadLibraryFunc = function(lib: PChar): DWORD; stdcall;
GetProcAddressFunc = function(lib: DWORD; name: PChar): DWORD; stdcall;
MessageBoxFunc = function(handle: DWORD; msg, title: PChar; flag: DWORD): DWORD; stdcall;
var
myLoad: LoadLibraryFunc;
myGetProc: GetProcAddressFunc;
myMsg: MessageBoxFunc;
hlib: DWORD;
begin
myLoad := LoadLibraryFunc(param^.fLoadLibrary);
myGetProc := GetProcAddressFunc(param^.fGetProcAddress);
hlib := myLoad(@param^.sUser[0]);
myMsg := MessageBoxFunc(myGetProc(hlib, @param^.sMessage[0]));
myMsg(0, @param^.sUser[0], @param^.sMessage[0], MB_OK);
end; (相当繁琐)
耐心看看一定会有收获
2. 注入函数的参数型别定义(这里就不做详细说明了,没什么必要)
下面奉上注入程式
procedure TForm1.btnInjectClick(Sender: TObject);
var
hwin, pid: DWORD;
hprocess: DWORD;
param: TParam;
pparam, pfunc: Pointer;
hlib: DWORD;
hthread: DWORD;
s: string;
v: DWORD;
iSize: DWORD;
begin
hwin := FindWindow(nil, PChar(edtName.Text));
if hwin = 0 then begin
  MessageBox(self.Handle, '找不到指定的视窗!', '讯息', MB_OK or MB_ICONWARNING);
  Exit;
end;
GetWindowThreadProcessId(hwin, pid);
if pid = 0 then begin
  MessageBox(self.Handle, '找不到行程ID', '讯息', MB_OK or MB_ICONWARNING);
  Exit;
end;
hprocess := OpenProcess(PROCESS_ALL_ACCESS, False, pid);
if hprocess = 0 then begin
  MessageBox(self.Handle, '无法开启行程', '讯息', MB_OK or MB_ICONWARNING);
  Exit;
end;
pparam := VirtualAllocEx(hprocess, nil, SizeOf(param), MEM_COMMIT, PAGE_READWRITE);
if pparam = nil then begin
  MessageBox(self.Handle, '要求参数记忆体失败', '讯息', MB_OK or MB_ICONWARNING);
  CloseHandle(hprocess);
  Exit;
end;
// 这里定义一个 myMessageEnd 空函数来判断 myMessageBegin 大小
iSize := DWORD(@myMessageEnd)-DWORD(@myMessageBegin)+1;
pfunc := VirtualAllocEx(hprocess, nil, iSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if pfunc = nil then begin
  MessageBox(self.Handle, '要求函数记忆体失败', '讯息', MB_OK or MB_ICONWARNING);
  CloseHandle(hprocess);
  Exit;
end;
FillChar(param, SizeOf(param), 0);
hlib := GetModuleHandle('Kernel32.dll');
param.fLoadLibrary := DWORD(GetProcAddress(hlib, 'LoadLibraryA'));
param.fGetProcAddress := DWORD(GetProcAddress(hlib, 'GetProcAddress'));
s := 'user32.dll';
Move(s[1], param.sUser[0], Length(s));
s := 'MessageBoxA';
Move(s[1], param.sMessage[0], Length(s));
WriteProcessMemory(hprocess, pparam, @param, SizeOf(param), v);
WriteProcessMemory(hprocess, pfunc, @myMessageBegin, iSize, v);
hthread := createRemoteThread(hprocess, nil, 0, pfunc, pparam, 0, v);
WaitForSingleObject(hthread, INFINITE);
VirtualFreeEx(hprocess, pfunc, iSize, MEM_DECOMMIT);
VirtualFreeEx(hprocess, pparam, SizeOf(param), MEM_DECOMMIT);
CloseHandle(hprocess);
end;





我非英雄

ZxID:2224207

等级: 上等兵
举报 只看该作者 沙发   发表于: 2008-10-31 0
SF?
zcy87710

ZxID:1874099

等级: 上尉
举报 只看该作者 板凳   发表于: 2008-10-31 0
沙发
345078544

ZxID:2063050

等级: 列兵
举报 只看该作者 地板   发表于: 2008-10-31 0
看不懂·  只认识沙发
我非英雄

ZxID:2224207

等级: 上等兵
举报 只看该作者 4楼  发表于: 2008-10-31 0
哦也
戴眼镜的熟男

ZxID:2159125

等级: 中将
恋爱讲究的是竞争能力,婚姻注重的是管理能力

举报 只看该作者 5楼  发表于: 2008-10-31 0
太深奥!!还是算了,头都大
johnson112

ZxID:2226416

等级: 列兵
举报 只看该作者 6楼  发表于: 2008-10-31 0
21333333333333
« 返回列表
发帖 回复