完美世界国际版偶用汇编修改了一下,双击elementclient.exe 就可以启动了,不用再从Patcher.exe 启动,可以多开,因为我的机器有点旧了,所以,只开到了3,如果有谁的机器好可以多开几个试试(不敢保证不被封号).  最新的是 172 版的  ,下载解压后放到你的游戏目录,做好原先elementclient.exe的备份(重命名就行了).有什么问题可以反馈到这里.

现在完美又更新了,而我一直没有时间在弄游戏,等我有时间再修改一下吧

  

外挂被封的问题 不指定

青色咖啡 , 2008/11/01 15:28 , 完美世界 , 评论(0) , 阅读(536) , Via 本站原创
    好久没有发贴了,今天看到有人问GOD4的挂用什么加壳来防止被封号,我就说说一点个人经验。

想必大家电脑里面都有杀毒软件吧,你们看看,杀毒软件多牛啊,什么病毒都能查出来(但是能不能杀掉就值提怀疑了),好一点的杀毒软件如卡吧,NOD32,可以检测出未知病毒,因为病毒木马都有一种非正常的行为,如,注册成系统服务,改变注册表自启动项来自启动,隐藏自身等等各种伎俩,在这里我长话短说,不一一列举了,但是如果杀毒软件没有病毒样本,他们查杀病毒木马就会困难很多,就像现在的灰鸽子,出现了那么的多变种,杀毒软件一个个检测,当然是费时又费力,所以就会有特征码,只要一个PE文件(.exe文件)符合他们病毒库里面的特征,就会被杀,所以,现在没有能力写病毒木马的朋友们就会用另外两种方法来改变木马的特征码,一种是加壳,一种是修改PE文件特征,然最有效的方法不是加壳,而是修改PE文件,因为网络上的那些壳早就列入杀毒软件厂商的黑名单了,有些即使不是病毒木马,只要是加了那些壳,都会被查杀。
点击在新窗口中浏览此图片


   什么叫修改PE文件?如果说加壳软件是机械化的来修改PE文件入口点来防止破解防检测的话,那我们自已修改的话就是通过手工来改变我们的程序的入口点,特征码。同样一个PE文件,如果大家都用一种工具修改的话,那么修改出来的PE文件的MD5值和特征码是一样的,当然不会防查杀,但手工修改就不同,所就,我提倡大家多学学木马修改技术,会有收获的。不会的话请到 爱国都安全网下载动画。。
http://www.3800hk.com/donghua/f/23946.html 。
点击在新窗口中浏览此图片

   说了那么多,不知道大家看懂了没有,以上文章中,完美杀毒=软件厂商,外挂=木马病毒,游戏=系统,外挂行为也相当于一个木马在系统里的行为,所以就我们只要保证我们修改了的文件不在完美的黑名单中(在黑名单中一般会封一年),行为正常(行为不正常的话一般不会封一年)就可以随你挂。当然,还有种种,如窗口名,类名这些是不容易改变的,一般只有在编程里面解决,但是可以改变大小写,如 UnitForm 可以修改成UNITFORM ,这大大会改小被封机会。

   限于篇幅有限,我不多说明了,懂的话自然就懂了,不懂的下载几个远控的源码自己试一下,看看生成的文件是不是被杀。。
  名言:实践是最好的学习方法! 个人认为,不一定要局限于外挂方面,要各方面都要学习下,丰富软件知识。
.版本 2

.程序集 窗口程序集1
.程序集变量 基址, 整数型
.程序集变量 基址1, 整数型

.子程序 _窗口1_创建完毕

基址 = 十六到十 (“926FD4”)


.子程序 _句柄时钟_周期事件
.局部变量 字节, 文本型

窗口句柄 = 取窗体句柄 (, “Element Client”)

.如果真 (窗口句柄 > 0)
    信息 ()
    进程ID = 取窗口进程ID (窗口句柄)
    内存优化 ()
.如果真结束


.子程序 信息
.局部变量 临时人物, 字节集
.局部变量 人物名称, 文本型

一级基址 = 读整型内存 (进程ID, 基址) + 十六到十 (“1C”)
人物基址 = 读整型内存 (进程ID, 读整型内存 (进程ID, 一级基址) + 十六到十 (“20”))
怪物基址 = 读整型内存 (进程ID, 读整型内存 (进程ID, 读整型内存 (进程ID, 一级基址) + 十六到十 (“8”)) + 十六到十 (“24”))





