iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
Security

一起資安入門 -- picoCTF 探索與解題系列 第 27

[2021鐵人賽 Day27] Reverse Engineering 逆向工程 01

  • 引言
    今天來解逆向工程的題目吧!
    逆向工程 聽起來好像很厲害,但其實就是一種過程而已。

    [維基百科: 逆向工程]
    逆向工程(Reverse Engineering),又稱反向工程,是一種技術過程,即對一專案標產品進行逆向分析及研究,從而演繹並得出該產品的處理流程、組織結構、功能效能規格等設計要素,以製作出功能相近,但又不完全一樣的產品。

    對市面上軟體的深入分析後再設法重造,也算是一種逆向工程。
    這主題的題目會提供一些結果給你 (檔案等) ,請你設法從中找出正常使用下或許無法取得的資訊。
    一個最好理解的例子是:拿到二進位檔,設法取得某程式碼區塊的資訊,或是某某變數的值等。

  • Reverse Engineering / Transformation
    https://ithelp.ithome.com.tw/upload/images/20211012/20111429qBZE8I9npB.png
    這題看起來跟編碼有關,因為它除了提供了一個叫做 enc 的檔案外,
    也提供了一段 Python code ,能看到程式碼中有 chrord 等熟悉語法,
    這兩者正是用來做字串編碼轉換用途的。

    分析完題目,我們先把 enc 下載下來看看:

    灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸強㕤㐸㤸扽
    

    很好,這就是我們玩遊戲或是使用國外軟體時常遇到的亂碼對吧!
    這邊也可以來學習一點小知識,其實所謂的亂碼,就是編碼不對的問題罷了。
    世界上所有的編碼,包括 UTF-8, ASCII, BIG5 等等常看到的編碼,
    最後都是轉換成 01010101... ,因為電腦也只看得懂 0101 對吧?
    所以你可以試想一個情境:


    假設 apple 這個字的 UTF-8 編碼是 01010000 (純粹假設,並不是這個編碼) ,
    今天如果寫信的人他使用 UTF-8 編碼規則,寫了一個 apple 並編成 UTF-8 ,
    最後送到你手裡,因此你會收到 01010000 這個編碼後的資料。

    然後你搞錯對方的編碼方式,你用 ASCII 來解碼這個訊息,
    01010000 剛好是 P 的 ASCII code ,所以這封信意思就變成 P

    從頭到尾,信件內容 (01010000) 都沒變,變的是你們雙方的編碼方式。


    所以亂碼其實就是雙方編碼不同造成的誤會,
    日本人寫的遊戲中的文字編碼可能是 Shift_JIS 這個編碼,
    拿到你的電腦來可能用 BIG5 解碼,當然就是一堆亂碼囉。

    所以才會有萬國碼的存在,讓各種語言都可以統一成一種編碼來表示。

    回到題目,提示說你可以到網路上找找解碼器,但是我們並不知道這個亂碼本來的編碼是什麼。
    所以我先找到一個多功能編碼器:
    https://string-functions.com/encodedecode.aspx
    它可以解編碼許多不同的編碼方式,這時候就只能猜了。

    但是並不是瞎猜,還記得題目有給一段 Python 程式對吧,
    可以看到它將 flag 字串每個字元編碼往左邊移八位 (位元運算) ,
    然後加上該字元的右邊字元的編碼,最後再編成新字元。

    講起來很複雜,其實就是將兩個字元編成一個字元的概念,
    UTF-8 是很常使用的編碼,我們先猜測原本是用 UTF-8 來撰寫訊息的,
    那麼兩個八位元的字元組合成一個十六位元的字元,合理猜測有可能是 UTF-16 !

    所以我們將亂碼丟到轉換器中,選擇 UTF-16 轉 UTF-8 :
    https://ithelp.ithome.com.tw/upload/images/20211012/20111429GkGjAvUce8.png
    哦?結果看起來不是亂碼了,非常像 flag 形式,但又不是...

    觀察後發現兩兩一組的話,每一組都前後顛倒了,
    難道編碼還是錯誤?

    打開轉換的選單:
    https://ithelp.ithome.com.tw/upload/images/20211012/20111429FAbJf9KL4d.png
    還有另一種 UTF-16 ?
    改成這個以後:
    https://ithelp.ithome.com.tw/upload/images/20211012/20111429GRxcNKF30I.png
    成功找到 flag !

    p.s: UTF-16 有分成 Big Endian 以及 Little Endian (位元組順序) ,
    這題剛好是需要 BE (Big Endian) 的版本。


上一篇
[2021鐵人賽 Day26] Web Exploitation Web滲透題目 02
下一篇
[2021鐵人賽 Day28] Binary Exploitation (Pwn) 介紹工具
系列文
一起資安入門 -- picoCTF 探索與解題30

尚未有邦友留言

立即登入留言