2020年12月31日 星期四

109年金盾決賽 - Android reverse engineering (咖啡機IOT)

今年的金盾獎決賽有增加特殊的題型,例如IOT (Internet of Things)和教學題,其中IOT需要與設備互動來藉此解題。此篇的題型是要連線到咖啡機,然後透過逆向分析獲取藍芽密碼,並且泡上一杯咖啡,即可獲取Flag。在決賽時,並不是每隊都能解到IOT的題目,因此在這裡提供咖啡機IOT的題目給各位,不過並沒有提供實體設備,只要解出藍芽密碼即可。

2020年12月21日 星期一

109年金盾決賽 - Format string attack

今年的金盾獎決賽有增加特殊的題型,例如IOT (Internet of Things)和教學題,其中教學題的目的在於有參與決賽的學生,如果解不出此題型,可以直接點選詳解,就會顯示完整的解題步驟,達到教學的宗旨。此題的教學題,是要利用Format string attack的技巧來獲取flag,難度差不多是介於中間偏簡單,如果沒有解出此題的同學,還可以再挑戰看看,亦或想要多了解金盾獎決賽題型的方向,也可以研究一下。

2020年11月10日 星期二

Android Unity - Code injection

之前的篇章有提到Unity程式碼的修改,不過僅限於修改已存在的程式碼,這樣靈活性就會非常的差,因為如果要增加自己的程式碼到Unity裡面,以現行的做法是行不通的,接下來要介紹如何在Unity程式碼裡面,插入一段自己的程式碼,來改變程式運行的結果

2020年11月1日 星期日

Android Unity - 修改遊戲程式碼

Unity是跨平台的遊戲引擎,平台支援包括Windows、Linux、MAC、IOS、Android等等,那麼此篇會介紹如何修改Android平台上的Unity遊戲,讓各位了解,在沒有任何的防護裝置(Packer、Obfuscator-LLVM等等)的情況下是非常容易竄改程式碼。

2020年10月26日 星期一

Windows 7 x86 - Hooking SSDT

之前的篇章已經有說明什麼是SSDT(System Service Descriptor Table),接下來我們要做更有趣的事情。此篇的主要目的是要攔劫(Hooking)OpenProcess,然後讓計算機程式(calc.exe)運行不起來,並且回傳存取失敗,最後實現控制OpenProcess的存取限制。

2020年9月18日 星期五

Windows 7 x86 驅動程式編譯

一般在Windows平台上,可能比較少會遇到驅動層級的惡意程式,不過如果遇到了,我們也要知道如何分析它,那麼需要知道驅動程式是如何編譯以及運行它在系統上,因此這篇教學是傾向於如何編譯Windows驅動程式,然後將它運行到記憶體上。

2020年9月3日 星期四

Windows SSDT(System Service Descriptor Table)簡單介紹

SSDT(System Service Descriptor Table)是Windows kernel非常重要的結構,一般應用層(Application layer)在調用API時,會透過DLL(Dynamic-link library)來完成它,不過最後還是必須要讓核心層(Kernel layer)的API來實作,因此會使用INT 0x2E中斷指令來調用SSDT裡面的API,所以這樣就能不讓應用層接觸到核心層的記憶體又能告訴核心層來完成此功能的運作,接下來我們就來分析SSDT的架構。

2020年8月24日 星期一

Windows 7 x86 kernel debugging

研究作業系統除了一些基礎知識可以透過網路文獻或者書本上的訊息來得知,我們也可以利用動態分析的技巧來了解它的運作行為,因此需要Debugger的工具來協助我們分析作業系統。本篇會使用VMware安裝Windows 7 x86,並且利用VirtualKD建立Debugger的橋樑,再透過windbg來Debug作業系統,我們之所以會使用VirtualKD是因為建置環境比較方便並且分析時會比較順暢,在運行單步執行的途中不會卡卡的。

2020年8月6日 星期四

AssaultCube - 修改無限子彈

AssaultCube是一款第一人稱射擊遊戲(First-person shooter),它可以選擇單機跟AI(Artificial intelligence)對戰,也可以連到網路與其他玩家對戰。此篇的主要目的為如何透過Cheat Engine來分析記憶體資訊,進而找出遞減子彈的程式碼,我們可以將此程式碼修改成NOP(無任何意義的指令),這樣就能完成無限子彈的效果,雖然難度不高,但是也是能增加遊戲分析的經驗。

