吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.vuyuem.live

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 6661|回復: 104
上一主題 下一主題

[原創] 植物大戰僵尸修改器(四)超級攻擊

  [復制鏈接]
跳轉到指定樓層
樓主
丸子de爸爸 發表于 2019-10-23 16:05 回帖獎勵
本帖最后由 丸子de爸爸 于 2019-11-1 20:13 編輯

前言

發現帖子被微信公眾號推送了,個人還是挺開心的,這樣可以有更多的兄弟可以了解編程這個行業。

微信上有人回復說我之前的流程圖不合格。我想回答的是,任何的圖的最終目的都是為了更好的讓人看懂,而不是體現高端標準的存在。當然也可能我的圖確實有問題,哈~好多年不畫了是真的。我的帖子也是一樣,我的概念解釋,可能沒有體現那么專業,更多的是希望大家能夠簡單的理解,等有興趣了,可以自己嘗試去深入理解,都是沒問題的。(但是我確實是程序員哈,咳咳,還是持證的)

所以在此申明一下,我會盡量呈現我自己經驗的東西,大家也千萬不要完全以我的概念為標準答案,鼓勵大家懷著質疑的心態學習,誰都會錯不是么。如果大家有發現有什么地方有問題,也歡迎指出錯誤。請指出來,共同學習嘛。而不是,哎呀你這個不行這種,謝謝。

講了很多體外話,來講下這個系列的計劃吧,本來是準備這一篇就直接做修改器了。但是突然覺得,好像CE里面還有一個數據的觀察可以講,可能也對新手朋友有一些思路上的幫助,同時再給AA腳本來一次補課,于是延長一期。下期就是最后一篇了,會講到通過易語言和AA引擎怎么來制作一個自己的修改器,當然內容好像不少,可能也會有上下集,但是會盡量比較近的時間發出來,謝謝大家。

歡迎文明轉載,請注明出處  丸子de爸爸

本文所有技術資料僅供研究,不鼓勵任何盜版商用行為

請大家支持正版,支持正版!支持正版!!!

上集傳送門

工具

CheatEngine6.7

植物大戰僵尸本體

PS:(我使用的是年度版,可以直接解鎖所有物品,不然你就自己打到后面去吧)

本次基礎概念

內存,一切皆內存,我們操作的全部都是內存。

所有地址相關的概念,都可以理解為坐標,用來給我們做標記的而已。

如果實在搞不明白,你想想指南針為啥指向北邊,為啥叫南北,只是定義,只是公認

PS:上面這一段是重復了,但是我覺得還是有必要多重復一下,看多了,大家就印象深刻一點。

AA腳本的保存

每次CE修改完,寫了AA腳本之后,可以保存為CT文件,下次運行游戲的時候,直接打開,就可以直接使用。

對象

編程的一種概念,簡單理解成對事物的個體化表現。(實在不想說啥抽象啥之類的,很繞口,哈~)

比如說,我們都知道貓,就可以把貓看成一個對象。如果貓是一個對象,那它就可以變得具體化,比如紅色的毛呀,多少歲呀,也可以有名字呀,愛吃魚呀,會跑會跳。

所以對象就會包含兩個基本元素:屬性和方法。具體區分,可以用動名詞分析法,動詞就是方法;名詞就是屬性。如跑,跳,吃就是方法;紅色,黑眼睛就是屬性。想了解的,可以進一步去查查,動名詞分析法或者對象。

實現步驟

植物超級攻擊可以分為2種模式:

  1. 修改植物攻擊CD
  2. 特殊超級攻擊(這個我是不知道怎么形容,這個是因為特殊原因造成的,并不是啥邏輯)

修改植物攻擊CD

CE查找CD地址

首先老規矩,打開CE和游戲本體,開始游戲。并用CE附加進程。(選植物的時候可以選個玉米投手,后面有用)

用前兩次找的陽光指針或者基址,改個陽光數量。

然后等一個僵尸出現,等僵尸出現,在那一排種下一個單發射手(其他都行,看你自己),然后切換到CE。

這時候我們可以理一下攻擊CD的流程。和之前植物種植CD是一樣的。

每攻擊一下,跑CD,CD結束,再攻擊。(CD是先賦值最大值,再減少到0。嘗試出來的)

回到CE,掃描類型設置為“未知的初始值”,首次掃描。

在CE中開啟變速精靈,將速度降低,點擊應用。

這是為了我們可以在一次攻擊中,多次搜索CD。防止僵尸被太快的打死。

回到游戲,看植物發射了一顆子彈。切換到CE,搜索“減少的數值”,點擊“再次掃描”。

如果植物又發射了一顆新的子彈,需要搜索“增加的數值”。因為攻擊CD是一個循環,見流程圖。

具體為啥,第二篇CD里面有詳解了,不多說。

