當前位置:首頁 » 編程軟體 » 扔火球編程

扔火球編程

發布時間: 2024-07-02 11:43:05

Ⅰ 魔獸世界怎麼製作宏

一:基礎教程

1.什麼是宏命令?
玩過EQ的都知道一點宏的知識,比如組隊時用來告訴隊友你的行動,告訴目標等。最簡單的比如puller 常用的: /v %t過來了,大家集中火力。 法師常用的: /v 我要催眠%t,大家不要打醒他 這些宏個性鮮明,是EQ的一大樂趣之一。

然而EQ畢竟是N年前的游戲,宏也比較簡單,和它比起來。WOW的宏就復雜和強大的多了。它的函數就有上千種,如果都掌握,能實現許多匪夷所思的功能。

一個宏可以完成一個相對比較復雜的命令.比如戰斗中發布命令,如果打字當然不算麻煩,但在戰斗中卻很要命.浪費了時間和生命.一個簡單的宏便可以用一個鍵來完成這一切.

2.宏命令的設置流程:
首先,回車,再敲/MACRO。看見了吧?會彈出一個窗口,上面有New(新建宏命令)和Complete(完成宏命令)兩個按鍵。點New,又會彈出一個窗口,哇,花花綠綠的,裡麵包括了WOW幾乎所有的技能圖標,隨你喜歡,隨便選一個!它就是你設置的宏命令的圖標了,給它取個名字吧!方便你用的時候好找。然後回到第一個窗口,在它上面有一個輸入菜單(別告訴我找不到…它可是佔了這個窗口的一半多…)在裡面輸入特定的內容,然後點Complete。接下來你要做的就是把這個代表你宏命令的圖標用滑鼠左鍵拉到快捷欄里,想怎麼用就怎麼用…

3.下面就是怎樣設置宏的內容了,簡單的設置大家可以看我們網站上"基礎"篇的宏介紹.

相信很多人都知道WOW中的斜杠"/"和表情命令.宏可以將這些命令按照自己對條件的設置串聯起來,比如:/Kneel是讓你跪下來的動作而/say就是最基礎的對話動作
我們現在用一個宏把他們串起來:

第一行內容:「/Kneel」
第二行內容:「/say 如果你不嫁給我,那麼我就一輩子不起來…」 」
這樣你的人物就會先下跪再說:"如果你不嫁給我,那麼我就一輩子不起來…"

宏可以應用所有WOW中已經定義了的斜杠"/"和表情命令,更要命的是,宏甚至可以應用人物的魔法和技能,

只需要在宏的定義過程中應用"/cast"命令,下面是已知的一些常用命令:

/Assist 這是個援助進攻的命令。當你的隊伍同時面對幾個敵人時,只要點擊自己的隊友(一般是隊伍中的戰士),然後使用這個命令,你的目標就會變成戰士所選中的目標。大家集中火力消滅一個起!

/Cast 這是個使用技能的命令。當你在宏命令里輸入/Cast 技能名(技能等級)或者只要按住Shift同時用滑鼠點擊一下你想要輸入的技能的圖標。例如當你是一個戰士,想製作一個使用戰斗怒吼的宏時,你可以輸入/Cast Battle Shout(Rank 1)或者是直接按住Shift點擊Battle Shout這個技能的圖標。當然你可以在一個宏的不同行上輸入幾個技能,那麼當你使用這個宏時,幾個技能就會一起釋放出來,再用不著你像章魚一樣同時按下幾個鍵了 。

%t 這個符號也許會經常出現在你的宏命令里,它是一個代碼,代表你當前所選中的人名。例如,你在宏里寫下這么一句。(注意:後面要加一空格。) 「/g %t ,今天天氣真好,有沒興趣和我一起上山采蘑菇…」
如果你點中一位名叫苯笨的玩家,那麼當你按下這個宏時,你就會說:「笨笨,今天天氣真好,有沒興趣和我一起上山采蘑菇…」