2020年7月27日 星期一

Format string attack

Format string (格式化字串)是程式的API (printf、snprintf 、puts等等)指定輸出參數的格式與相對位置的字串參數,例如%d、%x、%f和%s等等,都是代表在輸出參數上顯示什麼樣的數值格式。

2020年7月18日 星期六

大富翁6 - Cheat Engine修改遊戲金幣

遊戲外掛的製作,也許是非常多人感到有興趣的議題,不過這些技術大多數的新手並不知道要怎樣入門,因此此篇就透過Cheat Engine工具來實作修改遊戲的記憶體,這也是非常簡單的作法,任何新手都可以一步一步的來完成修改遊戲記憶體的實作。

2020年7月2日 星期四

劍靈(Blade & Soul) 逆向分析研究 - 自動打怪Bot

經過一系列的逆向分析,我們能從遊戲裡獲取相關的資訊,並且利用它們原生的功能來實踐我們的自動化過程,因此將之前撰寫的每個功能整合起來,就是一個簡易的自動打怪的系統,那麼如果想要讓此系統更豐富完整,還需要分析更多的運作資訊(與NPC交易、換裝備等等),那麼分析方法,都跟之前一樣,因此想要完成腳本的功能,也不是什麼問題了。

劍靈(Blade & Soul) 逆向分析研究 - 自動移動到NPC

在分析完遊戲的坐標系統以及障礙物的相關資訊,我們接下來要撰寫路徑搜尋的程式,因此需要使用路徑相關的演算法。可能大部分沒有接觸這塊領域的同學,也許不知道要使用什麼路徑演算法,我們可以效法遊戲公司最常使用的路徑搜尋,那個演算法就是A*路徑演算法,A*在網路上已經有相當多的現成程式碼,因此我們只要稍微修改一下,就能符合我們需要的功能了。

2020年7月1日 星期三

簡易繞過Anti-Debugger技巧

現今已有非常多的軟體會使用Anti-Debugger的技術來規避軟體被反編譯,因為如果不規避,可能會讓軟體被破解,造成公司的損失,然而惡意程式也會學習這些商業軟體的Anti-Debugger技術,如果並不熟悉這些技術,是非常困難繞過,因此我會推薦一些工具來簡單的繞過Anti-Debugger,不過並不是可以將全部的Anti-Debugger都能繞過,它的成功率大約在70%-80%左右,像是Integrity check和Debug API hooking等等,都沒辦法繞過,只能透過Try and error來分析它是如何檢測Debugger。

2020年6月30日 星期二

劍靈(Blade & Soul) 逆向分析研究 - 人物移動方向計算

人物在移動時,如果遇到轉彎,需要讓它識別什麼時候是左轉、右轉或是往後移動,所以我們需要分析人物在移動到下一個坐標前,它的移動方向是哪裡。

2020年6月16日 星期二

劍靈(Blade & Soul) 逆向分析研究 - 坐標系統分析

在設計Bot之前,分析遊戲裡面的坐標系統是非常重要的,因為在尋路的過程我們需要坐標的轉換,以利我們在二維坐標的障礙物偵測,不過有些障礙物只能透過三維坐標來偵測障礙物,因此需要了解整個遊戲的坐標系統的轉換才能繼續開發我們的Bot程式。

2020年6月15日 星期一

調用外部程序函式技巧

程式設計對於一個有著資訊工程基礎的人,可能不會太困難,但是有些技巧在學習程式設計卻永遠學習不了,這方面的知識需要透過額外學習系統相關的資訊,才會了解,原來可以這麼做,因此這篇的主題是關於如何調用外部程序(Process)的函式(Function),這種技術通常會使用在惡意程式或遊戲外掛上面,惡意程式是為了隱藏自己而附著在外部程序之下;遊戲外掛是為了要蒐集遊戲的資訊以及調用遊戲中的函式,所以我們來探討一下要如何做到這種技術。

2020年4月30日 星期四

CLR C++ 逆向分析技巧

之前幾篇有教學如何逆向分析.Net Framework的程式,不過是關於C#的程式,因此這篇就換分析CLR C++,它也是.Net Framework家族的成員,由於方便開發惡意程式,所以我們也要學會加殼的CLR C++要如何分析。

