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

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 3208|回復: 34
上一主題 下一主題

[原創] 星際爭霸v1.08修改作弊指令(下)

[復制鏈接]
跳轉到指定樓層
樓主
丸子de爸爸 發表于 2019-9-11 17:49 回帖獎勵

前言

哇,一不小心又偷懶了很久。是的,這次我真的是偷懶了,我就承認了怎么樣。

回到正題,之前星際爭霸快速指令只是進行了內存查找和修改的分析,今天我們來分析一下其中的匯編代表的意義。

很多人看到匯編都會覺得很難,超級復雜,人怎么可能學會呢,其實是思維的問題,轉換一下思維,你也能學得很好。

PS:本篇可能有很多啰嗦的文字,但是依然會講得比較淺顯,所以大家不用方張。

上一篇傳送門

文明轉帖,若需要轉帖請注明出處,謝謝。

基礎知識

一些思維方式

1.不要畏懼未知。

未知往往是收獲而不是羞恥,人最多的東西永遠是不知道的。碰到不知道或者不明白的東西,一定要去弄清楚,滴水穿石的力量是很可怕的。

2.不要害怕翻閱答案

在學習破解或者CM練習的時候,不要害怕去搜索別人的答案,覺得自己總是在看答案。你剛學,什么都不會是正常的,就是要去多看看別人的思路,慢慢的,你就會有思路了。

3.要勤于總結

所謂的總結,不僅僅針對于失敗,成功也可以總結。比如此次怎么快速的定位到了,或者失敗的原因是什么,下次應該怎么避免失敗,別人這次用了什么新工具。只要總結,你就是有得到東西。

4.可以嘗試寫點博客

嘗試把自己的收獲或者成果和大家分享,不僅僅幫助了別人,對自己也是很大的幫助。總有人說,我會做,就是不會說。但寫博客是一個把你的思維結構化很好的方法,你為了讓別人看懂,可能會花費比自己做更多的精力,而且還需要重新整理和鞏固基礎知識,是非常好的一種方式。

PS:年紀大了有點啰嗦,后面的東西更啰嗦,怕你們看不下去,所以寫在前面,這些思維比后面還重要。

PS2:前方超級高能且嫉妒催眠,這不是演習,只是打醬油建議直接跳到實戰分析。

匯編知識

在這里稍微簡單介紹一下相關的知識點,后面逐句分析

寄存器

顧名思義,就是寄存數據的地方,當然這數據可以包括:指令,內存地址和數據。可以理解為超市門口的寄存柜。你存進去,誰拿紙過去,誰就可以拿。當然他也可以選擇把東西拿走,或者是只是看一看。

在匯編中主要使用的寄存器有EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP。(其實有16個....)

其實寄存器要深究還是蠻復雜的,有興趣的可以自己去找找資料,這里不講太深。

一種用于存放數據的線性列表。

我看到的對棧的描述最好的解釋就是撲克牌。我們把數據當成撲克牌,每人手里的牌是寄存器的數據。棧相當于未摸撲克牌的集合體。你蓋回去的時候,只能蓋在最上面,你拿牌,也只能從最上面拿。

棧的原則,先進后出,后進先出。

PUSH指令

將寄存器里的值放到棧里。

由于寄存器的數量有限,有時候我們需要使用其中一個寄存器,但是它又已經存放了別的數據那怎么辦呢?這時候就可以先把寄存器原先的值push到棧里,待我們使用完寄存器,再把原先的值重新放到之前的寄存器中,這樣程序就可以依然正常運行了。

按撲克牌比喻可以理解為,假如你拿牌拿多了,需要再放回去,放哪里呢?放第一張。

例 PUSH EAX。將eax寄存器中的值放入棧里。

POP指令

取出棧里的第一個元素到指定寄存器。

按撲克牌比喻可以理解為,XX拿一張牌到手上。

例POP EAX。將棧頂(就是最上面)數據存放到eax中,同時在棧中刪除這條數據(因為牌被拿走了嘛)。

MOV指令

賦值指令。

例mov eax,ebx,其實很好記,就和別的語言一樣int eax = ebx。順著讀就行,意思是將ebx值賦給eax

CMP指令

比較指令,并將比較的值存入標志位。(暫時可以理解就是存到另外的地方)

一般在跳轉之前使用,因為跳轉J**會根據標志位來判斷是否跳轉。

JNE指令

標志位ZF=0時跳轉。可以簡單記做前面的CMP不相等就跳轉。(主要還是要看ZF)