/Target 這是一個自動選擇目標的命令,你可以在宏里輸入/Target (xxx),那麼當你按下這個宏時,你將自動選定這個叫xxx的目標。

/in 這是一個延時命令,時間以秒為單位.同時它不支持攻擊指令.格式:/in 3 dance 三秒後跳舞,如/in 3 dance,就是在3秒後跳舞,
/say start!
/in 3 say 3s later
/in 6 say 6s later
二:進階教程

一些有用的 Macro

1。允許你在窗口和全屏狀態之間切換

/script SetCVar("gxWindow", 1 - GetCVar("gxWindow"));
/console gxRestart

2。對於法師,必須要有的:將「X」換為你目前的變形術等級(下同);用它替換掉變形術技能。當你在隊伍之外時使用它會得到「你不在隊伍中。」的信息,但在隊伍中的時候其它同伴會了解到你將釋放的變形術目標。

/p Sheeping >>> %t <<<
/cast Polymorph (Rank X)

3。作為一個術士,這是在隊伍中使用的宏:首先將目標轉為拖怪手或者坦克正在攻擊的目標,然後命令寵物向前攻擊,跟著一個虛弱詛咒。

/assist 隊伍中的拖怪手或者坦克的名字
/script PetAttack();
/cast Curse of Weakness (Rank X)

4。從背包和袋子里切換身上的武器

/script if ( not CursorHasItem() ) then PickupContainerItem(, );

PickupInventoryItem( ); end

bag# - 使用哪一個袋子的物品(0、1、2、3、4。0是背包)

slot# - 袋子里的位置(從0至左上)

equip# - 16 是主要武器, 17 是副武器

5。這個宏治療隊伍里你指定的人,如果你不在隊伍中它會治療你自己。然後會自動將目標切換回你最後一個敵人。它同時還會使用隊聊提醒隊友你會治療哪一個人。

/script if (UnitName("target") ~=nil and UnitIsFriend("player","target")) then

CastSpellByName("Heal(Rank X)") SendChatMessage("Incoming Heal to %T", "Party") else

TargetUnit("player") CastSpellByName("Heal(Rank X)") TargetLastEnemy(); end

6。加速任務顯示速度

/script QUEST_DEscriptION_GRADIENT_CPS = 600000
/script RegisterForSave("QUEST_DEscriptION_GRADIENT_CPS")
/script DEFAULT_CHAT_FRAME:AddMessage("quest text will scroll faster now");

7。消除等待接受任務的時間

/script AcceptQuest()

8。這個宏可以在路上自動護送玩家做任務。

/assist [player name]
/cast 法術(Rank X)
/target [player name]
/follow [player name]

9。切換主副武器,詳情看第四條

/script PickupInventoryItem(16); PickupInventoryItem(17);

10。在沒有目標或者目標是敵人的時候給自己加增益魔法或治療。

CastSpellByName("Spell Name(Rank X)");

if ((SpellIsTargeting()) and (not UnitIsFriend("player","target")))

then

SpellTargetUnit("player");

end;

TargetLastEnemy();

11。切換雙手武器與單手+盾或者雙手揮舞武器

/script PickupInventoryItem(17);if(CursorHasItem()) then PickupContainerItem

(4,2);PickupContainerItem(4,1);PickupInventoryItem(16);else PickupContainerItem

(4,1);PickupInventoryItem(16);PickupContainerItem(4,2);PickupInventoryItem(17);end

12。設定「真實滑鼠視野」

/script CameraOrSelectOrMoveStart(arg1);

想取消就再次輸入。

13。切換近程技能欄和遠程技能欄

/script CURRENT_ACTIONBAR_PAGE = 2;
/script ChangeActionBarPage();
/cast aspectofmon key (just use the left click)

/script CURRENT_ACTIONBAR_PAGE = 1;
/script ChangeActionBarPage();
/cast aspectofhawk (just use the left click)

14。牧師對隊友的一鍵加血,比如一號鍵給第一隊友加血,二號鍵給第二隊友加血,免除了還要滑鼠確

