逆向學習筆記,記錄一下

學習內容:MASM + OllyDGB

在某個遊戲寫了一套自動化的流程,但開發過程借助太多人了力量。
現在想要提升效率只能把別人寫的功能轉到自己的程式裡面,否則太多意外或浪費除錯時間了。

以前只會用 Cheat Engine 找找基址、指針,放到C#裡調用,以為這樣就可以滿足需求了。

單純的紀錄一下學習的筆記,找不到什麼好的地方可以給我放這些,就放在這吧。

學習進度

2020/1/28 | 02/52
2020/1/29 | 04/52
2020/1/30 | 06/52
2020/1/31 | 09/52
2020/2/01 | 10/52
2020/2/02 | 12/52
2020/2/03 | 14/52
2020/2/04 | 16/52
2020/2/05 | 19/52
2020/2/06 | 21/52
2020/2/07 | 22/52
2020/2/08 | 23/52
2020/2/09 | 24/52
2020/2/10 | 26/52

使用教材:逆向工程實戰 Win32+遊戲逆向實戰

線上看要拉進度調有時候會卡,有點麻煩,就找了幾個方式下載。
我一開始寫了個Python去下載,但是速度慢得可以,還越來越慢。

後來找到一款軟體:唧唧Down

Jijidown

直接就可以下載了,速度很快。
如果左下角出現在更新 ffmpeg 且發現一直在轉檔MP4沒辦法下載完畢,建議你進他們的QQ群下載最新版,網站放的不一定是最新。

也可以把字幕下載下來,轉成ass檔案,就可以看彈幕了,有些網友會補充點知識還是有幫助的。

課程實作

前19課:8086理論講解
都在講 8086 CPU 的理論及組合語言的一些指令介紹,第10節課開始在玩OllyDGB了。

第20課:OllyBDG + Cheat Engine + MFC 基本操作
UP主教了做踩地雷的自動掃雷並寫成MFC軟體,但在這邊我的電腦沒有踩地雷,虛擬機裡面的Win7也沒有=      =...
課程說道,他安設了一個作業就是玩計算機的。意思也就是說,玩玩計算機也等同學會了這堂課,沒有遊樂區總有計算機了。

第22課:單機經典遊戲實戰
開始搞了植物大戰殭屍,開始學習怎麼用MFC寫輔助,比較麻煩的是英文版的沒辦法用OD開
最終弄了跟UP主一樣的簡體版,但繁體系統會亂碼,還是挺不爽的。
PS:他在找陽光的那集用OD找非常久,結果還是沒找出來,最後還是用CE去找二級指針,所以如果你也沒找到別灰心繼續看下去,反正他後面也都是用CE在找值才進OD。

第23課:nop 刪除遊戲代碼達成效果

OD裡面的代碼都是映射位置,每次開起來程式碼位置都會相同,所以如果找到關鍵的判斷語句後,把該段nop掉即可。

void 放植物無CD()
	UCHAR buf[2] = { 0 };
	if (m_plants_nocd)
	{
		buf[0] = 0x90;
		buf[1] = 0x90;
	}
	else
	{
		buf[0] = 0x7E;
		buf[1] = 0x14;
	}

	//注意這邊的Sizeof,改的是Buf所以要用Buf,否則報錯
	if (!::WriteProcessMemory(hProcess, (LPVOID)0x487296, &buf, sizeof(buf), NULL))
	{
		MessageBox(_T("寫入數據失敗"), NULL, 0);
		CloseHandle(hProcess);
		return;
	}
	CloseHandle(hProcess);
	UpdateData(FALSE);

第24課:攻擊速度分析思路、調用Call放植物

攻擊速度分析思路

大嘴花的攻擊速度,用未知的值去找,吞了一個候會進入攻擊冷卻時間,此時應該有個計時器一直在變動,到最後會找到一個遞減的值,找到後去看誰訪問了他。

冷卻記憶體位置:124353EC

EDI=12435398

0046323E - mov eax,edi
00463240 - call 00464820
00463245 - mov eax,[edi+54]
00463248 - test eax,eax

此時進入OD,直接 Ctrl+G 到 00463245 段去分析
但發現在這段把它 nop 掉沒有效果

dd 124353EC 下訪問斷點,看看還有誰經過了它。

在 00461561 段,發現有一個 cmp 比較,比較完就 jne 跳轉,這段很久可能是在判斷冷卻時間。


把 00461565 nop 掉。

發現就可以狂吞猛吞了

在彈幕看到,有人問:「可不可以把碗豆射手,改成碗豆機關槍啊?」"

我也好奇,用了同樣手法去找,不太好找,不知道為什麼一直找失敗,不過最終找到
技能冷卻減1

0045F8A9  |.  8346 58 FF    add dword ptr ds:[esi+0x58],-0x1

攻擊速度

0045F8BF  |.  8B4E 5C       mov ecx,dword ptr ds:[esi+0x5C]
改成以下可達到攻速加快效果,低於22會不攻擊(參考網路)
0045F8BF      B9 22000000   mov ecx,0x22
-----------------------------------------------
程式編寫
	UCHAR buf[5] = { 0 };
	if (m_Peashooter_atkspeed) //CheckBox 為 True
	{
		buf[0] = 0xB9;
		buf[1] = 0x22;
		buf[2] = 0x00;
		buf[3] = 0x00;
		buf[4] = 0x00;

	}
	else
	{
		buf[0] = 0x8B;
		buf[1] = 0x4E;
		buf[2] = 0x5C;
		buf[3] = 0x2B;
		buf[4] = 0xC8;
	}

如果把第一個【jnz 0045F935】nop 會導致不攻擊,第二個 nop 則會加快一點

0045F920  |. /75 13         jnz short PlantsVs.0045F935
0045F922  |. |837E 24 2B    cmp dword ptr ds:[esi+0x24],0x2B
0045F926  |. |75 0D         jnz short PlantsVs.0045F935
0045F928  |. |8B46 1C       mov eax,dword ptr ds:[esi+0x1C]          ;  PlantsVs.0043467D

調用 Call 放植物

透過按下、彈起植物找值,可以找到植物的ID
看誰訪問了它,要找放下植物時他訪問了誰,所以要把植物放下去才會出現關鍵的訪問斷點

00410A91  |.  8B40 28       mov eax,dword ptr ds:[eax+0x28]
00410A94  |.  52            push edx //固定-1
00410A95  |.  50            push eax //植物ID
00410A96  |.  8B4424 20     mov eax,dword ptr ss:[esp+0x20] //座標X [0-5]
00410A9A  |.  57            push edi //座標Y [0-8]
00410A9B  |.  55            push ebp //
00410A9C  |.  E8 7FC6FFFF   call PlantsVs.0040D120

注入代碼調試

push -1
push 2
mov eax,3
push 8
push 0694AF60 //ebp 每場都不一樣
call 0040D120

可以注入成功,但是ebp每場都會不一樣,要找到他的偏移位置
用CE HEX找到訪問數據後,回OD找代碼段,反覆查找後得到偏移,最後結果如下

push -1
push 2
mov eax,3
push 8
mov ebx,[6A9EC0]
mov ebx,[ebx+768]
push ebx
call 0040D120
第25課:在MFC上寫調用CALL語句
媽了個臭逼,寫好了但不能用,沒心情寫心得了。
按讚

發佈留言

電子郵件地址不會被公開。必填項已用 * 標註