各位大大,小地爬了很多文章,發現為捨麼小弟血的方法好像與各位不一樣耶(小弟知道這是廢話!!)但是來小弟比對了一下
這是小弟用Drlphi2010的一小段源碼
procedure TForm1.Button1Click(Sender: TObject);
VAR
視窗程序:HWND;
程序ID:DWORD;
遊戲:DWORD;
動態基址,人物基址,血量,最大血量,魔量,最大魔量:DWORD;
TT:DWORD;
ftt,怪物基址,tmp1,tmp2,MID,eax,MONHP,MONMHP,MONLV:DWORD;
begin
ReadProcessMemory(遊戲,pointer($A5BFB0+$1C),@動態基址,4,TT);
ReadProcessMemory(遊戲,pointer(動態基址+$20),@人物基址,4,TT);
ReadProcessMemory(遊戲,pointer(人物基址+$474),@血量,4,TT);
ReadProcessMemory(遊戲,pointer(人物基址+$4B4),@最大血量,4,TT);
ReadProcessMemory(遊戲,pointer(人物基址+$478),@魔量,4,TT);
ReadProcessMemory(遊戲,pointer(人物基址+$4B8),@最大魔量,4,TT);
Label1.Caption:='人物血量:'+IntToStr (血量)+'/'+IntToStr (最大血量);
Label2.Caption:='人物魔量:'+IntToStr (魔量)+'/'+IntToStr (最大魔量);
........
前頭都是以 ReadProcessMemory來做開頭指令動作,
而且
procedure TForm1.Button1Click(Sender: TObject);
這段可看出這是由Button1操作
恩..介紹玩小弟自己的後,來看看其他大大的
http://bbs.wgun.net/thread-400836-1-1.html
這是由MOULI33大大所發問的文章
procedure WalkCall(aPParams:PParams); Stdcall; //這個WalkCall的指令是捨麼?小弟看不太出來耶
var
Address1:pointer; //這邊是開始宣告嗎?但是delphi2010是用dword耶!?這是捨麼呢?
Address2:pointer;
Address3:pointer;
x,y,z:Single;
r_POSITION1:Integer;
begin//動作開始
Address1:=Pointer(W2I_Walk_Call1);//前面的Address是捨麼,這段是紀錄走路CALL1
Address2:=pointer(W2I_Walk_Call2);//這是記錄CALL2
Address3:=pointer(W2I_Walk_Call3);//這是記錄CALL3(是紀錄還是捨麼意思有真到嗎?)
x:=aPParams^.Param3;//標記x軸是aPParams^.Param3<---這是捨麼?
y:=aPParams^.Param4;
z:=aPParams^.Param5;
asm//這是捨麼?
pushad
//此問題重點來了,以上不知道還可以慢慢摸,以下不知道就完全卡住了
mov eax, dword ptr [W2I_BASE_ADDR]//這裡!為捨麼是用mov eax為開頭?這是捨麼編譯程式的寫法,這段應該是遊戲基址!?
mov eax, dword ptr [eax+$1C] //這裡是遊戲基址+1C
mov esi, dword ptr [eax+$20] //這裡動態基址+20
mov ecx, dword ptr [esi+$bd4] //Bcc+8=BD4 dd4 fec//BCC這是捨麼的偏移,+8又是捨麼的偏移
push 1
call Address1
mov edi, eax //這編寫程式很常出現mov eax耶!是否相當於delphi2010的ReadProcessMemory呢?
lea eax, dword ptr [esp+$18]
push eax
push 0 //r_POSITION1 //0地面 1空中 //這邊把call1當成Z軸??這邊好像還可以勾選是否在空中齁
mov ecx, edi
call Address2
mov ecx, dword ptr [esi+$bd4] //Bcc+8=BD4 dd4 fec
push 0
push 1
push edi
push 1
call Address3
mov eax, dword ptr [W2I_BASE_ADDR] //看下面又出現一堆mov eax了可能真的像我說的相當於delphi2010的ReadProcessMemory
mov eax, dword ptr [eax+$1C]//基址
mov eax, dword ptr [eax+$20]//動態基址
mov eax, dword ptr [eax+$dd4] //Bcc+8=BD4 dd4 fec//這是捨麼基址?
mov eax, dword ptr [eax+$30]//這個呢?+30便宜是捨ㄇ
mov ecx, dword ptr [eax+4]//這個呢+4偏移是捨麼
mov eax, x
mov dword ptr[ecx+$20], eax//所以X軸偏移是+20?
mov eax, z
mov dword ptr[ecx+$24], eax//z軸是+24?
mov eax, y
mov dword ptr[ecx+$28], eax//y軸是+28?
............................下面先省略
這樣看來,2種編寫程式不一樣嗎?
各位大大可以分析一下嗎? |