定目標的操作。依次類推,從第一個人到最後一個

給隊友1加血:
/script TargetUnit(GetPartyMember(1))
CastSpellByName(Heal(Rank X)) TargetLastEnemy()

給隊友2加血:
/script TargetUnit(GetPartyMember(2)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()

給隊友3加血:
/script TargetUnit(GetPartyMember(3)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()

15。一鍵解決喂養寵物:這個宏會從最左邊的袋子里的第一個位置拿出食物喂養寵物,如果所在的位置

沒有食物,它會自動打開袋子。

/script if (not PlayerFrame.inCombat) then if (not GetContainerItemLink(4, 1)) then

OpenBag(4); else CastSpellByName("Feed Pet"); PickupContainerItem(4, 1); end end

16。術士宏

1)如果目標生命大於20,釋放抽取生命法術,否則使用靈魂抽取。
/script if (UnitHealth("target")>20) then CastSpellByName("Drain Life(Rank X)") else

CastSpellByName("Drain Soul(Rank 2)") end;

2)虛弱詛咒版本
/script if (UnitMana("target")>0) then CastSpellByName("Curse of Tongues(Rank X)") else

CastSpellByName("Curse of Weakness(Rank X)") end;

17.先治療自己,然後自動選中上次的敵人
/target Pugar //選擇自己,假設自己的名字是Pugar
/cast Lesser Heal (Rank 1) //施展次級治療rank1
/script TargetLastEnemy(); //重新選擇剛剛選擇的敵人
/script AttackTarget(); //攻擊,等同於右鍵點擊敵人

18.對於一個術士很有用的宏:首先將目標轉為拖怪手或者坦克正在攻擊的目標,然後命令寵物向前攻擊

,跟著一個虛弱詛咒。
/assist 隊伍中的拖怪手或者坦克的名字
/script PetAttack();
/cast Curse of Weakness (Rank X)

19.等治療完之後提醒別人注意下自己有可能被怪打,不加延時的話,就沒這個效果了。
/p healing %T, need 3s, don"t run away
/cast heal (rank 1)
/in 4 p cured %T 300HP,please notice the enemies turn on me^_^

20.在路上自動護送朋友做任務。

/assist [player name]
/cast 法術(Rank X)
/target [player name]
/follow [player name]
三:高級教程

WOW的宏函數庫可以去這兩個地方查:

http://www.cosmosui.org/texts/BlizzardCommands.xml

http://www.wowwiki.com/index.php/World_of_Warcraft_API

函數的使用比較簡單,學習過編程的都比較容易上手,基本的用法是在函數前加/script 來使用。比如
/script CURRENT_ACTIONBAR_PAGE = X;
/script ChangeActionBarPage();
就是將你的快捷欄翻到第X頁。

函數庫中有許多函數都是非常有用和方便的,比如一次打開所有包包:

/script OpenAllBags();

配合關閉包包的函數,一次關閉所有包的宏也可以實現:

/script CloseBag(0);
/script CloseBag(1);
/script CloseBag(2);
/script CloseBag(3);
/script CloseBag(4);

怎麼樣,下次你賣東西的時候不會一個個開包關包了吧?

使用函數還不是最恐怖的,恐怖的是WOW的宏是可以用條件判斷的,看下面這兩個:
/script if ( GetComboPoints() >= 3 ) then CastSpellByName("Rip(Rank 2)"); else if (

UnitMana("player") >= 40 ) then CastSpellByName("Rake(Rank 1)"); end end

據說這個包含if,then的宏可以讓盜賊實現自動根據combo點數來使用技能(未測試),其中還使用了角

色MANA值的調用,恐怖吧?還有這個查找spell的宏:
function GetSpellIdByItsName(myWantedSpell, myWantedRank)
local spellId = 1;
local spellBook = "spell";
local spellName, rankName;
spellName, rankName = GetSpellName(spellId, spellBook);
while (spellName ) do
if ( ( spellName == myWantedSpell ) and ( ( not myWantedRank ) or ( rankName = myWantedRank

) ) ) then return spellId; end
spellName, rankName = GetSpellName(spellId, spellBook);
end
return -1;
end

