黃易群俠傳M脫機外掛應用程式黃易神行
2015
1

[發問] ㄜ...是我用的編寫程式與大家不同嗎?

jack800417 發表於 2011-1-4 14:36:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |
各位大大,小地爬了很多文章,發現為捨麼小弟血的方法好像與各位不一樣耶(小弟知道這是廢話!!)但是來小弟比對了一下
這是小弟用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種編寫程式不一樣嗎?
各位大大可以分析一下嗎?
收藏收藏 分享分享 讚 幹 分享分享 FB分享
回覆

使用道具 舉報


RAINTCK 當前離線
UID
1569638
熱心
259 值
嘉獎
0 次
違規
0 次
在線時間
321 小時
經驗
158 點
積分
4295
精華
0
最後登錄
2018-10-27
閱讀權限
50
註冊時間
2010-10-21
論壇幣
3504 幣
聯合幣
47 枚
幸運鑽
6 顆
招待卷
2000 點
查看詳細資料
Rank: 6Rank: 6
RAINTCK 2011-1-5 20:13:02
那是調用CALL是用組合語言來寫的
WalkCall是自定函數名!自己想用甚麼名就用甚麼名
Address1:pointer定義指針
Address1:=Pointer(W2I_Walk_Call1)指針指向W2I_Walk_Call1之前應該有定義CALL基址
這個是寫走路CALL
ASM就是調用組合語言開始
你用反組譯翻出來的都是這些 資料搬移MOV 推入堆疊PUSH 取出堆疊POP的
現在大部份語言都能調用
十幾年前還在分高階語言 中階語言 低階語言的,現在都能調用
目前來說應該還是最低階的程式語言吧(01碼應該沒人在用了)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊


手機版 | Archiver | 外掛聯合國

GMT+8, 2024-11-22 12:43 , Processed in 0.048075 second(s), 16 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?