進制

進制其實就是進(一)制,逢X進1,主流的進制為:二進制、八進制、十進制、十六進制。分別對應:逢2進1、逢8進1、逢10進1、逢16斤1。

一般在匯編里,主要使用的是十六進制。對應的16個數字分別是0~9,A、B、C、D、E、F。(A=10,F=15)

16進制通常前面會加上0x的標志,例0xFF0014

ASCii碼

美國信息交換標準代碼,是基于拉丁字母的一套電腦編碼系統。

可以理解為電腦的字典。所有的數據,在電腦里都是數字,那么電腦怎么知道顯示給我們看字呢,就是通過這個字典。電腦會拿到數字去比對字典中對應什么含義,然后展示給我們對應的字母。(不用死記)

字節

一個英文字母的長度,我們稱為一個字節,又叫一個byte。結合ASCii碼,我們可以知道,一個字節可以由2位16進制來表示,所以我們的寄存器其實是一次4字節的。(有興趣的可以去繼續思考,bit和byte的關系,你就會明白為啥是32位寄存器了)

實戰分析

根據上一篇的星際邏輯來逐行分析。先給一個整體。

push eax                               備份之前的寄存器內容,怕出BUG。其實這次的需求不寫也行,好習慣。
mov eax,dword ptr ds:[ecx+0x14]        將輸入內容讀到寄存器eax中
cmp word ptr ds:[eax],0x31             比較輸入的值是不是1
jne short 004ECDEB                     這跳轉你要看你們自己的,跳轉到pop eax那一行
mov dword ptr ds:[eax],0x776F6873        內存寫入"show"
mov dword ptr ds:[eax+0x4],0x20656D20    內存寫入" me "
mov dword ptr ds:[eax+0x8],0x20656874    內存寫入"the "
mov dword ptr ds:[eax+0xC],0x656E6F6D    內存寫入"mone"
mov word ptr ds:[eax+0x10],0x79          內存寫入"y "
pop eax                                還原寄存器內容
call 004E6030                          調用原來正常邏輯需要調用的方法
ret                                    返回引用處

第一行push eax,將eax的數據給放到棧中(撲克牌回憶起來)。我們要使用eax,所以先把數據放到棧里,對應倒數第三行的pop eax,把數據還原回eax中。

mov eax,dword ptr ds:[ecx+0x14]

這一句整體含義是,將用戶輸入的內容的起始地址讀取到寄存器中。(初始地址讀入之后,會循環向后讀取到所有內容)

拆分開,這句變成了關鍵字mov,寄存器eax,和dword ptr ds:[ecx+0x14],其中mov和eax在基礎知識里已經介紹了。

首先dword、ptr、ds都是修飾最后中括號中的地址。

所以我們可以分析出這里的邏輯就是,把后面這個括號里的值[ecx+0x14],賦值給寄存器eax,但是是什么樣的值呢?

PS:我知道是ecx+0x14是因為在call方法那里我打斷點進去看到了ecx的值就是輸入的值+了偏移。

匯編中,如果是直接eax寄存器名稱,則是將寄存器的值直接使用;但如果是中括號包含著的,就是寄存器中的值當成內存地址,取在內存地址中的數值。

  • dword:代表數據長度為四字節。相對的還有word兩字節和byte單字節。
  • ptr代表指針,這里可以理解為對寄存器讀取的是內存地址中值的申明。
  • ds(Data Segment)代表數據段寄存器,代表是括號中的地址是相對于DS開始偏移。內存是動態的,當分配完數據段內存之后,我們可以根據數據段寄存器來使用偏移得到動態地址。

所以:整句話變成了,取ecx+0x14內存中的值的4個字節(8位16進制)放到eax中。

覺得復雜?沒事,我們來做一個通用步驟:

  • 先找關鍵字,如mov,cmp之類。
  • 再找分隔符“,”,如果有的話,分隔符前后就是兩個參數。
  • 確定主語,一般就是分割符之前和整個語句最后兩處是主語。
  • 接下來就是分析主語修飾詞(語文真的不好,不知道啥定補狀)

按照整個方法試試下面這一句:

cmp word ptr ds:[eax],0x31 

關鍵字:CMP。主語:[eax]和0x31。

  • CMP比較指令
  • word為兩字節(兩字節是因為容錯,如果單字節,打123,也會識別。想想為啥不能四字節)
  • ptr代表eax內存地址中的值
  • ds仍然是代表偏移。

