公布诛仙外挂部分源代码

namewml 2010-03-08 03:31:57
procedure Wait(MSecs: Integer);
var
FirstTickCount, Now: Longint;
begin
FirstTickCount := GetTickCount();
repeat
Application.ProcessMessages;
sleep(1);
Now := GetTickCount();
until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);
end;

procedure bugviewer;
var
ListItem: TListItem;
i:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
num:cardinal;
BugName:array[0..32]of wideChar;
//TargetName:array[0..32]of wideChar;
BugBase,BugArrayBase,BugNameBase:dword;//人物基址{(DNF幻影官网 WWW.DNFHUAYING.COM)}
BugArrayCount:cardinal;
TargetID:longint;
TargetHP,TargetMaxHP:cardinal ;
bugx,bugy,Bugjuli:single;
pid:cardinal;
begin
try
Gamehwnd:=findwindow(nil,'Element Client');
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(base),@BugBase, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(BugBase+$8),@BugBase, 4, Num);//


ReadProcessMemory(gamehandle,pointer(BugBase+$20),@BugBase, 4, Num);//怪物基址
ReadProcessMemory(gamehandle,pointer(BugBase+$24),@BugArrayCount, 4, Num);//怪物数组最大值
ReadProcessMemory(gamehandle,pointer(BugBase+$18),@BugArrayBase, 4, Num);//怪物数组首地址

{=========================怪物列表=======================}
form1.ListView1.Items.Clear;//清空列表
For i:= 0 to BugArrayCount-1 do
begin
ReadProcessMemory(gamehandle, Pointer(BugArrayBase+4*i),@BugBase,4,Num);
if BugBase>0 then
begin
ReadProcessMemory(gamehandle, Pointer(BugBase+$4), @BugBase, 4, Num);
ReadProcessMemory(gamehandle, Pointer(BugBase+$11c), @TargetID, 4, Num);//怪物ID
ReadProcessMemory(gamehandle, Pointer(BugBase+$130), @TargetHP, 4, Num);//怪物HP
ReadProcessMemory(gamehandle, Pointer(BugBase+$148), @TargetMaxHP, 4, Num);//怪物HP上限
ReadProcessMemory(gamehandle, Pointer(BugBase+$3c), @bugx, 4, Num);//怪物X坐标
ReadProcessMemory(gamehandle, Pointer(BugBase+$44), @bugY, 4, Num);//怪物Y坐标
ReadProcessMemory(gamehandle,pointer(BugBase+$208),@BugNameBase, 4, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugNameBase),@BugName[0], 32, Num); //怪物名称地址
ReadProcessMemory(gamehandle,pointer(BugBase+$22c),@Bugjuli, 4, Num);

//ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @BugName, 32, Num);

//ReadProcessMemory(gamehandle, Pointer(BugBase+$208), @BugName, 4, Num);//怪物名称
//ReadProcessMemory(gamehandle, Pointer(BugName+0), @TargetName, 32, Num);
//tempname:=String(TargetName);
with form1.ListView1 do
begin
ListItem := TListView(form1.ListView1).Items.Add;
ListItem.Caption := ( BugName);
listitem.SubItems.Add(inttostr(targetid));
ListItem.SubItems.Add(inttostr(TargetHP)+'/'+inttostr(TargetMaxHP));
listitem.SubItems.Add(inttostr(trunc(bugx))+','+IntToStr(Trunc(bugY)));
listitem.SubItems.Add(inttostr(trunc(Bugjuli)));
end;
end;
end;
//end;
except
//
end;
CloseHandle(gamehandle);
end;

