Feeds:
文章
留言

Archive for the ‘程式設計’ Category

話說有天小孩偷偷裝了一個 crazy dino park 再玩, 很好奇這個遊戲有什麼魅力, 於是手機也裝了一個來玩, 體驗過後發現遊戲真的設計不錯, 畫風也相當討喜, 只是免不了課金或需要耗費大量時間, 於是想動手調一下, 結果打開來看就傻啦, 雖然是 Unity 開發的遊戲, 不過目前已經進化到使用 il2cpp, 說白話點就是將 .NET IL Code 轉成 C++ 代碼後編譯成機械碼….

所以如果要調整遊戲邏輯必須要改機械碼, 而我的小米使用 ARM64(v8a) 指令集, 只好重頭了解指令集… 漫長之路

想要分析修改機械碼網路上大推IDA+KeyPatch, 所以還要學習這個工具…漫長之路

基礎學習完成之後, 接下來就可以直接分析 libilcpp.so, 但是直接看很難找到修改點, 還好網路上有大大開發了 il2cppdumper, 可還原 C# 的符號,表, 所以找修改點可以用 dnspy+IDA分析容易許多

學習了上述基礎之後基本上就可以順利修改這類遊戲, 不過我覺得最難的還是找到修改點…. 畢竟 IDA 產生的偽代碼還是沒有原生地 C# 好看

以下是我修改後的成果

 

Read Full Post »

今天被 Google Play 推薦了"魔女的迷宮“, 試玩之後發現還挺有趣, 不過難度還真高…. 40 層, 而且等級還不能累積…. 所以只能動點手腳快速玩一遍, 順便複習一下 .NET IL

 

其他截圖

 

 

Read Full Post »

radare2 初體驗

今天上了 KaLUG 的 radare2 課程覺得相當有趣, 決定動手試玩一下, 雖然課程示範是針對 Linux ELF 格式, 但radare2 有 Windows 版本也支援 PE 格式, 就來試玩一下如何跳過簡單的 if 條件

首先一個簡單的範例程式

gcc a.c

預期的執行

如果想 patch 成輸入任何值都要輸出 hello 該怎麼做呢

copy a.exe a-m.exe

radare2.exe -w a-m.exe

移動到 main

先用 aaaa 分析程式, 然後執行 pdf, 紅框處就是比對密碼

其中 0x004015f5 位置就是比對失敗後執行動作, 所以把該行改為 nop 忽略跳耀

驗證執行結果

比較檔案差異

Read Full Post »

Windows 還不支援, Centos7 上試玩

測試代碼

執行

執行結果

還蠻有趣的… 持續關注中…

 

 

 

Read Full Post »

PHP7.2+Adodb Session Error

今天裝 PHP 7.2 遇到 “ini_set(): Cannot set ‘user’ save handler by ini_set() or session_module_name()" 錯誤, 依據[1] 描述將出問題的

session_module_name(‘user’);

註解掉即可…

 

參考資料

[1] PHP 7.2 & session save handler. ‧ Issue #2783 ‧ symphonycms/symphony-2

Read Full Post »

久久用一次都會忘記, 寫個快速入門筆記給未來的自己參考

1. 產生, mvn -B archetype:generate -DgroupId=com.chuiwenchiu -DartifactId=helloApp
2. 編譯, mvn compile
3. 測試, mvn test
4. 執行, mvn exec:java -Dexec.mainClass="com.chuiwenchiu.App"
5. 打包 jar, mvn package
6. 測試 jar, java -cp target\helloApp-1.0-SNAPSHOT.jar com.chuiwenchiu.App

 

Read Full Post »

今天處理了一個 .netz 處理過的可執行檔, 依據 [1] 描述資料儲存在 .exe 的 resource 中, 執行階段再從 resource 讀出解壓縮最後從記憶體載入 Assembly

所以簡單的做法就是將解完的資料重導向檔案即可取得原始 dll

終於有機會試試 dnSpy 的鋒利, 步驟如下

1. dnspy 載入 .netz 處理過的 exe

2. 將 resource 的 zip.dll 匯出檔案

3. dnspy 載入 zip.dll

4. 修改 .exe 的 netz.NetzStarter.GetAssembly (加上紅色程式碼)

private static Assembly GetAssembly(byte[] data)
{
	MemoryStream memoryStream = null;
	Assembly result = null;
	try
	{
		memoryStream = NetzStarter.UnZip(data);
		memoryStream.Seek(0L, SeekOrigin.Begin);
		result = Assembly.Load(memoryStream.ToArray());
		memoryStream.Seek(0L, SeekOrigin.Begin);
		FileStream fileStream = File.Create("d:\\" + Guid.NewGuid().ToString("N") + ".dll");
		memoryStream.CopyTo(fileStream);
		fileStream.Close();
	}
	finally
	{
		if (memoryStream != null)
		{
			memoryStream.Close();
		}
		memoryStream = null;
	}
	return result;
}

5. 編譯 & 執行

6. d:\*.dll 就是原來的 dll

 

參考資料

[1] 藍色的飄漂, 反編譯 .NETZ 壓縮過的exe程序"

Read Full Post »

Older Posts »