結合上一句,我們將用戶輸入的值的地址傳到了eax中,所以現在讀取[eax],代表用戶輸入的值,用戶輸入的值和0x31對比,0x31對應ascii中的值代表就是“1”,這里其實就是比較用戶輸入值是否為1。

接下來下一句就是針對于CMP的判斷跳轉,沒啥好說的吧,如果之前判斷相等就不跳轉。也就是如果相等繼續執行下面邏輯。

再來下一句:

mov dword ptr ds:[eax],0x776F6873

關鍵字:mov。主語:[eax]和0x776F6873

  • mov為賦值指令
  • dword四字節
  • ptr代表eax內存地址中的值
  • ds仍然是代表偏移

現在應該很好看懂了吧,但是要注意一點,Intel的芯片目前都是小端模式存儲數據,所以數據是逆向的。

寫入的時候要注意逆向寫入,查ASCII可以知道,0x77=w,0x6F=o,0x68=h,0x73=s。

具體啥叫小端模式可以百度《大小端模式》,不感興趣的話直接記住逆向輸入即可。

剩下的都是類似的東西了,大家自己應該可以一行行分析了吧。

結尾

總算是寫完了,這一篇概念真是多得我自己都暈頭轉向的,如果有兄臺真心看完了,我覺得你肯定是可以的,堅持下去。

大家可以按照這種方式往后補上額外的作弊,比如2開地圖之類的。

另外附上完整修改版的快速作弊,即1金錢,2開地圖,3建造速度。(是我以前弄的,有個小BUG,看大家能不能發現)
鏈接:https://pan.baidu.com/s/1gOPrZaZR32J0u1W_cn4vMA
提取碼:za4c

請支持正版,支持正版,支持正版!

提前祝大家中秋快樂!

免費評分

參與人數 15吾愛幣 +29 熱心值 +15 收起 理由
夜涼星亮 + 1 + 1 用心討論,共獲提升!
xkwkl + 1 + 1 我很贊同!
校門口的萌新 + 1 + 1 我很贊同!
qws1855 + 1 + 1 [email protected]
gavin913 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
cr7890 + 1 + 1 感謝分享,外行的我只能寫ahk腳本來實現這些
liyonghaod + 1 + 1 [email protected]
八月未央 + 1 + 1 用心討論,共獲提升!
無尾熊0129 + 1 + 1 [email protected]
Peace + 10 + 1 這么精彩沒參加吾愛動畫大賽可惜了
悍匪戾 + 1 + 1 熱心回復!
禾水木 + 1 + 1 [email protected]
sunsinger + 1 + 1 用心討論,共獲提升!
xlch88 + 1 + 1 [email protected]
Hmily + 6 + 1 用心討論,共獲提升!

查看全部評分

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

推薦
 樓主| 丸子de爸爸 發表于 2019-9-11 19:58 <
坐久落花多 發表于 2019-9-11 18:32
我比較好奇的是你怎么把目錄寫在用戶信息那邊的?
這是什么操作?

使用Markdown,只要用#這種一級標題,二級標題的,論壇好像就自動生成目錄了
推薦
 樓主| 丸子de爸爸 發表于 2019-9-18 20:37 <
420130 發表于 2019-9-13 21:07
樓主 為啥我下載了你的EXE現在刪除不了了

我該怎么回復呢?你的系統我不知道,覺得有問題可以自己下載認為安全的文件自己修改,方法我也教了...
沙發
hxd97244 發表于 2019-9-11 18:27
3#
坐久落花多 發表于 2019-9-11 18:32

我比較好奇的是你怎么把目錄寫在用戶信息那邊的?
這是什么操作?
4#
sizhubiao 發表于 2019-9-11 18:44
永恒的經典,童年的回憶,感謝樓主分享!
5#
djhaixyc2019 發表于 2019-9-11 18:45
謝謝分享!!!
6#
kevinbinhe 發表于 2019-9-11 18:55
好久沒玩過星際啊,曾經的最愛
7#
zsjz2888 發表于 2019-9-11 19:53
這不是show me the money、black sheep wall和operation cwal么
9#
環球海員 發表于 2019-9-11 23:00
頂禮膜拜 這手藝了不得啊
10#
赤夜 發表于 2019-9-11 23:39
求大佬能不能修改一下1.14版啊
您需要登錄后才可以回帖 登錄 | 注冊[Register]

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

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

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

GMT+8, 2019-10-17 15:07

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
现在靠网络挣钱的方法