procedure tform1.xuanguai;
var
i:integer;
myarray:Array of longint;
minvalue:longint;
s: string;
zxhwnd:hwnd;
begin
bugviewer;
setlength(myarray,form1.ListView1.Items.Count - 1);
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
myarray[i]:=strtoint(form1.ListView1.Items[i].SubItems[3]);
//stringlist.Add(ListView1.Items[i].SubItems[3]);
end;
minvalue:=minIntValue((myarray));
for i := 0 to form1.ListView1.Items.Count - 1 do
begin
if form1.ListView1.Items[i].SubItems[3]= inttostr(minvalue) then
begin
s := form1.ListView1.Items[i].SubItems[0];
zxhwnd:= findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.wm_idxuanguai,0,strtoint(s));
end;
end;
end;

procedure useskill(skillid: Cardinal);
var
zxhwnd:hwnd;
begin
zxhwnd:=findwindow(nil,'Element Client');
if zxhwnd<>0 then postmessage(zxhwnd,sendmsg.WM_JinengGongJi,skillid,0);
end;

procedure getskill(var skill:ATSkill);
var
i,skillnum:integer;
Gamehwnd:cardinal;
GameHandle:Cardinal;
myskilladdr,skillFirst:cardinal;
num:cardinal;
baseman:cardinal;
pid:cardinal;
begin
Gamehwnd:=findwindow(nil,'Element Client');
if Gamehwnd<>0 then
Begin
GetWindowThreadProcessId(Gamehwnd,@pid); //获取PID;
GameHandle:=openprocess(process_all_access,false,pid); //最高权限打开游戏;
ReadProcessMemory(gamehandle,pointer(BASE),@BaseMan, 4, Num);//一级基址
ReadProcessMemory(gamehandle,pointer(baseman + $28), @BaseMan, 4, Num);//人物基址
readprocessmemory(gamehandle,pointer(baseman+$910),@skillnum,4,num);
readprocessmemory(gamehandle,pointer(baseman+$90c),@myskilladdr,4,num);
setlength(skill,skillNum);
for i:=0 to skillNum-1 do
begin
ReadProcessMemory(GameHandle,pointer(myskilladdr + i*$4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $8), @skill[i].id, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $4), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst + $63), @SkillFirst, 4, Num);
ReadProcessMemory(GameHandle,pointer(SkillFirst), @skill[i].name[0], 20, Num);
SkillFirst:=0;
end;
closehandle(GameHandle);
end;
end;

procedure readmyleveexp;
var
myinifile:Tinifile;
path:pchar;
i:integer;
total:integer;
section:string;
begin
path:=pchar('.\data\level.ini');
section:='level';
myinifile:=Tinifile.Create(path);
total:=myinifile.ReadInteger(section,'total',0);
setlength(leaveArray,total);
for i:=0 to high(leaveArray) do
begin
leaveArray[i]:=myinifile.ReadInteger(section,inttostr(i),0);
end;
myinifile.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
readmyleveexp;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
try
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
finally

end;
//unhook;
end;

procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
i:integer;
begin
RzComboBox1.Items.Clear;
RzComboBox2.Items.Clear;
RzComboBox3.Items.Clear;
RzComboBox4.Items.Clear;
RzComboBox5.Items.Clear;
getskill(skills);
for i:=0 to high(skills) do
begin
RzComboBox1.Items.Add(skills[i].name);
RzComboBox2.Items.Add(skills[i].name);
RzComboBox3.items.Add(skills[i].name);
RzComboBox4.items.Add(skills[i].name);
RzComboBox5.items.Add(skills[i].name);
//self.ComboBox_skilladd.Items.Add(skills[i].name);
end;
if high(skills)>0 then
begin
RzComboBox1.ItemIndex:=0;
RzComboBox2.ItemIndex:=0;
RzComboBox3.ItemIndex:=0;
RzComboBox4.ItemIndex:=0;
RzComboBox5.ItemIndex:=0;
end;
end;

procedure TForm1.RzBitBtn2Click(Sender: TObject);
var
i:integer;
begin
RzListBox1.Items.Add(RzEdit1.text);
setlength(itemFilter,RzListBox1.Items.Count);
for i:=0 to high(itemFilter) do
begin
itemFilter[i].name:=RzListBox1.Items.Strings[i];
end;
end;

