您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列,因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史,換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什么程度,漫漫長征路,偏向虎山行,享受程序,一起加油~
前文分享了外部威脅防護和勒索病毒對抗,帶領大家看看知名安全廠商的威脅防護措施,包括網路安全面臨的挑戰、如何有效的應對挑戰、深信服安全建設之道等,這篇文章將回到逆向知識,利用Cheat Engine工具逆向分析游戲CS1.6,并實作無限子彈功能,基礎性文章,希望對您有所幫助,如果存在錯誤、侵權或不足之處,還望告知,加油!
- 參考文章:https://www.bilibili.com/video/BV1F4411z7Wx
作者作為網路安全的小白,分享一些自學基礎教程給大家,主要是關于安全工具和實踐操作的在線筆記,希望您們喜歡,同時,更希望您能與我一起操作和進步,后續將深入學習網路安全和系統安全知識并分享相關實驗,總之,希望該系列文章對博友有所幫助,寫文不易,大神們不喜勿噴,謝謝!如果文章對您有幫助,將是我創作的最大動力,點贊、評論、私聊均可,一起加油喔~
文章目錄
- 一.CS1.6游戲介紹
- 二.逆向分析子彈數對應地址
- 三.地圖變換子彈無限固定
- 四.逆向分析裝備型別
- 五.逆向分析尋找基址并小hi愛你無限子彈
- 六.總結
作者的github資源:
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網路安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
從2019年7月開始,我來到了一個陌生的專業——網路空間安全,初入安全領域,是非常痛苦和難受的,要學的東西太多、涉及面太廣,但好在自己通過分享100篇“網路安全自學”系列文章,艱難前行著,感恩這一年相識、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請大家海涵!
接下來我將開啟新的安全系列,叫“系統安全”,也是免費的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內網滲透、網路攻防實戰等,也將通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,加油~
- 推薦前文:網路安全自學篇系列-100篇
前文分析:
- [系統安全] 一.什么是逆向分析、逆向分析基礎及經典掃雷游戲逆向
- [系統安全] 二.如何學好逆向分析及呂布傳游戲逆向案例
- [系統安全] 三.IDA Pro反匯編工具初識及逆向工程解密實戰
- [系統安全] 四.OllyDbg動態分析工具基礎用法及Crakeme逆向
- [系統安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大戰僵尸游戲
- [系統安全] 六.逆向分析之條件陳述句和回圈陳述句原始碼還原及流程控制
- [系統安全] 七.逆向分析之PE病毒原理、C++實作檔案加解密及OllyDbg逆向
- [系統安全] 八.Windows漏洞利用之CVE-2019-0708復現及藍屏攻擊
- [系統安全] 九.Windows漏洞利用之MS08-067遠程代碼執行漏洞復現及深度提權
- [系統安全] 十.Windows漏洞利用之SMBv3服務遠程代碼執行漏洞(CVE-2020-0796)復現
- [系統安全] 十一.那些年的熊貓燒香及PE病毒行為機理分析
- [系統安全] 十二.熊貓燒香病毒IDA和OD逆向分析(上)病毒初始化
- [系統安全] 十三.熊貓燒香病毒IDA和OD逆向分析(中)病毒釋放機理
- [系統安全] 十四.熊貓燒香病毒IDA和OD逆向分析–病毒釋放程序(下)
- [系統安全] 十五.Chrome瀏覽器保留密碼功能滲透決議、藍屏漏洞及某音樂軟體漏洞復現
- [系統安全] 十六.PE檔案逆向基礎知識(PE決議、PE編輯工具和PE修改)
- [系統安全] 十七.Windows PE病毒概念、分類及感染方式詳解
- [系統安全] 十八.病毒攻防機理及WinRAR惡意劫持漏洞(腳本病毒、自啟動、定時關機、藍屏攻擊)
- [系統安全] 十九.宏病毒之入門基礎、防御措施、自發郵件及APT28宏樣本分析
- [系統安全] 二十.PE數字簽名之(上)什么是數字簽名及Signtool簽名工具詳解
- [系統安全] 二十一.PE數字簽名之(中)Signcode、PEView、010Editor、Asn1View工具用法
- [系統安全] 二十二.PE數字簽名之(下)微軟證書漏洞CVE-2020-0601復現及Windows驗證機制分析
- [系統安全] 二十三.逆向分析之OllyDbg動態除錯復習及TraceMe案例分析
- [系統安全] 二十四.逆向分析之OllyDbg除錯INT3斷點、反除錯、硬體斷點與記憶體斷點
- [系統安全] 二十五.WannaCry勒索病毒分析 (1)Python復現永恒之藍漏洞實作勒索加密
- [系統安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及病毒決議
- [系統安全] 二十七.WannaCry勒索病毒分析 (3)蠕蟲傳播機制決議及IDA和OD逆向
- [系統安全] 二十八.WannaCry勒索病毒分析 (4)全網"最"詳細的蠕蟲傳播機制解讀
- [系統安全] 二十九.深信服分享之外部威脅防護和勒索病毒對抗
- [系統安全] 三十.CS逆向分析 (1)你的游戲子彈用完了嗎?Cheat Engine工具入門普及
宣告:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網路需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護,該樣本不會分享給大家,分析工具會分享,(參考文獻見后)
一.CS1.6游戲介紹
《Counter-Strike》是Valve1999年夏天開發的射擊系列游戲,創始人是杰斯·克利夫和李明(Minh Gooseman Lee),他們后來和游戲一起進入了Valve,這篇文章逆向分析的就是這款非常經典的游戲CS1.6,

調整游戲取消全屏,設定視頻位“視窗游戲”,方便我們除錯動態分析,

接著點擊“新建游戲”,我們選擇一幅最經典的地圖“de_dust2”

游戲設定可以將每局時間設長,方便除錯,

游戲加載界面如下圖所示:


開始吧,讓我們逆向分析CS,

逆向分析環境:
- 游戲版本:CS1.6
- 逆向工具:Cheat Engine 6.7
- 作業系統:Wndows10
二.逆向分析子彈數對應地址
第一步,按下ESC,回到桌面打開Cheat Engine軟體,

版本資訊為Cheat Engine 6.7,其主界面如下圖所示,

第二步,點擊左上角小電腦加載CS行程,
該軟體能監控游戲記憶體的資料,方便我們后續的讀寫修改,每一款游戲加載之后,就會存入記憶體中,無論是金錢、子彈數、時間都存盤在記憶體中,

打開后如下圖所示,接下來我們看看怎么操作CE,

第三步,回到CS游戲,我們看到當前的子彈數量是“17”,在CE中輸入“17”并點擊首次掃描,

掃描結果如下圖所示,共發現結果4851條,

當我們點擊再次掃描,其結果變為4829,之后再無變化,那么,我們怎么辦呢?

第四步,我們繼續射擊,然后輸入新的數字“16”進行搜索,

發現結果還剩196條,

接著繼續射擊及掃描,但此時的結果為196后,不再繼續減少,

第五步,Ctrl+A選中所有結果,然后右鍵“加入選擇的地址到地址清單”

第六步,結合二分法,按住Shift鍵選中一般內容,右鍵更改記錄數值,比如20,


修改后的內容如下圖所示:

接著回到游戲,我們可以看到子彈數量變成了20,然后點擊射擊變成了19,接著我們洗掉不是20的其余部分,

第七步,同樣的方法我們修改剩余的一半為30,繼續看游戲對應的數值是否變化,并洗掉不是對應的部分值,

注意,規則總結如下:
- 如果選中正確地址并修改,則未選中部分的數值隔一段時間后會跟著變為30,
- 如果未選中正確地址修改,則剩余部分會跟隨之前的子彈數量變換,比如,我將第一行數值修改為20,它立刻會自動變成84(當前子彈數),

最終確定的地址為:
- 0129BEE4

第八步,選中該條記錄,雙擊修改為“手槍子彈數”,然后修改子彈為88,

修改該值可以看到游戲中的子彈數量也跟著變化,

繼續修改為100發,游戲子彈數量繼續變化,

那么,我們怎么能將子彈數量固定(不減少)呢?
第九步,點擊鎖定,它會將記憶體地址鎖定,,

此時,再回到游戲中來,射擊后的子彈不再變化,

最后,我們換一張地圖來試試效果,按下H換地圖,但子彈發生變化了,那怎么解決呢?

寫到這里,先簡單總結:
- 該部分主要通過Cheat Engine來查找存放子彈的地址,并設定固定值,
- 后續讀者可以嘗試C++代碼自定義子彈數量并實作該無限子彈功能,
三.地圖變換子彈無限固定
這部分我們將解決地圖變換,但CS1.6子彈數量仍然保持不變的功能,
- 解決方法是:找到記憶體地址中存放子彈且不改變的地址,
程式打開后會加載到內存中,通常分為兩塊記憶體,其中一塊稱為“基址”,
- 基址:不會改變,用于存放血量、金錢等,當它不夠或需要存放更多資料時,它會跟系統申請地址,這個地址是系統分配的,所以,變換地圖后顯示的子彈數地址也會發生變化,我們需要找到其變化規律(偏移地址)即可,
第一步,通過前面部分的方法找到子彈數存放的地址(復現上面操作),
在逆向程序中,我們可以將每局時間設定長一些,方便除錯,


我們可以看到,在196條結果中有綠色和黑色地址,
- 綠色就是基址,只要程式啟動,這些地址就歸游戲使用,
- 黑色是臨時申請使用的,
因此,我們需要找到一個綠色的地址,但其實這里的綠色地址都不是我們想要的地址,

接著使用二分法找到對應的子彈數量地址,

同樣的方法,我們最終確定地址為:
- 0BB556DC

但是,它是臨時存放子彈數量的地址,現在我們有個新的猜想,通過一張圖來構想如何尋找基址,
- 當前子彈數量為17,對應的地址為0BB556DC,它存放在臨時地址中(換地圖可能變換),而對應的基址xxxxx,存盤的是臨時地址的地址,即0BB556DC,這里我們需要通過地址關聯,從而進一步發現基址,實作地圖變換子彈無限固定的功能,并且它可能是多層指標,

第二步,雙擊地址并復制0BB556DC,然后勾選“十六進制”點擊“首次掃描”,運行如下圖所示,

但此時沒有任何資料,上面的猜想是失敗了嗎?

原因是存在偏移地址(指標偏移),因此我們需要執行如下操作,
第三步,選中地址右鍵“找出是什么改寫了這個地址”,

接著彈出如下圖所示的對話框,

進入游戲嘗試射擊,可以看到:
- 計數:呼叫次數
- 指令:匯編代碼
- 同時給出該匯編指令的背景關系

第四步,分析匯編代碼,
匯編代碼如下,“mov [esi+000000CC],eax” 表示將eax賦值給[esi+000000CC]中,這個偏移加上后就對應我們的子彈數,分析如下:
- ESI = 0BB55610
- ESI + CC = 子彈臨時地址0BB556DC
170E6E9A - 48 - dec eax
170E6E9B - 8B CE - mov ecx,esi
170E6E9D - 89 86 CC000000 - mov [esi+000000CC],eax <<
170E6EA3 - 8B 86 A4000000 - mov eax,[esi+000000A4]
170E6EA9 - 8B 40 04 - mov eax,[eax+04]
EAX=0000002C
EBX=00000000
ECX=0BB55610
EDX=02511E60
ESI=0BB55610
EDI=00000001
ESP=0019F324
EBP=00000001
EIP=170E6EA3
接著我們點擊“手動加入地址”,然后輸入0BB55610加上CC,可以看到結果為18,對應當前子彈數量,


接著我們進行簡單的描述備注,

第五步,我們繼續掃描,找到存放0BB55610地址的對應地址,共計6個結果,
- 0BB55610

但是,它們還不是綠色的基址,說明它們是存放臨時資料的臨時地址,其結果圖有可能如下圖所示,

接下來,我們繼續查找,
第六步,進入游戲中嘗試射擊,或按下H嘗試重繪游戲,

我們可以看到出現了4個紅色的數值修改,

并且我們的子彈數現在是20,不再是14,
- 地址:0BB5E894
- 數值:01213E90
- Previous:0BB55610

第七步,接下來我們依次對這些地址進行掃描,

注意:有時候場景自動切換會導致之前增加的“臨時子彈數”和“子彈數+CC”地址失效,這需要我們重新掃描子彈數量,方法和之前的一樣,建議先調整無限時間,方便我們除錯程式,

如果你是初學者,建議反復熟悉這些流程,這里再簡單總結步驟:
- 掃描數值子彈數
- 射擊繼續掃描得到196個結果,選擇加入地址清單
- 然后二分查找確定手槍子彈數臨時地址
– 0BB86674 - 接著選中地址“找出什么改寫這個地址”,發現 mov [esi+000000CC],eax
– EAX = 00000035 - 子彈數(53)
– ESI = 0BB865A8
– 0BB865A8 + CC = 0BB86674(臨時地址) - 勾選十六進制掃描地址0BB865A8
- 最后依次判斷其4潭訓傳結果的地址(均沒有綠色基址)

第八步,依次添加7條結果,然后進行十六進制地址新掃描,

如果點擊“新的掃描”沒有反饋結果,可以直接洗掉,發現這7條內容都沒有結果,

該部分暫時失敗!
逆向其實就是反復去嘗試的程序,假設失敗是非常正常的事情,
四.逆向分析裝備型別
第一步,接著上面的程序繼續觀察,我們嘗試丟槍,看這些地址的變化情況,
- 地址19C2CD30 => 00000000
- 地址19C2CD40 => 0122DB60
- 地址19C2CD44 => 0122DB60


我們再嘗試拿取手槍,數值還原成0BB865A8,

接著再次丟槍,換成AK,并嘗試設計,發現子彈數不變,說明前面臨時變數對應手槍的子彈數,
- 地址19C2CD30 => 00000000
- 地址19C2CD40 => 19860DE0
- 地址19C2CD44 => 19860DE0


嘗試換成刀其值也對應變化,

因此我們進行簡單的備注,這個地址是手持物品,其它無關的地址我們洗掉,
- 當前手持物品1
- 當前手持物品2
- 另一個即是否持手槍的標記變數

我們嘗試把AK扔掉,發現其地址繼續變換,
- 地址19C2CD30 => 00000000
- 地址19C2CD40 => 0122DB60
- 地址19C2CD44 => 0122DB60


第三步,我們需要確定手持物品的基址,右鍵點擊“找出是什么改寫了這個地址”,

變換結果如下圖所示:

核心代碼如下,偏移地址是5E8,
- mov [esi+000005E8],edi
- ESI = 19C2C758
17171C4A - 6A 00 - push 00
17171C4C - FF 90 0C010000 - call dword ptr [eax+0000010C]
17171C52 - 89 BE E8050000 - mov [esi+000005E8],edi <<
17171C58 - 8B 17 - mov edx,[edi]
17171C5A - 8B CF - mov ecx,edi
EAX=00000000
EBX=0122DB60
ECX=19C2C758
EDX=0C2A3C54
ESI=19C2C758
EDI=0122DB60
ESP=0019F9E0
EBP=19860DE0
EIP=17171C58
將當前物品1描述為加上5E8,

同時,我們點擊手持物品2,可以看到其計數在不斷重繪,它是不斷去查詢玩家手持物品,
- mov [esi+000005EC],eax
- ESI=19C2C758

對其進行備注如下圖:
- 當前手持物品1-19C2C758+5E8
- 當前手持物品2-19C2C758+5EC

此時存在兩個偏移地址,下面介紹手動添加程序,
第四步,點擊“手動加入地址”,點擊“指標”,并輸入19C2C758+5E8+CC,
可以看到當前AK的子彈數為12,

嘗試射擊后變成了10,


我們嘗試換成手槍,發現子彈數變成了14,說明該指標對應的值為當前子彈數,
- 當前手握槍的子彈數:19C2C758+5E8+CC


五.逆向分析尋找基址并小hi愛你無限子彈
接著之前繼續,
第五步,我們繼續查詢存放該值的基址,掃描地址19C2C758,
發現仍然沒有綠色的值,說明不是我們要找的值,

先洗掉為0的值,然后繼續添加查找基址,添加進去后換一張地圖,顯示如下圖所示:

我們需要通過地圖切換來查詢是否存在對應的基址,通過丟槍、換地圖、買槍各種操作,最終保留2個可能的地址(非0),

第六步,點擊“找出什么改寫了這個地址”按鈕,然后切換地圖看其地址變化情況,

最終確定0C2A3C50地址在切換地圖時發生變化,重繪地址先清零,然后再將EAX賦值,
- mov [esi+7C],00000000
- mov [esi+7C],eax
- ESI = 0C2A3BD4

找到這個地址之后,我們通過同樣的指標方式進行確認,
- 0C2A3BD4+7c+5e8+cc

第七步,繼續查找0C2A3BD4地址,發現了3個綠色基址,

將綠色的添加進去繼續判斷,

注意,此時的三級指標地圖切換地址對應當前子彈數量,即使我們切換地圖該值仍然一一對應,


第八步,嘗試切換地圖,發現這三個綠色值仍然沒有變化,接著我們斷開連接,然后洗掉最后一個值,

洗掉基址3,如果CE斷開可以重新打開CS程式即可,

最終確認基址1和基址2應該都是正確的,
第九步,雙擊基址2的地址并復制,然后進行手動添加地址,
- 基址1:pcawwclconfig_mm.dll+10A40
- 基址2:cstrike.exe+1100ABC

第十步,通過基址添加三級指標,從而定位子彈數,
- cstrike.exe+1100ABC+7c+5e8++cc
注意該基址帶有cstrike.exe名稱,

最后鎖定該地址,對應下圖最后一行,

至此,我們無限子彈的功能成功完成,并且切換地圖和槍也是無限子彈,運行效果如下圖所示:

最重要的截圖如下所示:

六.總結
寫到這里,這篇文章就介紹完畢,本文主要通過Cheat Engine逆向分析CS1.6游戲,并實作無限子彈功能,希望您喜歡,
- 一.CS1.6游戲介紹
- 二.逆向分析子彈數對應地址
- 三.地圖變換子彈無限固定
- 四.逆向分析裝備型別
- 五.逆向分析尋找基址并小hi愛你無限子彈
同時,文章存在幾個問題需要讀者自行完善(作者也會繼續分享),
- 問題1:鎖定后敵人也是無限子彈,怎么解決呢?
- 問題2:讀者能不能用VS撰寫程式定位基址,然后能修改自己想要的子彈數量,
- 問題3:FPS游戲怎么實作穿墻、血量無敵、貓準等功能呢?
- 問題4:怎么通過OD動態除錯CS1.6游戲呢?
這篇文章中如果存在一些不足,還請海涵,作者作為網路安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章,同時非常感謝參考文獻中的安全大佬們的文章分享,深知自己很菜,得努力前行,
歡迎大家討論,是否覺得這系列文章幫助到您!任何建議都可以評論告知讀者,共勉,
2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大資料分析、網路空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的演算法實作,娜璋之家會更加系統,并重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝,

(By:Eastmount 2021-04-19 周一夜于武漢 http://blog.csdn.net/eastmount/ )
參考文獻:
[1] https://www.bilibili.com/video/BV1F4411z7Wx
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278025.html
標籤:其他
