創作內容

12 GP

以逆向加密文件從中了解加解密工作流程

作者:廢物敗類窩囊廢漢堡│2020-07-31 19:39:07│巴幣:170│人氣:848
甚麼是加密?甚麼是解密?

我想我根本不用在廢話一次

今天我是要分享自己對這些東西研究成果

我會簡化很多繁瑣過程來盡量達到易讀性

一樣先告知應有具備條件

至少看得懂組語、有能力處理IO文件、會寫程式

使用的工具 X64DBG、HXD、IDA

用來講解的檔案



首先我們看一下這張圖


這張圖用在實驗檔案上是大同小異的

我們先用X32開啟程式

喔對了它本身有簡單的防DEBUG功能


F9執行遊戲直到

像這樣
loading...顧名思義就是在載入資料,載入DATA所有的資料

所以這邊得出了一個重點,它正常在處理所有加密的文件IO

而如果你是資工生,你一定有操作過如何處理文件IO(FOPEN之類的)

所以我們點選x32功能的符號找到檔案名稱 ->右鍵->點選跟隨入口點

我們將跳到程式指定的地方


然後對其目標右鍵 -> 搜尋 - >當前模組 ->字串引用

幸運的話我們可以從字串中獲得有用的消息(這邊一定有 不然怎麼做教學)


回到剛剛的文件IO問題,當我們使用FOPEN這類功能時,它一定有一個參數必須設定


這邊講了需要檔名和重要的(((模式)))

所以我們來找找字串是否有((模式))的字串

這之前我們先用HXD打開
其中的一個檔案來看看

很明顯地告訴我們這是一個二進制文檔了(binary file)

所以fopen的模式必定是讀取二進制文檔的模式

所以我在搜尋字串的地方打上rb

變成這樣

我們可以看到一些字串是符合我們需要的,但是好像不只一個

因為我們不知道那些是在哪個時候運用的,所以我全部都下斷點(F2)
然後reload程式

F9直到下斷點的地方


這邊將是第一個觸發 fopen功能的地方

但是我們要如何知道加解密演算法的地方呢???

我無法告訴你快速取得的方法,一切都看造化

不過呢我們目前可以知道絕對是在這個位址的後面

還有這個是很久以前的東西,在安全保護方面做得很簡單

我原本是慢慢分析出來的,直到我發現他們的字串引用

"Decode"
點選第一個
到這邊我也了解到了這個程式用到一些功能會先推入字串再來做操作

所以我們打開IDA

到這個位址


IDA很好的幫我們把命名這個變數名稱

這張圖還出現了另一個自動命名的變數名稱

所以這邊跟解密演算法是89不離10了

往下拉還發現了中文字串

有意思喔(看來老外的資料是拉亞洲的資料)

拉到後面後整個不演了


發現解密演算法 0x9B0C00開始 0x09B0C20結束

我們回到X32DBG觀看

準備來分析這段程式碼的作用

在0x9B0C02的地方下斷點然後按F9讓他跑到這邊


首先我們發現了bl 會得到 byte ptr ss:[esp+24]的數據,al 則是byte ptr ds:[ecx+esi]的數據

然後再把bl的東西放到dl裡面,al的東西再覆蓋到bl,然後dl跟0x55做and邏輯

al跟0xAA做and邏輯,做完後al再跟bl做or邏輯,得到的答案就是解密的資料

而這個解密資料(al)放回byte ptr ds:[ecx+esi]裡面,ecx加一,ecx跟ebp做比較,

如果ecx大於ebp就跳出這個迴圈,如果沒有將用al的數據給bl的數據做鑰匙
這邊在簡單整理一下(虛擬碼)
-----------------------------------------------------------------------------------------------------

從中得知al是要解的數據,bl是解密的鑰匙,ebp是數據大小

我們重開隨便找一段文件資料來做實驗

ebp是數據大小所以我去找一個比較大的資料片段做實驗


這段資料大小0x0011BD5F(1162591) 長度

還有它的鑰匙是 0x2f

我們可以從ecx+esi*1 看到它的資料頭


點選資料視窗 -> ctrl + G -> 選上ecx+esi*1


看到了記憶體隨機配置的位址後

我將使用HXD拉資料

請打開HXD ->附加->開啟記憶體->點選實驗的程式


變成這樣


然後跳到你得知的位址

我這邊是0x1027C020



跳到這邊後它的資料如果你怕不正確可以自行跟x32dbg顯示的自行比對

之後請點選編輯->選擇區塊


我們得知長度是0x011BD5F

所以我先打上去了

確定後它會框起這些資料,複製起來並新增一個空白文件貼上去


儲存起來


然後撰寫解密code

然後比對一下加密文件跟解密文件

然後用自己解密的文件跟程式解密的文件做比對

底部
你會發現我的code會多一個2F

不過原因是甚麼不重要去掉就好(我是廢物敗類窩囔廢)


從這邊可以發現解密如此簡單,那加密回去呢?再這邊其實也是很簡單

這邊程式流程是向下,那我們逆向就是往上,如何往上?

首先把解密文件的資料顛倒

我這邊用python寫code


用HxD 看看文件


從第一格字母就看得出 pak變成kap了

然後再使用解密code來加密還原


看一下顛倒的解密和加密


看得出它已被加密,最後呢,再把加密的文件再顛倒回來


拿它來跟還沒做解密前取到的加密資料做比對




到這邊你可以發現我的頭端跟底端又差了一點點,

多0x7、少0x2F(不知道自己錯在哪 因為我是廢物敗類窩囔廢)

總而言之我的作法雖然不完全正確,但是不影響其中內容的差別

今天的就把研究成果都發出來了

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4867441
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 13 篇留言

真.肥宅
霸言霸語

07-31 19:41

廢物敗類窩囊廢漢堡
閉嘴噁男07-31 19:41
GAIVS MARIVS
ㄐㄐ

07-31 20:03

憂鬱肥宅
ㄐㄐ

07-31 21:04

亞修
人才

07-31 21:50

廢物敗類窩囊廢漢堡
閉嘴啦08-07 01:32
可憐啊
跟深海同學一樣才華洋溢.....

08-10 14:52

樂小呈
佬...

08-10 15:06

小戴
巴友看不懂這些啊,可以濃縮到20字嗎?

08-12 19:03

廢物敗類窩囊廢漢堡
ㄐㄐ08-17 14:12
墨玥☆海( •̀ ω •́ )
蛤?

09-14 16:20

廢物敗類窩囊廢漢堡
走開 你ㄍ臭爆ㄐㄐ09-14 17:12
驥哥
ㄐㄐ

09-29 00:24

多多綠二代目
ㄐㄐ

10-01 10:55

巴哈姆特
只看ㄉ懂最後一張圖 我有成為駭客ㄉ潛力~

10-13 09:31

永遠18歲的永恆等待
廢物廢物

12-08 21:44

♙♲⚙\~O_O~/⚙♲♙

01-27 11:36

我要留言提醒:您尚未登入,請先登入再留言

12喜歡★a891030 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:ㄐㄐ... 後一篇:原來成果都在這邊啊...

追蹤私訊切換新版閱覽

作品資料夾

Lobster0627全體巴友
大家可以多多來我的YT頻道看看哦(*´∀`)~♥https://www.youtube.com/@lobstersandwich看更多我要大聲說昨天16:18


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】