裡面可以自己定義function,還使用了while,do這樣的循環,是不是讓你想到了N種應用的可能呢?

遺憾的是,目前官方似乎沒有提供延時的宏,所以在戰斗中使用多種有延時的技能是無法實現的(無延時的技能可以實現同時使用),類似換其他武器-使用技能或法術-換回武器這樣的功能也無法實現,

(所謂用宏實現劍盾戰士換雙手武器MS再換回來是行不通的),不過使用COSMOS的朋友可以用/in 來實現非戰斗指令的延時,比如
/in 3 say hi 就會在3秒後說句hi。

/in 6 /script MoveForwardStart(arg1);
就會在6秒後向前跑。

雖然法術和技能無法用/in指令來延時,但這樣已經很強大了,比如,你可以編出各種運動的宏,如兜後,轉身等。PVP時估計是必不可少的。

下面是一個玩家寫的雙手武器戰士自動逃跑的宏:
/script UseContainerItem(0, 2);ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown

(12);ActionButtonUp(12);
/cast Thunder Clap(Rank 1);
/script TurnLeftStart(arg1);
/in 1 /script TurnLeftStop(arg1);ToggleAutoRun();

使用這個宏的條件:在大包包第二格放了回復葯,快捷欄第11,12分別是一單手一盾的快捷方式。

使用這個宏後,角色自動喝回復葯,裝備上盾,使用Thunder Clap(這三個動作同時進行),向後轉180度後開自動跑步鍵逃走。其中技能等可以根據需要自己改。怎麼樣,是不是很誇張啊,哈哈。

還有一些有用的宏:

切換裝備,

雙手切換單手並換第二個快捷欄,快捷欄第11,12分別是一單手一盾的快捷方式
/script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12);
/script CURRENT_ACTIONBAR_PAGE = 2;
/script ChangeActionBarPage();
單手切換雙手並換回第一快捷欄,快捷欄12是一雙手武器快捷方式
/script ActionButtonDown(12);ActionButtonUp(12);
/script CURRENT_ACTIONBAR_PAGE = 1;
/script ChangeActionBarPage();

幾個簡單的宏

1. 對自己使用綳帶

/script TargetUnit("Player");
/use Mageweave Bandage
/script TargetLastEnemy();

* 這里用的時 Mageweave Bandage ,你可以改成適合你自己的綳帶名
* use 是 Cosmos 支持的命令,你必須安裝 Cosmos 才能使用這個宏,如果你沒有 Cosmos,使用下面的宏(綳帶必須放在主背包第一格)

/script TargetUnit("Player");
/script UseContainerItem(0,1);
/script TargetLastEnemy();

2. 對敵人的 Pet 使用技能
/script TargetUnitsPet("target");
/cast Blind
/script TargetLastEnemy();

* Blind 是技能名,你可以用自己的技能,這里用了盜賊的 Blind (我是盜賊啦,呵呵)

** /script 是使用 腳本 的命令,可供使用的命令參考附件
** 可以用 Shift + 點擊 技能書里圖標的方式在宏中添加釋放技能的命令
** 可以用 Shift + 點擊 物品的方式在宏中添加物品名
3. 打開所有背包

/script OpenBag(0);
/script OpenBag(1);
/script OpenBag(2);
/script OpenBag(3);
/script OpenBag(4);

打開所有背包,可能
/script OpenAllBags()
一樣搞定:P

熱鍵Shift + B 也是可以的

4.戰士用,雙手武器切換單手武器+盾:
首先在快捷欄10、11、12(也就是0、 -、 =的位置)拖上雙手武器、單手武器、盾的快捷方式;
雙手武器:
/script ActionButtonDown(10);ActionButtonUp(10);
單手武器+盾:
/script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12);

以下命令全部中空格用下劃線_來表示
%後面的都是變數