多次搜索,最終可以精確到一個值,當然其實你經驗好,也不用篩選到最后一個,有可疑的可以先測試。

將整個值改到0,發現植物馬上又發射了一顆子彈,所以他就是攻擊的CD了。

右鍵選擇“找出是什么訪問了這個地址”。

因為理論上,循環的減少CD,一直改寫。減少完之后,需要判斷是否CD完成,這個判斷就是訪問。

所以我們這里選擇訪問。

回到游戲,CE立刻多了很多紀錄。

但是出現了個問題,可以發現,最后兩條紀錄雖然是比較的,但是都不是0。

之前我們是修改到0,然后植物重新發出了子彈。所以正常應該是和0比較,但是這里沒有。

說明,這個CD,不是很準確,或者是不由這個CD來控制,或者是有特殊的方法判斷。

那沒辦法,我們從第一個,是減少值CD,從修改入手分析邏輯。

從紅框往下dec開始,分析每條代碼含義(其實我就是前面幾條看到了,才決定一直往下分析的)

  • [esi+58]就是攻擊CD,CD = CD -1
  • 將CD存到eax寄存器中
  • 將edi存到棧里
  • 檢查eax是否為0,也就是判斷CD是不是為0
  • 之前CD>0就跳轉,所以下面的代碼,就是CD=0的時候執行的邏輯
  • 棧里存一個15常量
  • 調用一個方法,啥方法先不管
  • ecx賦值一個值,[esi+5C]
  • ecx = ecx-CD
  • eax賦值為一個不是CD的值,[esi+24]
  • esp+4,esp棧頂指針,一般簡單可以先不管。
  • 將ecx賦值到CD。這里就可以發現可疑了。

之前有一個ecx = ecx-CD,然后ecx又賦值給了原本存放CD的位置。

所以判斷,ecx,也就是[esi+5C],是CD的最大值。

AA腳本實現

根據上面的分析,只需要直接把最大值改為50,就可以實現增加輸出的速度。

(至于為啥是50,應該是和動畫有關,改為低一點的,會有子彈打不出來)

選中 mov  ecx,[esi+5C]這一行,選“工具”,自動匯編。

先選“CT表框架代碼”,再選“代碼注入”。PS:選AOB注入可以解決多版本兼容問題。

AA腳本運行邏輯是:

先從具體代碼行數開始執行"PlantsVsZombies.exe"+6DC21:

通過jmp到指定標簽,默認是newmem,執行完新的代碼之后,再向下接著執行。

打開的時候,執行enable里面的邏輯;關閉的時候,執行disable里面的邏輯。

但是我們只需要修改mov ecx,[esi+5C],改為mov ecx ,0x32就行。

PS:注入原理是,在你選擇的代碼處將原來的代碼修改為jmp,跳轉到自己開辟的一塊新位置,然后按你的邏輯執行匯編。其中會根據你選擇的代碼字節碼的長度和jmp進行對比,對代碼進行調整。所以有時候我們會看到originalcode里面就是一行代碼,有時候是兩行,是因為每次都在原處改為jmp,必須和源代碼的長度是符合的。(jmp好像是5長度,這樣如果修改注入的位置只有3,就不會夠長度,于是就會把下面兩行代碼都放到新方法里,在原代碼處用nop補位。新手有個概念就行,這些都是系統會做的,慢慢就會明白了)

[ENABLE]                       //激活腳本時的邏輯
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)             //申明一個新代碼空間newmem
label(returnhere)                          //申明標簽returnhere
label(originalcode)            //申明標簽originalcode
label(exit)                    //申明標簽exit

newmem:                        //一般自己的代碼就寫在這里,但是你也可以直接修改下面的代碼,但是需要注意保證原始執行邏輯
originalcode:                 //原本的代碼,修改時需要注意。內容由jmp和代碼差生的字節碼差導致。
mov ecx,0x32                    //這里要改為32,就是十進制的50
sub ecx,eax

exit:
jmp returnhere

"PlantsVsZombies.exe"+6DC21:
jmp newmem
returnhere:

[DISABLE]                   //關閉腳本時的邏輯
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"PlantsVsZombies.exe"+6DC21:
mov ecx,[esi+5C]
sub ecx,eax
//Alt: db 8B 4E 5C 29 C1

修改完成后,點擊“分配到當前的CT表”。就可以在CE中搜索結果欄看見腳本。

點擊腳本最前面的方框就可以啟動腳本,再點一次就是取消。

啟動后,發現植物的攻擊頻率明顯提升。(但是缺點是雙發子彈數也變成單發一樣了)

超級攻擊

這個攻擊是我當時在嘗試修改攻擊間隔的時候發現的,也正是因為這個,我覺得有必要新增這一篇帖子。