.子程序 选怪
.局部变量 怪物数量, 整数型
.局部变量 怪物数组最大值, 整数型
.局部变量 怪物列表首地址, 整数型
.局部变量 I, 整数型
.局部变量 怪物偏移, 整数型
.局部变量 怪物信息指针, 整数型
.局部变量 怪物名称地址, 整数型
.局部变量 临时怪物名称, 字节集
.局部变量 怪物名称, 文本型
.局部变量 怪物ID, 整数型
.局部变量 N, 文本型
.局部变量 x, 字节集
.局部变量 y, 字节集
.局部变量 z, 字节集
.局部变量 j, 字节集
.局部变量 怪物x坐标, 整数型
.局部变量 怪物y坐标, 整数型
.局部变量 怪物z坐标, 整数型
.局部变量 怪物距离, 整数型
.局部变量 怪物种类, 整数型
.局部变量 怪物类别, 整数型
.局部变量 最近怪物, 整数型
.局部变量 要攻击的怪物ID, 整数型
.局部变量 对象数量, 整数型
.局部变量 怪物等级, 整数型
.局部变量 怪物当前血, 整数型
.局部变量 时间, 日期时间型
.局部变量 最近距离, 整数型
.局部变量 怪物名称首地址, 整数型
.局部变量 怪物状态, 整数型

最近距离 = 10000
怪物数量 = 读整型内存 (进程ID, 怪物基址 + 十六到十 (“14”))
怪物数组最大值 = 读整型内存 (进程ID, 怪物基址 + 十六到十 (“24”))
怪物列表首地址 = 读整型内存 (进程ID, 怪物基址 + 十六到十 (“18”))