procedure TForm1.RzBitBtn3Click(Sender: TObject);
var
i:integer;
begin
for I := 0 to RzListBox1.Count - 1 do
begin
if RzListBox1.Selected[i] then rzlistbox1.Items[i]:=rzedit1.Text;
end;
end;

procedure TForm1.RzBitBtn4Click(Sender: TObject);
begin
RzListBox1.DeleteSelectedItems;
end;

procedure TForm1.RzBitBtn5Click(Sender: TObject);
var
zxhandle:hwnd;
begin
zxhandle:=findwindow(nil,'Element Client');
sitdown:=false;
//form1.mypostmsg(sendmsg.WM_quxiaodazuo);
sethook(zxhandle);

if viewthread<>nil then terminatethread(viewthread.Handle,0);
viewthread:=TviewMemory.Create(false);

if autoattack<>nil then terminatethread(autoattack.Handle,0);
autoattack:=Tautoattack.create(false);

if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
viewerhp:=Tviewerhp.Create(false);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end;

procedure TForm1.RzBitBtn6Click(Sender: TObject);
begin
if viewthread<>nil then terminatethread(viewthread.Handle,0);
if autoattack<>nil then terminatethread(autoattack.Handle,0);
if viewerhp<>nil then terminatethread(viewerhp.Handle,0);
if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);
end;

procedure TForm1.RzBitBtn7Click(Sender: TObject);
begin
RzListBox1.Clear;
end;

procedure TForm1.RzCheckBox7Click(Sender: TObject);
begin
RzNumericEdit3.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit4.Enabled:= not RzCheckBox7.Checked;
RzNumericEdit5.Enabled:= not RzCheckBox7.Checked;

if RzCheckBox7.Checked then
begin
pdingdiandaguai:=Tdingdiandaguai.Create(false);
end else if pdingdiandaguai<>nil then terminatethread(pdingdiandaguai.Handle,0);

end;

procedure TForm1.RzListBox1Click(Sender: TObject);
begin
rzedit1.Text:=RzListBox1.SelectedItem;
end;

...全文
1525 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dj2437 2010-03-20
  • 打赏
  • 举报
回复
完美公司的人来宣传了
给部分的或不能用的
都是宣传用的
外部外部人很难做了现在
还是以前传奇啊
说得轻松想得轻松
什么基址,CALL
都用来糊小孩的
内存修改的人家不认行不行呢
过些时间让你掉线行不行呢
给个图片你认证行不行呢
别说别人没这个技术
还停留在ReadProcessMemory、WriteProcessMemory
封包都行不通了
ankingyes 2010-03-20
  • 打赏
  • 举报
回复
这是我发在网上的源码,竟被你拿来了
ffwin 2010-03-20
  • 打赏
  • 举报
回复
u p!
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qkhhxkj102 的回复:]
先收藏了,谢谢大侠
[/Quote]
NIU
qkhhxkj102 2010-03-17
  • 打赏
  • 举报
回复
先收藏了,谢谢大侠
addfox 2010-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sqldebug_fan 的回复:]
膜拜大牛。。。。。。。。。。。。。。。
[/Quote]
这牛历害!!关注中!
SQLDebug_Fan 2010-03-12
  • 打赏
  • 举报
回复
膜拜大牛。。。。。。。。。。。。。。。
支持中文哦 2010-03-12
  • 打赏
  • 举报
回复
拦截封包?重组新的封包欺骗服务器呢?
这些重要的东东也透露点点吧
zhuang_bx 2010-03-09
  • 打赏
  • 举报
回复
聊一下怎么过驱动保护.....................!
liangpei2008 2010-03-08
  • 打赏
  • 举报
回复
写外挂重要的是找游戏相关参数的一级基址以及二级基址,知道这些后无非就是ReadProcessMemory、WriteProcessMemory。而外挂源代码就相对简单多了
kfcoffe 2010-03-08
  • 打赏
  • 举报
回复
up 下

呵呵,只部分........

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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