=各種命令分類收集=

參數設置
%t

切換當前目標命令
/target_%name
/assist_%name
/script_TargetLastEnemy();

游戲動作
/cast_%skillname(rank_%d)
/f
/script_UseAction(n%d, %d);

設置延遲命令
/pause_%d

聊天常用命令
/s_
/p_
/g_
/raid_

=應用部分說明=
聊天部分命令我就省略了...重點說明游戲中實際關繫到游戲操作的命令

首先%t是指當前目標名稱,%t大多是用在聊天中...比如:

...

你好,%t
我開始攻擊%t,大家請注意...

Pull
/script TargetNearestEnemy();
/p Pulling %t
/script AttackTarget();
/v inc

Assist
/assist %t
/script AttackTarget();

UsePoison
/script UseContainerItem(bag,slot); PickupInventoryItem(16);
UseContainerItem(bag,slot);
PickupInventoryItem(17);
/in 1740 /script DEFAULT_CHAT_FRAME:AddMessage("Poison wearing off in one minute

Ⅱ 網路游戲數據編程修改

SELECT GAME選擇目前在記憶體中您想攔截的程式,您只需雙擊該程式名稱即可。

TRACE追蹤功能。用來追蹤擷取程式送收的封包。WPE必須先完成點選欲追蹤的程式名稱,才可以使用此項目。 按下Play鍵開始擷取程式收送的封包。您可以隨時按下 | | 暫停追蹤,想繼續時請再按下 | | 。按下正方形可以停止擷取封包並且顯示所有已擷取封包內容。若您沒按下正方形停止鍵,追蹤的動作將依照OPTION里的設定值自動停止。如果您沒有擷取到資料,試試將OPTION里調整為Winsock Version 2。WPE 及 Trainers 是設定在顯示至少16 bits 顏色下才可執行。

FILTER過濾功能。用來分析所擷取到的封包,並且予以修改。

SEND PACKET送出封包功能。能夠讓您送出假造的封包。

TRAINER MAKER製作修改器。

OPTIONS設定功能。讓您調整WPE的一些設定值。

FILTER的詳細教學

- 當FILTER在啟動狀態時 ,ON的按鈕會呈現紅色。- 當您啟動FILTER時,您隨時可以關閉這個視窗。FILTER將會保留在原來的狀態,直到您再按一次 on / off 鈕。- 只有FILTER啟用鈕在OFF的狀態下,才可以勾選Filter前的方框來編輯修改。- 當您想編輯某個Filter,只要雙擊該Filter的名字即可。

NORMAL MODE:

範例:

當您在 Street Fighter Online ﹝快打旋風線上版﹞游戲中,您使用了兩次火球而且擊中了對方,這時您會擷取到以下的封包:SEND-> 0000 08 14 21 06 01 04 SEND-> 0000 02 09 87 00 67 FF A4 AA 11 22 00 00 00 00 SEND-> 0000 03 84 11 09 11 09 SEND-> 0000 0A 09 C1 10 00 00 FF 52 44 SEND-> 0000 0A 09 C1 10 00 00 66 52 44

您的第一個火球讓對方減了16滴﹝16 = 10h﹞的生命值,而您觀察到第4跟第5個封包的位置4有10h的值出現,應該就是這里了。

您觀察10h前的0A 09 C1在兩個封包中都沒改變,可見得這3個數值是發出火球的關鍵。

因此您將0A 09 C1 10填在搜尋列﹝SEARCH﹞,然後在修改列﹝MODIFY﹞的位置4填上FF。如此一來,當您再度發出火球時,FF會取代之前的10,也就是攻擊力為255的火球了!

ADVANCED MODE:

範例: 當您在一個游戲中,您不想要用真實姓名,您想用修改過的假名傳送給對方。在您使用TRACE後,您會發現有些封包裡面有您的名字出現。假設您的名字是Shadow,換算成16進位則是﹝53 68 61 64 6F 77﹞;而您打算用moon﹝6D 6F 6F 6E 20 20﹞來取代他。1) SEND-> 0000 08 14 21 06 01 042) SEND-> 0000 01 06 99 53 68 61 64 6F 77 00 01 05 3) SEND-> 0000 03 84 11 09 11 094) SEND-> 0000 0A 09 C1 10 00 53 68 61 64 6F 77 00 11 5) SEND-> 0000 0A 09 C1 10 00 00 66 52 44

