日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

我为什么做外挂

發(fā)布時(shí)間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我为什么做外挂 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我只有兩天,一天用來(lái)聽許巍,一天用來(lái)干別的。
今年沒去outing,也很少給自己放假,積到年末就剩下了很多。這兩天給自己放羊,計(jì)劃 寫點(diǎn)技術(shù)文章。起床后打開電腦,順手放些音樂(lè),是許巍的《每一刻都是嶄新的》,不料上了癮,又把《在別處》、《那一年》以及05年的北京演唱會(huì)折騰來(lái),就 這么聽了一整天。許巍的音樂(lè),什么歌都一個(gè)調(diào)調(diào),可它就有一種力量能讓人沉迷進(jìn)去,然后什么也干不了。今天起來(lái)學(xué)了乖,許巍還是想聽的,為了不至于沉迷進(jìn) 去,我找了另外一首歌換著聽,也是我很喜歡的,很絕,特頹廢,叫《Suicide is Painless》。
瘋狂的玩著Diablo II的時(shí)候,我一個(gè)人在北京忙著拿學(xué)位。本來(lái)打算好畢業(yè)后就離開北京,離開這個(gè)我已經(jīng)呆了8年的城市,一個(gè)偶然的原因讓我又留了下來(lái),多待了半年。那半年 陪著我的除了工作加班,就只有《時(shí)光.漫步》和逆向工程做Maphack。從小學(xué)玩街機(jī)開始,我玩過(guò)很多游戲,用過(guò)的游戲作弊軟件數(shù)不清,但我從來(lái)沒想到 有一天我會(huì)自己做外掛。Diablo是我非常喜歡的一款游戲,從第一代開始,Diablo、HellFire、Diablo II、 Diablo II LOD(毀滅之王)都玩過(guò),但上Closed server是很后來(lái)的事,已是09的后期。經(jīng)歷過(guò)09時(shí)代的暗黑玩家都知道,那時(shí)Maphack是標(biāo)準(zhǔn)配備,差不多人人都用,很多私服甚至把它做為唯一 允許使用的外掛。我自然也用,從最初的單純使用,后來(lái)學(xué)會(huì)自己改配置文件,再后來(lái)開始看一些源代碼。
萬(wàn)眾期待的1.10補(bǔ)丁發(fā)布以后,我和很多玩家一樣等著新的Maphack出來(lái)。由于在此之前Maphack的作者鼠標(biāo)墊(MousePad)在1.10 補(bǔ)丁beta 2發(fā)布后第一時(shí)間就推出了相應(yīng)的Maphack版本(即Maphack 5.1s),大家都認(rèn)為針對(duì)1.10正式版的Maphack也會(huì)很快。不料等了一周沒任何動(dòng)靜。這時(shí)候有人(jhj)做了個(gè)只能開地圖的簡(jiǎn)易版 maphack。又過(guò)了一周還是沒動(dòng)靜,我有點(diǎn)兒等得不耐煩,在一天上班的路上,我琢磨著這個(gè)事,突然有了想法,想自己也做一個(gè)。我自然不想做簡(jiǎn)易版,這 個(gè)已經(jīng)有人做過(guò)了,再做沒意思。鼠標(biāo)墊老兄倒是公布過(guò)一份maphack的早期版本的源代碼(maphack 4.6),不過(guò)相對(duì)于最新版本來(lái)說(shuō)功能太少,在此基礎(chǔ)上再實(shí)現(xiàn)新功能工作量還是挺大的,而我只想做個(gè)臨時(shí)版。想來(lái)想去,覺得比較簡(jiǎn)單的做法是在最新的 Maphack程序上改出一個(gè)能給1.10用的版本。這么做有幾個(gè)問(wèn)題要想清楚,一個(gè)主要的困難在于數(shù)據(jù)結(jié)構(gòu)可能改變。比如,在1.10中小場(chǎng)景的數(shù)據(jù)表 示如下:
struct?DrlgLevel?{
????DrlgMisc?
*pDrlgMisc;?//+00
????DWORD?nLevelNo;?//+04
????DWORD?_1[3];
????D2Seed?seed;?
//+14
????DWORD?_2[5];
????DrlgRoom2?
*pRoom2First;?//+30
????DWORD?_3[126];
????DrlgLevel?
*pLevelNext;?//+22c
};
在1.11中變成這樣:
struct?DrlgLevel?{?//sizeof(DrlgLevel)?=?0x230
????DWORD?_1[5];
????DWORD?nLevelNo;?
//+14
????DWORD?_1a[120];
????D2Seed?seed;?
//+1f8
????DWORD?_2[1];
????DrlgRoom2?
*pRoom2First;?//+204
????DrlgMisc?*pDrlgMisc;?//+208
????DWORD?_3[8];
????DrlgLevel?
*pLevelNext;?//+22c
};
如 你所見,數(shù)據(jù)還是那些數(shù)據(jù),但是相對(duì)位置變了。在有maphack源代碼的情況下,這是一個(gè)簡(jiǎn)單的問(wèn)題,只要在頭文件中重新定義一下DrlgLevel結(jié) 構(gòu)再編譯一下就行了。問(wèn)題是我沒有源代碼,只能在現(xiàn)有maphack程序上改,只要maphack用到的游戲內(nèi)部數(shù)據(jù)結(jié)構(gòu)中的一個(gè)改了,這個(gè)想法就完蛋。 但是仔細(xì)想了一下,我覺得這點(diǎn)不會(huì)有問(wèn)題,因?yàn)樽钚碌腗aphack是for 1.10 beta 2的,beta 2是正式版發(fā)布之前的最后一個(gè)beta版,一般來(lái)說(shuō)軟件開發(fā)在beta階段主要任務(wù)是改bug,程序框架和主要的數(shù)據(jù)結(jié)構(gòu)不應(yīng)該有什么變化,最后的 beta版改動(dòng)就更小了。另外一個(gè)問(wèn)題當(dāng)然是必須找出maphack所有的patch點(diǎn)和引用的內(nèi)部函數(shù)在1.10中的相應(yīng)地址,這些共有100多個(gè),數(shù) 量看起來(lái)是挺嚇人,不過(guò)不存在技術(shù)問(wèn)題。一個(gè)有利的條件是通過(guò)研究maphack 4.6的源代碼和反匯編maphack 5.1s程序,我知道這些patch點(diǎn)和引用的內(nèi)部函數(shù)地址在內(nèi)存中的位置是連續(xù)的,這大大有利于二進(jìn)制級(jí)別的修正。總之經(jīng)過(guò)一番分析,我覺得在最新程序 的基礎(chǔ)上改應(yīng)該是可行的。事實(shí)證明我的想法也沒有錯(cuò),除了有一點(diǎn)不至于導(dǎo)致程序崩潰的數(shù)據(jù)結(jié)構(gòu)有所改變外,其他的基本沒什么問(wèn)題。大約花了一周時(shí)間,我把 100多個(gè)地址找齊了,做出第一個(gè)版本。又做了一些測(cè)試、改bug,把它穩(wěn)定了下來(lái)。
剛開始的時(shí)候我的想法很簡(jiǎn)單,只是想在真正的Maphack 發(fā)布之前給大家一個(gè)可用的東西,不至于摸黑。我也把它當(dāng)成一個(gè)玩具,順便玩玩逆向工程,并不打算得到什么回報(bào),因此我只把它放到了我當(dāng)時(shí)所在私服的BBS (ZIXIA)上。但是什么東西一到網(wǎng)絡(luò)上,事情就不歸你控制,于是很快就有人把它放到公眾網(wǎng)上,再過(guò)不久又被老外發(fā)現(xiàn),又到了國(guó)外網(wǎng)站。老外很熱心,甚 至給它建了個(gè)技術(shù)支持網(wǎng)站。老外一知道,不可避免地原作者也會(huì)知道,終于在Maphack的支持論壇上引起了軒然大波。很多老鼠墊(MousePad)的 粉絲們破口大罵,說(shuō)這是ripoff,是trojan,還有的說(shuō)我沒有給鼠標(biāo)墊credit。鼠標(biāo)墊本人也很不滿,主要理由是這個(gè)東西已經(jīng)被我改過(guò),不能 算他的作品(出什么問(wèn)題不該歸他負(fù)責(zé)),應(yīng)該換個(gè)名字,至少maphack加載時(shí)顯示的這句話應(yīng)該改掉:
<Maphack>:?Mousepad's?Diablo?II?Maphack?v1.10?(v5.1s)?installed.
不過(guò)從事后來(lái)看,鼠標(biāo)墊對(duì)此不滿還有另外一個(gè)原因:他其實(shí)早就把新版本升級(jí)好了,遲遲不發(fā)布是打算拿Maphack賣錢,那當(dāng)時(shí)正忙于做防盜版功能。我這 么半道一橫杠子插進(jìn)來(lái),正好擋了人家的財(cái)?shù)?#xff01;其實(shí)直到現(xiàn)在我對(duì)鼠標(biāo)墊本人還是挺尊重的,這位老兄在D2 hacking上做了很多原創(chuàng)性貢獻(xiàn),逆向工程的本領(lǐng)沒的說(shuō),C程序也是寫的無(wú)比精巧,絕對(duì)是世界一流的黑客。要是事先知道他打算賣錢,我是肯定不會(huì)弄出 這么個(gè)東西的。
名字的問(wèn)題其實(shí)我在發(fā)布前也有考慮。首先,正因?yàn)槲易鹬厥髽?biāo)墊老兄,所以從一開始我就打算給他credit,否則早就把名字改了。再者,我做的工作也就是 修正一下內(nèi)存地址(雖然比較多),絕大部分的代碼還是他的,我當(dāng)然不認(rèn)為這是我的軟件。最后,我只是想做一個(gè)臨時(shí)的替代品,也沒想搞出多大動(dòng)靜,因此起什 么名字本來(lái)就是無(wú)所謂的。不過(guò)事后看起來(lái),比較合適的做法還是應(yīng)該改改那句話,成這樣:
<Maphack>:?Mousepad's?Diablo?II?Maphack?v1.10?(v5.1s)?sting?edited?version?installed.
不管怎樣,這個(gè)事的結(jié)果是我落了個(gè)吃力不討好。最不爽的是那幫粉絲整天在那兒ripoff ripoff的罵,把我惹得火大,你們不是說(shuō)我ripoff嗎,那我要配得上這個(gè)稱號(hào),我得給它整個(gè)名副其實(shí)的ripoff,我要把Maphack 5.1s整個(gè)程序reverse過(guò)來(lái),反匯編成C,在此基礎(chǔ)上再加一些功能,做一個(gè)和maphack競(jìng)爭(zhēng)的軟件。
完全反匯編一個(gè)程序到C是一件很瘋狂的事情,一般情況下很難做到,我以前也從來(lái)沒做過(guò),不要說(shuō)做,連想都沒想過(guò)。不過(guò)火大歸火大,做事情還是要理性的,這 事兒到底可不可行,能不能干,得好好分析分析。玩逆向工程,我覺得最重要的一點(diǎn)是大局觀一定要好,也就是說(shuō)你有一個(gè)想法,到底可不可行,在技術(shù)上要能把握 住,事先就得想清楚。因?yàn)槟嫦蚬?程隨便一個(gè)程序,面對(duì)的匯編代碼往往都是上百萬(wàn)數(shù)量級(jí)的,就像大海撈針,如果沒事先想清楚,很容易一個(gè)猛子扎進(jìn)去結(jié)果什么都沒撈著,打擊是很大的。比較而 言正向程序設(shè)計(jì)上就要容易的多,要實(shí)現(xiàn)一個(gè)想法,你可以google別人的做法,你有很多基礎(chǔ)庫(kù)可以利用,你技術(shù)能力弱,寫的代碼也就是丑陋點(diǎn)兒,效率低 點(diǎn)兒,不至于做不出來(lái)。
在這個(gè)問(wèn)題上,我覺得我有兩個(gè)有利條件。一是有maphack 4.6的源代碼,雖然最新版本在功能上增加了很多,但基本框架是沒變的。另一個(gè)有利條件是鼠標(biāo)墊是C語(yǔ)言高手,代碼很精練,一句廢話都沒有,對(duì)于性能來(lái)說(shuō) 這雖然很好,但是從逆向工程的角度看反而是缺點(diǎn)。最后,我花了兩周時(shí)間把它反匯編出來(lái),又發(fā)出4個(gè)beta版本改bug。
這就是d2hackmap的由來(lái)。我之所以把它命名為hackmap,主要有幾層含義,一是名字和maphack很像,大家一看就知道是什么東西。事實(shí)上 不但名字像,功能上也完全兼容原來(lái)的程序。這是我的一大設(shè)計(jì)目標(biāo),用過(guò)maphack的人都知道它的配置文件是很復(fù)雜的,如果我另外搞一套,肯定會(huì)有非常 多的技術(shù)支持問(wèn)題,會(huì)把我累死。而maphack的使用大家都早已熟悉,網(wǎng)上有很多論壇在討論它的使用,兼容maphack無(wú)疑能把我的技術(shù)支持工作量降 到最小(即使是這樣我還是收到了大量的郵件)。第二層含義是hackmap = hack maphack,也就是說(shuō)hackmap是我hack了maphack得來(lái)的。第三層含義是惡搞鼠標(biāo)墊一把,故意拿他開涮。
我玩D2最起勁的時(shí)候還是在09時(shí)期,1.10時(shí)期雖然也玩,但是已經(jīng)很少了,1.11基本不玩。本來(lái)都沒打算做1.11的hackmap,因?yàn)槟菚r(shí)候我 已經(jīng)知道warden不好對(duì)付,搞不好別人用了被BAN我又是吃力不討好,所以剛開始只做了一個(gè)相對(duì)安全點(diǎn)兒的只能開地圖的版本,沒花多少功夫。后來(lái)看到 很多人還是強(qiáng)烈希望想有一個(gè)全功能版本,就又做了一個(gè),反正也只是體力勞動(dòng)的問(wèn)題。不過(guò)全功能版本的anti-warden我從一開始就沒打算做, maphack這種軟件和游戲本身耦合的太緊密,要把自己隱藏起來(lái)工作量很大,即使做出來(lái)也是白做(除了掙點(diǎn)兒經(jīng)驗(yàn)值)。我認(rèn)為對(duì)抗到最后還是 warden會(huì)贏,因?yàn)閙aphack(注意我只是說(shuō)maphack類外掛)沒辦法對(duì)付warden的數(shù)據(jù)完整性檢查。想想maphack最基本的功能是 什么?開地圖!如果你進(jìn)入游戲后5秒鐘內(nèi)就把所有場(chǎng)景地圖都打開了,不是作弊就見鬼了。還有,如果你每次進(jìn)入游戲都直飛目的地,一點(diǎn)彎路都不帶繞的(D2 的場(chǎng)景地圖是隨機(jī)的),除了作弊還能是什么。如果warden針對(duì)這些數(shù)據(jù)進(jìn)行檢測(cè),必死無(wú)疑。當(dāng)然warden目前為止還沒進(jìn)化到這一步。
最后,我想說(shuō)一句,人分三六九等,外掛也分善意的和惡意的。像maphack這種就是善意的,它的目標(biāo)是幫助玩家更好的進(jìn)行游戲。甚至它還有一些防惡意外 掛的功能。比如有些惡意外掛利用游戲程序的bug可以讓別的玩家掉線,maphack就可以避免這種情況,這相當(dāng)于給游戲改了bug。用d2loader 的玩家知道d2loader在過(guò)關(guān)時(shí)有bug,會(huì)導(dǎo)致游戲退出,hackmap就改了這個(gè)bug。還有,迄今為止我給hackmap做的比較費(fèi)勁的一個(gè)功 能就是支持中文聊天(最早不是我做的)。D2的玩家都知道,D2游戲本身不支持中文輸入,在游戲中輸入的漢字都是亂碼,要交流只能用拼音,或者英文。 hackmap在1.15和1.16版本中增加了對(duì)中文輸入的支持,不過(guò)我一直覺得不夠滿意,沒能解決所有問(wèn)題。其中的原因主要是因?yàn)镈2用到了三種字符 集:ANSI/MBCS,UNICODE和UTF-8:通常情況下用ANSI/MBCS,和多語(yǔ)言有關(guān)的部分用UNICODE,通過(guò)網(wǎng)絡(luò)傳輸時(shí)又轉(zhuǎn)換成 UTF-8,比如聊天信息(大致的情況是這樣的,具體的記不確切了)。這幾種字符集之間互相轉(zhuǎn)換,D2還有簡(jiǎn)體中文和繁體中文兩種版本,錯(cuò)綜復(fù)雜,在沒有源代碼的情況下很難把所有情況都照顧 到,所以在hackmap 2.0以后,我干脆又把這一功能取消了。要徹底解決這個(gè)問(wèn)題只能重新設(shè)計(jì)游戲代碼。

總結(jié)

以上是生活随笔為你收集整理的我为什么做外挂的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。