CE查找超級攻擊地址

無論這種語言是面向對象的還是面相過程的,在某種程度上都可以理解為有對象的存在,只是看是不是顯性的。(好像有點遠,講多了也麻煩,大家當是我個人的意見吧,可以自己去查查,面向對象,面向過程。)

他們會把一個對象相關的值,放在相近的內存區域里。其實如果仔細一點我們從之前的分析就可以看出來。

見下圖,紅框內每一句分析,在上面都有,不記得的往上翻翻。

這里的esi分別和什么有關,esi+58是CD,esi+5C是最大值,esi+24暫時不知道(其實這是植物的種類)。

這說明在植物攻擊CD倒計時結束進入的這一塊邏輯里,esi對應的是當前植物對象在內存中的的首地址。

在游戲里,把其他植物都鏟了,防止干擾你觀察數據。

在有僵尸的那一欄,種下一個玉米。(其實種啥都行,玉米方便觀察)

回到CE,在push 0F那打斷點,其實上面打斷點也行,但是為了方便后面調試。

(這里進入斷點的,就是開炮的時候,只要在jg下面就行,不同版本的也沒關系)

回到游戲,等待斷點觸發,查看到ESI的值為“28CC5618”,每個人不一樣,紀錄你自己的。

右鍵左下角內存區域的任何一項,選擇“轉到地址”,填寫我們剛才的ESI值,點確定。

自己調整下內存區域的顯示大小,邊框拉一下,拉大一點。

ctrl+B,去掉所有的斷點。按F9使程序恢復運行,然后在CE中,變速精靈保證是減速到0.25(這都是方便觀察)

可以發現,在紅框位置的有一個數值,在CD跑完了之后(自己轉到地址是可以加偏移的,可以確定哪個值是CD)

這個紅框內的值開始進行了一個倒計時,并最終停留在了1上。


然而為1的時候,游戲里的畫面是醬紫的。

玉米保持一個投擲的姿勢,等玉米恢復到了填彈狀態,該數值才重新變為0。

PS:是的,我重開了游戲,之前開變速精靈的時候崩了...

所以我們是不是可以推測,之前我們那個攻擊CD之所以沒有0,是因為我們認為的攻擊CD只是代表填彈的間隔。

填彈完畢,然后再由這個真正的攻擊CD來控制,進行一個攻擊動畫的倒計時。

等到1的時候,丟出彈藥,然后再次填充。

所以我們先在這個地址上右鍵,然后選擇“把地址添加到列表”

你么如果懶,不想自己觀察,可以告訴你們偏移就是ESI+90的那個位置。

在CE里,右鍵剛添加的地址,選擇“什么訪問了地址”。

老原因,因為在攻擊的時候需要判斷,是否到一個臨界值,所以只是訪問而不是改寫。

又是一堆紀錄,不過好像直接找到了我們想要的東西,是不是有一個與01的比較了,就是他了。

和我們的分析也一樣,判斷到了1,則釋放子彈,為啥不是0。因為0的時候是空閑狀態。

所以選中cmp 01那一行,顯示反匯編。

接下來都不需要斷點了,cmp下面一行是jne,不等于才跳轉。

也就是,不等于1的時候,就直接跳走,等于1才執行下面的邏輯。

那我們只需要讓他一直執行1的邏輯,就可以實現一直攻擊了。(是他執行多少次,就攻擊多少次)

選中jne那一行,自動匯編,參考上面的AA。只需要把originalcode中的內容去掉就可以了,因為我們不需要執行任何代碼。只是要把跳轉去掉就行了。

添加到表中之后,打開腳本,攻擊開始狂暴了。

這里其實子彈的個數,就是你真正的攻擊CD的數量。因為他只在倒計時里執行判斷,所以沒法讓它一直開槍。

當然有人可能說,那我直接給它改一下不行么?還真不行,它的循環邏輯比較復雜,我觀察了一段時間,感覺沒有啥太好的處理方法。不過也有思路,就是去觀察對象的數據結構,也就是我為啥能發現這個為1的時候,開始執行真正攻擊的原因。

進一步的分析數據結構,對比雙重或者四重和單重的區別,加以分析,應該就可以找到每次的子彈數的位置了。

如果能分析出子彈對象的屬性,讓豌豆射手打出玉米加農炮都是可能的...

有興趣的可以去分析分析,然后分享一下,我還是偷偷懶吧。

總結

想要分享給大家的,不是簡單的一個功能,而是一種思路。有時候如果發現找到的結果和自己的想法不太一致,嘗試去分析一下對象周邊的東西,關聯聯想是非常重要的,我們之前其他幾個功能也有用到類似的方法。不過這一次希望引入對象的概念,使大家能夠更加清晰,多謝各位,有問題和意見歡迎回復。