但是您仔細看,您的名字在每個封包中並不是出現在相同的位置上

- 在第2個封包里,名字是出現在第4個位置上- 在第4個封包里,名字是出現在第6個位置上

在這種情況下,您就需要使用ADVANCED MODE- 您在搜尋列﹝SEARCH﹞填上:53 68 61 64 6F 77 ﹝請務必從位置1開始填﹞- 您想要從原來名字Shadow的第一個字母開始置換新名字,因此您要選擇從數值被發現的位置開始替代連續數值﹝from the position of the chain found﹞。- 現在,在修改列﹝MODIFY﹞000的位置填上:6D 6F 6F 6E 20 20 ﹝此為相對應位置,也就是從原來搜尋欄的+001位置開始遞換﹞- 如果您想從封包的第一個位置就修改數值,請選擇﹝from the beginning of the packet﹞

了解一點TCP/IP協議常識的人都知道,互聯網是將信息數據打包之後再傳送出去的。每個數據包分為頭部信息和數據信息兩部分。頭部信息包括數據包的發送地址和到達地址等。數據信息包括我們在游戲中相關操作的各項信息。那麼在做截獲封包的過程之前我們先要知道游戲伺服器的IP地址和埠號等各種信息,實際上最簡單的是看看我們游戲目錄下,是否有一個SERVER.INI的配置文件,這個文件里你可以查看到個游戲伺服器的IP地址,比如金庸群俠傳就是如此,那麼除了這個我們還可以在DOS下使用NETSTAT這個命令,

NETSTAT命令的功能是顯示網路連接、路由表和網路介面信息,可以讓用戶得知目前都有哪些網路連接正在運作。或者你可以使用木馬客星等工具來查看網路連接。工具是很多的,看你喜歡用哪一種了。

NETSTAT命令的一般格式為:NETSTAT [選項]

命令中各選項的含義如下:-a 顯示所有socket,包括正在監聽的。-c 每隔1秒就重新顯示一遍,直到用戶中斷它。-i 顯示所有網路介面的信息。-n 以網路IP地址代替名稱,顯示出網路連接情形。-r 顯示核心路由表,格式同"route -e"。-t 顯示TCP協議的連接情況。-u 顯示UDP協議的連接情況。-v 顯示正在進行的工作。

--------------------------------------------------------------------------------
三:怎麼來分析我們截獲的封包?
首先我們將WPE截獲的封包保存為文本文件,然後打開它,這時會看到如下的數據(這里我們以金庸群俠傳里PK店小二客戶端發送的數據為例來講解):

第一個文件:SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1BSEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9BSEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1ASEND-> 0000 E6 56 1B C0 68 12 12 12 5ASEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12SEND-> 0000 E6 56 17 C9 12

第二個文件:SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7ESEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6DSEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3SEND-> 0000 83 33 7E A5 21 77 77 77 3FSEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77SEND-> 0000 83 33 72 AC 77

我們發現兩次PK店小二的數據格式一樣,但是內容卻不相同,我們是PK的同一個NPC,為什麼會不同呢? 原來金庸群俠傳的封包是經過了加密運算才在網路上傳輸的,那麼我們面臨的問題就是如何將密文解密成明文再分析了。