.计次循环首 (怪物数组最大值 - 1, I)
    怪物偏移 = 读整型内存 (进程ID, 怪物列表首地址 + 4 × (I - 1))
    .如果真 (怪物偏移 > 0)
        怪物信息指针 = 读整型内存 (进程ID, 怪物偏移 + 十六到十 (“4”))
        怪物ID = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“11c”))
        怪物名称地址 = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“230”))
        临时怪物名称 = 内存读字节集 (进程ID, 怪物名称地址, 80)

        怪物名称 = 转换Unicode转Ansi (临时怪物名称)


        怪物当前血 = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“12c”))

        怪物最大血 = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“154”))

        怪物等级 = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“124”))
        怪物种类 = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“B4”))
        怪物类别 = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“120”))
        怪物状态 = 读整型内存 (进程ID, 怪物信息指针 + 十六到十 (“294”))

        ' 怪物种类  6为怪,7为NPC,9为宠物 A为GM
        .如果真 (怪物种类 = 6)
            N = “[怪]”
        .如果真结束
        .如果真 (怪物种类 = 7)
            N = “[NPC]”
        .如果真结束
        .如果真 (怪物种类 = 9)
            N = “[宠物]”
        .如果真结束
        .如果真 (怪物种类 = 10)
            N = “[GM]”
        .如果真结束

        x = 内存读字节集 (进程ID, 怪物信息指针 + 十六到十 (“3c”), 8)
        怪物x坐标 = 取整 (取字节集数据 (x, #小数型, ) ÷ 10) + 400
        y = 内存读字节集 (进程ID, 怪物信息指针 + 十六到十 (“44”), 8)
        怪物y坐标 = 取整 (取字节集数据 (y, #小数型, ) ÷ 10) + 550
        z = 内存读字节集 (进程ID, 怪物信息指针 + 十六到十 (“40”), 8)
        怪物z坐标 = 取整 (取字节集数据 (z, #小数型, ) ÷ 10)
        j = 内存读字节集 (进程ID, 怪物信息指针 + 十六到十 (“254”), 8)
        怪物距离 = 取整 (取字节集数据 (j, #小数型, ) ÷ 10)
        .如果真 (最近距离 ≥ 怪物距离)
            最近距离 = 怪物距离
        .如果真结束


        .如果真 (怪物种类 = 6 且 怪物距离 ≤ 最近距离 且 怪物状态 ≠ 4)
            写整型内存 (进程ID, 人物基址 + 十六到十 (“a18”), 怪物ID)
            标签1.标题 = 到文本 (怪物ID)

        .如果真结束

    .如果真结束

.计次循环尾 ()

.子程序 _按钮1_被单击

选怪 ()

下载文件 (已下载 334 次)
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,JZsd, ZnHideForm, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    ZnHideForm1: TZnHideForm;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
  private
    procedure xgcall;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  pid:Cardinal;
  hwndd:HWND;
  hProcess_N:Cardinal;


implementation

{$R *.dfm}

procedure Gongyongfaobo(p:pointer); stdcall;
var
tt:dword;
len:dword;
address:pointer;
begin
    address:=Pointer(FbaoJz);      //1.11
    len:=pdword(p)^;
    tt:=dword(p)+4;
    asm
      pushad
      MOV ECX,DWORD PTR [CallJZ]
      PUSH len        //包长
      PUSH tt        //包内容
      MOV ECX,DWORD PTR [ECX+$20]
      CALL address;
    popad
    end;
    end;



Function DuMemf(Addres: Cardinal): single;
var
PHND: THandle;
Num: cardinal;
bReadSucceed: LongBool;
begin
  hwndd:=FindWindow('ElementClient Window', 'Element Client');
GetWindowThreadProcessId(hwndd, @PID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, pid);//打开被注入的进程

if pid <> 0 then
begin
  //GetWindowThreadProcessId(MyHwnd,aproc);
  PHND := OpenProcess(PROCESS_VM_READ, False,pid);
  if PHND <> 0 then
  begin
   bReadSucceed :=ReadProcessMemory(PHND, Pointer(Addres), @Result, 4, Num);
   if bReadSucceed = False then Result := 0 ;
  end;
  CloseHandle(PHND);
end else
  Result := 0;
end;


Function DuMem(Addres: Cardinal): Cardinal;
var
PHND: THandle;
Num: cardinal;
bReadSucceed: LongBool;
Pid:Cardinal;
begin
  hwndd:=FindWindow('ElementClient Window', 'Element Client');
GetWindowThreadProcessId(hwndd, @PID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, pid);//打开被注入的进程
if pid <> 0 then
begin
  PHND := OpenProcess(PROCESS_VM_READ, False,pid);
  if PHND <> 0 then
  begin
   bReadSucceed :=ReadProcessMemory(PHND, Pointer(Addres), @Result, 4, Num);
   if bReadSucceed = False then Result := 0 ;
  end;
  CloseHandle(PHND);
end else
  Result := 0;
end;

procedure InjectFunc(Func: Pointer; Param: Pointer; ParamSize: DWORD);
var
  hProcess_N: THandle;
  ThreadAdd, ParamAdd: Pointer;
  hThread: THandle;
  lpNumberOfBytes,hwndd:DWORD;
begin
  hwndd:=FindWindow('ElementClient Window', 'Element Client');
GetWindowThreadProcessId(hwndd, @PID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, pid);//打开被注入的进程
  ParamAdd := VirtualAllocEx(hProcess_N, nil, ParamSize, MEM_COMMIT, PAGE_READWRITE);//申请参数空间
  ThreadAdd := VirtualAllocEx(hProcess_N, nil, 200, MEM_COMMIT, PAGE_READWRITE);//申请函数空间
  WriteProcessMemory(hProcess_N, ParamAdd, Param, ParamSize, lpNumberOfBytes); //写入参数地址
  WriteProcessMemory(hProcess_N, ThreadAdd, Func,200, lpNumberOfBytes); //写入函数地址
  hThread := CreateRemoteThread(hProcess_N, nil, 0, ThreadAdd, ParamAdd, 0, lpNumberOfBytes); //创建远程线程
  WaitForSingleObject(hThread, INFINITE);//等待线程结束
  VirtualFreeEx(hProcess_N, ThreadAdd, 0, MEM_RELEASE);
  VirtualFreeEx(hProcess_N, ParamAdd, 0, MEM_RELEASE); //释放申请的地址
  CloseHandle(hProcess_N); //关闭打开的句柄
end;

procedure TForm1.xgcall;
var
ecxi,ecxi1,ecxi2,eax,gwbase,GWsl,GWZDsl,gwzdsl1,Gwdj,GWLX,GWZL,eax1,eax2:Cardinal;
i,dz:Integer;
xuzhongID,gwHP,gwHPmax:Cardinal;
GWNAME:array[0..65]of wideChar;
gwid1,gwid:Cardinal;
xx,yy,zz,gwx, gwy,gwz,GWJL,rx,ry,rz,zjjl:Single;
bao:Fabaoxx;
lsgwjl,gwzt,Num,pwname:Cardinal;
begin
ecxi:=DuMem(BASE);
ecxi2:=DuMem(ecxi+$20);        //人物基址
rx:=DuMemf(ecxi2+$3C);         //人物x
ry:=DuMemf(ecxi2+$44);         //人物Y
Rz:=DuMemf(ecxi2+$40);         //人物Z
eax:=DuMem(ecxi+$8);
ecxi1:=DuMem(eax+$24);        //怪物基址
GWsl:=DuMem(ecxi1+$14);       //怪物數量
GWZDsl:=DuMem(ecxi1+$24);       //怪物數組最大值
gwzdsl1:=DuMem(ecxi1+$18);     //怪物列表首地址
gwid1:=0;
ZJJL:=999;
for i:=0 to GWZDsl-1 do
begin
eax1:=DuMem(gwzdsl1+4*i);
If eax1 > 0 Then
begin
eax2:=DuMem(eax1+$4);                     //怪物信息指针
gwHP:=DuMem(eax2+$12c);                  //怪血
gwHPmax:=DuMem(eax2+$154);               //怪最大血
Gwdj:=DuMem(eax2+$124);                 //怪等级
gwx:=DuMemf(eax2+$3C);                   //怪X
gwy:=DuMemf(eax2+$44);                  //怪Y
gwz:=DuMemf(eax2+$40);                  //怪Z
gwjl:=DuMemf(eax2+$254);               //怪距離
GWLX:=DuMem(eax2+$120);                 //怪类别
GWzt:=DuMem(eax2+$294);
GWZL:=DuMem(eax2+$B4);                //怪种类
gwid:=DuMem(eax2+$11C);             //怪iD
pwname:=DuMem(eax2+$230);            //怪名
ecxi2:=DuMem(ecxi+$20);               //选中怪基址
xuzhongID:=DuMem(ecxi2+$A18);        //选中怪ID
hProcess_N:=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
ReadProcessMemory(hProcess_N,Pointer(pwNAME),@Gwname, 64, Num);
if gwzt<>4 then
if  ZJJL>=GWJL then
  ZJJL:=gwjl;
if(gwjl<=ZJJL) and (GWZL=6)  then
  begin
     bao.len:=6;
     bao.tou:=$02;
     bao.ID:=gwid;
    InjectFunc(@Gongyongfaobo,@bao, SizeOf(bao));
   end;
end;
end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
xgcall;
end;

end.

更外一个是基址数据,可以自己更改

unit JZsd;
interface
uses windows;
const
BASE = $92764C;         //基址
FbaoJz = $589F20;      //發包基址
CallJZ = $00926FD4;  //Call 基址
Zhoulu1 =$0045D9F0;
Zhoulu2 =  $00461470;
Zhoulu3 = $0045DDF0;
zhoulupy = $BB8; //走路偏移
jlcall = $4559D0; //技能call
hanhua = $58A007; //說辭CALL
type
PDrugs=^TDrugs;
TDrugs = record
ID:cardinal;
name:string;
end;
Fabaoxx = packed record  //公用(选怪,打坐)
  len:dword;
  tou:word;
  id:DWORD;
  end;

TJianwu= packed record       //捡物发包
  len:DWORD;
  tou:Word;
  C1:dword;
  id:dword;
  end;

chiyao = packed record  //吃藥發包
   len:DWORD;
   tou:Word;
   x1:Byte;
   x2:Byte;
   c1:Byte;
   x3:Byte;
   ID:DWORD;
   end;

//拾取物品参数
PPickUp =^TPickUp;
TPickUp = record
id:cardinal;
sysNum:cardinal;
name:array[0..32]of WideChar;
itemX,itemY:single;
end;
//自动寻路参数
PGetGwCallParam = ^TGetGwCallParam;
  TGetGwCallParam = packed record
  EDX, EAX: Cardinal;
  x0, y0, z0:Single;
dwnum, dwid, dwpos:Integer;
end;
//包裹物品信息
PPackItem =^TPackItem;
TPackItem = record
id:cardinal;
num:cardinal;
end;
PItemFilter =^TItemFilter;
TItemFilter =record
id:cardinal;
name:string;
end;
//技能信息
PSkill=^TSkill;
TSkill = record
id:cardinal;
name:array[0..20] of widechar;
Lcsj:Cardinal;
end;
ATItemFilter=array of TItemFilter;
ATSkill = array of TSkill;
implementation

end.

下载文件 (已下载 229 次)

查找游戏的运行目录 不指定

青色咖啡 , 2008/07/31 17:14 , 完美世界 , 评论(0) , 阅读(632) , Via 本站原创
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls,StdCtrls,PsAPI,IniFiles;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetPath(hWnd:HWND):string;
var hProcessID, hProcess: THandle;
    hMod: HMODULE;
    Size: DWORD;
    Buf: array[0..255] of char;
begin
  GetWindowThreadProcessId(hWnd, @hProcessID);
  hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, hProcessID);
  EnumProcessModules(hProcess, @hMod, SizeOf(hMod), Size);
  GetModuleFileNameEx(hProcess, hMod, Buf, SizeOf(Buf));
  CloseHandle(hProcess);
  Result:= StrPas(Buf);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
filename:string;
inifile:TIniFile;
begin
Edit1.Text:=GetPath(findwindow(nil,'Element Client'));
filename:=ExtractFilePath(paramstr(0))+'F:\Game\《完美世界》国际版\element\userdata\'+'currentserver.ini';
inifile:=Tinifile.Create(filename);
Label1.Caption:=inifile.ReadString('Server','CurrentServer','');
inifile.Free;
end;

end.
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]