PS:可以留個作業,植物只有看到僵尸才會打子彈,能不能讓它不看到僵尸也打子彈,其實很簡單,試試吧。

下篇文章真的是本系列最后一篇了,將分享使用易語言和AA引擎制作外掛,敬請期待。

下一篇

免費評分

參與人數 36威望 +1 吾愛幣 +39 熱心值 +35 收起 理由
daiSir + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
yuanchen123 + 1 用心討論,共獲提升!
abobojing + 1 我替那些僵尸默哀三分鐘
gamma + 1 [email protected]
友人 + 1 + 1 我很贊同!
462924447 + 1 + 1 [email protected]
不愛everyone + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
丶小煌 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
只有一點點 + 1 [email protected]
he1763 + 1 + 1 [email protected]
落葉無聲丶 + 1 + 1 [email protected]
jay20070223 + 1 + 1 我很贊同!
LOLQAQ + 1 + 1 我很贊同!
Ekko + 1 + 1 [email protected]
sky_bro + 1 + 1 [email protected]
Mainos + 2 + 1 [email protected]
zls黑戰魔 + 1 + 1 用心討論,共獲提升!
wuai888 + 1 + 1 我很贊同!
lep52 + 1 + 1 用心討論,共獲提升!
lookerJ + 1 用心討論,共獲提升!
無殤 + 1 + 1 [email protected]
syc_it + 1 + 1 @ panxiaojie1118 九年義務教育可能搞不出來這個哦
sniper9527 + 1 + 1 [email protected]
fei8255 + 1 + 1 666
wzwdlxf + 1 + 1 大牛,玉米投手 黃油攻擊的邏輯或機制是怎樣的
EVUi + 1 + 1 我很贊同!
笙若 + 1 + 1 [email protected]
fhy129 + 1 + 1 熱心回復!
春夏之交 + 1 + 1 [email protected]
panxiaojie1118 + 1 + 1 同樣是九年義務教育,你為何這么突出。當年我就沒這么多想法。
FairSun + 1 + 1 膜拜大佬,學習到很多知識!
Hmily + 1 + 7 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
為海爾而戰 + 2 + 1 我很贊同!
erhcbwl + 1 + 1 熱心回復!
y521775876 + 1 + 1 [email protected]
小星學破解 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
 樓主| 丸子de爸爸 發表于 2019-10-23 22:47 <
本帖最后由 丸子de爸爸 于 2019-10-23 23:09 編輯
wzwdlxf 發表于 2019-10-23 21:49
大牛,玉米投手 黃油攻擊的邏輯或機制是怎樣的,可以修改為只出現黃油么[doge]

謝謝回復,理論上是可行的。我沒嘗試過,就不說死了,改天試試再給你準確答案。
他投擲黃油和普通的攻擊都是屬于攻擊動作的調用,理論上只要找到那個分支判斷,就可以實現無限黃油攻擊。
試過了可行,就按我之前說的做就可以,有圖有真相。

免費評分

參與人數 1吾愛幣 +1 熱心值 +1 收起 理由
wzwdlxf + 1 + 1 大佬!

查看全部評分

推薦
 樓主| 丸子de爸爸 發表于 2019-10-30 15:23 <
wzzjnb2006 發表于 2019-10-29 21:12
什么時候出:使用易語言和AA引擎制作外掛
等的花兒都謝了。

這么期待,意思是AA腳本和之前各種反匯編全部都弄懂了?
沒弄懂的話,單獨學會使用制作外掛又有啥用。
如果已經會了前面這些,說明你可以嘗試去學習一門編程語言了。
只要隨便會一門編程語言,就可以使用AA引擎做了,原理就是使用dll而已。
4#
浪漫網絡 發表于 2019-10-23 16:21
5#
HTMason 發表于 2019-10-23 16:33
說實話匯編代碼很多都看不懂emmmm
6#
MZ667458 發表于 2019-10-23 16:41
技術大牛,感謝樓主分享
7#
wangliang52880 發表于 2019-10-23 17:19
感謝樓主的分享。
8#
向往的歌 發表于 2019-10-23 17:52
還以為是植物大戰僵尸四的游戲呢…………
9#
春夏之交 發表于 2019-10-23 17:53
我也還在玩植物大戰僵尸,跟你一比,你才是會玩啊
10#
newtin 發表于 2019-10-23 17:56
這樣還有樂趣可言嗎?
11#
biubiufish 發表于 2019-10-23 18:00
學習了學習了
12#
233500 發表于 2019-10-23 19:51
本帖最后由 233500 于 2019-10-23 19:53 編輯

大佬,AA腳本 點過自動匯編>模板>CT表框架代碼>    然后點代碼注入  會卡住   是什么情況,哪里出了問題嗎?
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-12-9 10:25

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
新快赢481走势图200