因為一般的數據包加密都是異或運算,所以這里先講一下什麼是異或。 簡單的說,異或就是"相同為0,不同為1"(這是針對二進制按位來講的),舉個例子,0001和0010異或,我們按位對比,得到異或結果是0011,計算的方法是:0001的第4位為0,0010的第4位為0,它們相同,則異或結果的第4位按照"相同為0,不同為1"的原則得到0,0001的第3位為0,0010的第3位為0,則異或結果的第3位得到0,0001的第2位為0,0010的第2位為1,則異或結果的第2位得到1,0001的第1位為1,0010的第1位為0,則異或結果的第1位得到1,組合起來就是0011。異或運算今後會遇到很多,大家可以先熟悉熟悉,熟練了對分析很有幫助的。

下面我們繼續看看上面的兩個文件,按照常理,數據包的數據不會全部都有值的,游戲開發時會預留一些位元組空間來便於日後的擴充,也就是說數據包里會存在一些"00"的位元組,觀察上面的文件,我們會發現文件一里很多"12",文件二里很多"77",那麼這是不是代表我們說的"00"呢?推理到這里,我們就開始行動吧!

我們把文件一與"12"異或,文件二與"77"異或,當然用手算很費事,我們使用"M2M 1.0 加密封包分析工具"來計算就方便多了。得到下面的結果:

第一個文件:1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 892 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 083 SEND-> 0000 F4 44 09 D2 7A 00 00 00 484 SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 005 SEND-> 0000 F4 44 05 DB 00

第二個文件:1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 843 SEND-> 0000 F4 44 09 D2 56 00 00 00 484 SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 005 SEND-> 0000 F4 44 05 DB 00

哈,這一下兩個文件大部分都一樣啦,說明我們的推理是正確的,上面就是我們需要的明文!

接下來就是搞清楚一些關鍵的位元組所代表的含義,這就需要截獲大量的數據來分析。

首先我們會發現每個數據包都是"F4 44"開頭,第3個位元組是變化的,但是變化很有規律。我們來看看各個包的長度,發現什麼沒有?對了,第3個位元組就是包的長度! 通過截獲大量的數據包,我們判斷第4個位元組代表指令,也就是說客戶端告訴伺服器進行的是什麼操作。例如向伺服器請求戰斗指令為"30",戰斗中移動指令為"D4"等。 接下來,我們就需要分析一下上面第一個包"F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89",在這個包里包含什麼信息呢?應該有通知伺服器你PK的哪個NPC吧,我們就先來找找這個店小二的代碼在什麼地方。 我們再PK一個小嘍羅(就是大理客棧外的那個咯):SEND-> 0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0 我們根據常理分析,游戲里的NPC種類雖然不會超過65535(FFFF),但開發時不會把自己限制在字的范圍,那樣不利於游戲的擴充,所以我們在雙字里看看。通過"店小二"和"小嘍羅"兩個包的對比,我們把目標放在"6C 79 F6 05"和"CF 26 00 00"上。(對比一下很容易的,但你不能太遲鈍咯,呵呵)我們再看看後面的包,在後面的包里應該還會出現NPC的代碼,比如移動的包,游戲允許觀戰,伺服器必然需要知道NPC的移動坐標,再廣播給觀戰的其他玩家。在後面第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我們又看到了"6C 79 F6 05",初步斷定店小二的代碼就是它了!(這分析里邊包含了很多工作的,大家可以用WPE截下數據來自己分析分析)

第一個包的分析暫時就到這里(裡面還有的信息我們暫時不需要完全清楚了)

我們看看第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00",再截獲PK黃狗的包,(狗會出來2隻哦)看看包的格式:SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00

根據上面的分析,黃狗的代碼為"4B 7D F6 05"(100040011),不過兩只黃狗伺服器怎樣分辨呢?看看"EB 03 F8 05"(100140011),是上一個代碼加上100000,呵呵,這樣伺服器就可以認出兩只黃狗了。我們再通過野外遇敵截獲的數據包來證實,果然如此。

那麼,這個包的格式應該比較清楚了:第3個位元組為包的長度,"DA"為指令,第5個位元組為NPC個數,從第7個位元組開始的10個位元組代表一個NPC的信息,多一個NPC就多10個位元組來表示。

大家如果玩過網金,必然知道隨機遇敵有時會出現增援,我們就利用游戲這個增援來讓每次戰斗都會出現增援的NPC吧。

