植物大戰殭屍 學會使用人造指標

2022-09-19 09:57:08 字數 2169 閱讀 5316

通過向遊戲中注入一段特殊的彙編**,實現自動獲取動態位址,省略找基址的麻煩。該方法適用於遊戲基址層數過多無法直接獲取到基址,遊戲根本無法找到基址。

1.開啟ce工具並附加遊戲程序,首先通過遍歷的方式找到陽光的動態位址,然後在位址列上右鍵選擇【找出是什麼改寫了這個位址】如下所示我們選擇【mov eax,[esi+5560]】這條彙編**。

2.上圖可以看到有兩條彙編指令,而前面的計數器一直在增加,說明有時鐘一直在訪問這個位址,我們以第2條彙編指令為例,點選【反彙編當前位址】在xor指令上按下【f5】下斷點,其中【mov eax,[esi+5560]】則表示將當前陽光數量賦值給eax暫存器,我們可以看到右側暫存器視窗【eax=32】,其中的32正好就是陽光的十六進製制表示形式,注意【mov eax,[esi+5560]】這條指令,觀察該指令在注入前與注入後會有什麼變化?

3.直接點選【工具列表】-> 【選擇自動彙編】 ->【模版】->【**注入】-> 【確定按鈕】,如下圖所示:

4.我們需要在【mov eax,[esi+00005560]】這條彙編指令執行之前獲取到裡面的陽光資料,此時可以在【originalcode】之前寫入以下彙編**,其中【push eax,pop eax】分別是壓棧與出棧,因為我們要使用eax暫存器暫存資料,此時必須要將原始的eax暫存器裡面的內容進行儲存,在**執行完畢以後必須通過pop指令歸位,否則會導致程式異常或堆疊失衡,【mov eax,[esi+5560]】則表示將【[esi+5560]】中的資料取出來,此處就是陽光的數量。

5.接著我們需要找乙個相對固定的記憶體位址,並將其填充到【mov [***x],eax】方框中,此時我們回到ce中(自動彙編視窗不要關閉),在記憶體檢視器視窗選擇【檢視】->【記憶體區域】

我們需要瀏覽記憶體區域,找出乙個具有讀寫許可權的空位址,並且型別為映像的,這裡還需要看後面的模組一定要是植物大戰殭屍檔案裡的模組,此處我找到了乙個記憶體位址 【0b4cf000】,雙擊即可跳轉到相應的位置,這裡我們不能選擇【02ca9000】這個記憶體位址,因為這個位址是qq拼音的模組。

6.通過雙擊【0b4cf000】位址,即跳轉到相應的記憶體區域,如下在記憶體檢視器中,標紅處。

我們直接將【0b4cf000】這個記憶體位址填入到我們的彙編**中,此時只要程式獲取到陽光,會預設將陽光的數量放入0b4cf000這個記憶體中進行儲存。

完成獲取以後,我們直接在ce中新增這個記憶體位址,並開啟自動彙編ct指令碼,此時陽光的數量就可以獲取到了。

我們再次來到反彙編視窗觀察注入後的變化,可以看到ce是直接在【d6679600】處寫入了 jmp 指令直接跳轉到了我們自己寫的**中去執行了。

跟隨【00df0000】這個位址即可看到如下**,沒錯!這些**正是我們在ct表中分配的,當執行完獲取資料以後則會自動跳轉到原始位址【0048982b】繼續執行原始**。

總結:上方的的人造指標有乙個小問題,那就是我們無法修改陽光的數量,其實這個問題很簡單,在開頭我們說過該位址有乙個時鐘一直在給這個位址賦值,而我們在開頭查詢的是記憶體訪問,如果要修改資料,應該要找記憶體寫入相關的位址。

植物大戰殭屍

c code using system using system.drawing using system.text using system.windows.forms namespace plantsvszombiestool private void form1 load object sen...

植物大戰殭屍新植物殭屍(上)

速度 慢,同普通殭屍 西瓜投手殭屍傷害力巨大,西瓜砸碎時3 3範圍的植物全部都會受到傷害,和西瓜投手相同。魅惑無效,照樣投向植物,最好用必殺植物,地刺也能砸到 攻擊 80 3 3格仔 生命 200 出現在草地 泳池 屋頂 室內。弱點 蘿蔔保護傘 背景 一天晚上,一群殭屍劫持了西瓜投手,它們對西瓜投手...

1565植物大戰殭屍

description input output 僅包含乙個整數,表示可以獲得的最大能源收入。注意,你也可以選擇不進行任何攻擊,這樣能源收入為0。sample input 3 210 0 20 0 10 0 5 1 0 0 100 1 2 1 100 0 sample output hint 在樣例...