2020年4月24日 星期五

淺談DNGuard解殼演算法

DNGuard是一款針對.Net Framework程式的商用加殼軟體,許多惡意程式會使用它來保護程式,以免被別人反編譯,如果想要知道程式是如何運作,我們需要了解DNGuard是如何在運行時解殼,這樣我們也可以學習還原本來的程式碼,不過這篇還是聚焦在它的解密演算法,因為要還原本來的程式碼還需要更進一步了解.Net Framework編譯的原理和.Net執行檔的架構,所以我們就不探討這部分。

2020年4月23日 星期四

劍靈(Blade & Soul) 逆向分析研究 - 障礙物分析

在路徑規劃前,我們需要知道附近的所有障礙物,這樣才不會被障礙物卡住,因此這篇會介紹如何分析遊戲中的障礙物資訊。

2020年4月9日 星期四

C#逆向分析技巧

C#是Windows提供給開發商撰寫軟體的程式語言,那麼駭客也有可能會使用此語言來開發惡意程式,所以我們需要知道要如何分析它。大部分的資安人員在分析.NET Framework的程式,通常都會使用.NET Reflector或dotPeek等等的靜態分析工具,如果程式有透過加殼軟體來加殼主程式,靜態分析是完全沒用的,因為主要程式碼都被加密或壓縮,所以我們這篇是要克服這種情況,進而騷擾加殼程式。

2020年3月26日 星期四

Windows Keylogger逆向分析

在惡意程式當中,最常見的行為是木馬/後門,接下來就是鍵盤側錄(Keylogger),因此我們這篇就要來研究它是如何運作的,雖然在技術上並沒有特別困難,不過想要入門惡意程式逆向分析的同學,會是不錯的選擇。

2020年3月12日 星期四

DLL逆向分析技巧

DLL(Dynamic-Link Library)是動態連結函式庫,主要是將程式碼模組化,並提供外部函式給主程式使用,不過惡意程式往往也有可能是透過DLL來與駭客中繼站通訊。資安工程師在分析惡意程式有時可能只有DLL本身,原來的中介程式已經找不到了,接下來的篇章是介紹去運行單獨一個DLL檔案,然後分析它。

2020年2月29日 星期六

劍靈(Blade & Soul) 逆向分析研究 - 人物移動分析

在路徑規劃之前,我們要知道如何讓遊戲的人物自己移動,因此我們需要分析出,遊戲是透過哪個函式來移動人物。

2020年2月28日 星期五

劍靈(Blade & Soul) 逆向分析研究 - 調用技能分析

在攻擊怪物時,我們可能需要使用技能來幫助我們來提升打怪的效率,因此這個篇章是分析如何調用技能來幫助我們打擊怪物。

2020年2月20日 星期四

Fiddler on Android

在滲透Android平台上的APP,不僅會逆向分析Client端的APP,也會利用Fiddler來監控APP傳送HTTPS的訊息,並且分析它與Server的通訊協定,這樣才能試著攻擊Server是否有其它的弱點。

2020年2月6日 星期四

HTTPS Interception by Fiddler

以前在滲透廠商的軟體都是用MitmProxy這套工具,它可以解出HTTPS的密文,這樣就能分析HTTPS裡面的封包內容,並且任意修改數值後,再回傳給伺服器,這樣就能簡易的測試遠端是否有做好安全的防護。

2020年1月21日 星期二

Android 動態解殼研究(三) - 動態解殼

在探討Dex(Dalvik Executable)檔案格式和加殼的方式之後,我們接下來是此篇的主菜,是關於Dex加殼後並自動化的提取解殼程式碼,這樣可以有效的節省人工分析的時間,那我們廢話不多說,直接進入主題。

2020年1月20日 星期一

Android 動態解殼研究(二) - 加殼研究

接下來是探討Android平台上有那些加殼(Packer)的方式,藉此知道它們的加殼原理,以便我們能夠透過自動化的方式將它解殼回來。

2020年1月2日 星期四

Android 動態解殼研究(一) - Dex檔案格式探討

隨者科技的演變,Android平台上的惡意程式也越來越進步了,為了防止資安研究員分析它的行為,會將Dex(Dalvik Executable)檔案加殼(Packer),這樣想要知道它運作了那些行為,在靜態分析會非常之困難,因此這次我們聚焦在如何快速的動態解殼。