通過在戰斗中出現增援截獲的數據包,我們會發現伺服器端發送了這樣一個包:F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8個位元組為增援NPC的代碼(這里我們就簡單的以黃狗的代碼來舉例)。 那麼,我們就利用單機代理技術來同時欺騙客戶端和伺服器吧!

好了,呼叫NPC的工作到這里算是完成了一小半,接下來的事情,怎樣修改封包和發送封包,我們下節繼續講解吧。

--------------------------------------------------------------------------------
四:怎麼冒充"客戶端"向"伺服器"發我們需要的封包?
這里我們需要使用一個工具,它位於客戶端和伺服器端之間,它的工作就是進行數據包的接收和轉發,這個工具我們稱為代理。如果代理的工作單純就是接收和轉發的話,這就毫無意義了,但是請注意:所有的數據包都要通過它來傳輸,這里的意義就重大了。我們可以分析接收到的數據包,或者直接轉發,或者修改後轉發,或者壓住不轉發,甚至偽造我們需要的封包來發送。

下面我們繼續講怎樣來同時欺騙伺服器和客戶端,也就是修改封包和偽造封包。 通過我們上節的分析,我們已經知道了打多個NPC的封包格式,那麼我們就動手吧!

首先我們要查找客戶端發送的包,找到戰斗的特徵,就是請求戰斗的第1個包,我們找"F4 44 1F 30"這個特徵,這是不會改變的,當然是要解密後來查找哦。 找到後,表示客戶端在向伺服器請求戰斗,我們不動這個包,轉發。 繼續向下查找,這時需要查找的特徵碼不太好辦,我們先查找"DA",這是客戶端發送NPC信息的數據包的指令,那麼可能其他包也有"DA",沒關系,我們看前3個位元組有沒有"F4 44"就行了。找到後,我們的工作就開始了!

我們確定要打的NPC數量。這個數量不能很大,原因在於網金的封包長度用一個位元組表示,那麼一個包可以有255個位元組,我們上面分析過,增加一個NPC要增加10個位元組,所以大家算算就知道,打20個NPC比較合適。

然後我們要把客戶端原來的NPC代碼分析計算出來,因為增加的NPC代碼要加上100000哦。再把我們增加的NPC代碼計算出來,並且組合成新的封包,注意代表包長度的位元組要修改啊,然後轉發到伺服器,這一步在編寫程序的時候要注意演算法,不要造成較大延遲。

上面我們欺騙伺服器端完成了,欺騙客戶端就簡單了,^-^

發送了上面的封包後,我們根據新增NPC代碼構造封包馬上發給客戶端,格式就是"F4 44 12 E9 NPC代碼 02 00 00 03 00 00 00 00 00 00",把每個新增的NPC都構造這樣一個包,按順序連在一起發送給客戶端,客戶端也就被我們騙過了,很簡單吧。

以後戰斗中其他的事我們就不管了,盡情地開打吧,呵呵。 本欄文章均來自於互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用於商業或者其他目的。( ProgramFan.Com )

熱點內容
安卓手機哪個功能可以錄音 發布:2024-07-04 23:04:35 瀏覽:980
老款安卓線和新款有什麼區別 發布:2024-07-04 22:27:27 瀏覽:642
水密碼噴霧有什麼作用 發布:2024-07-04 22:04:10 瀏覽:707
車載導航android 發布:2024-07-04 21:47:53 瀏覽:305
buttonandroid圓角邊框 發布:2024-07-04 21:46:23 瀏覽:957
東軟學編程 發布:2024-07-04 21:44:08 瀏覽:610
怎麼查看編譯錯誤 發布:2024-07-04 21:39:05 瀏覽:646
c語言數組的賦值 發布:2024-07-04 21:23:47 瀏覽:562
d資料庫英文 發布:2024-07-04 21:23:10 瀏覽:374
linux腳本中的 發布:2024-07-04 21:14:42 瀏覽:566