iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Security

我逆向你逆向我的逆向工程膩系列 第 16

Dx16 - 內嵌代碼補丁製作 - 製作篇

  • 分享至 

  • xImage
  •  

本篇使用檔案與成果位於
https://github.com/Dinlon5566/IT_Reverse_Engineering/tree/main/Dx16

根據上一篇的解析後,大家對於破解程式的解有了一些想法了吧,那我們就來解吧 !

想法

對了,也是可以直接竄改字串的值為目標的 XOR 44 XOR 11,然後再改 Check Sum 的校對值,但這樣太粗暴了,我們還是建一個代碼補丁好了。

首先,我們要建一個 code cave,那要放在哪邊呢?

  • 區塊後的空白區域
  • 拓展到最後 Section 放
  • 新的Section來放

https://ithelp.ithome.com.tw/upload/images/20220930/201356750Hguw8cLyV.png

補丁的量比較少時,書中推薦使用方法 1 ;其他使用 2 與 3 的方法較好。

那這次就使用方法一,先看看位置要設在哪裡吧。

首先,看到第一個 section

https://ithelp.ithome.com.tw/upload/images/20220930/201356755puYBpxzFq.png

透過觀察其重要數值

  • virtual size : 280
  • RVA ( Address ) : 1000
  • sizeofRawData : 400

另外配上

https://ithelp.ithome.com.tw/upload/images/20220930/20135675dfQ9k3bxjr.png

得出這個區塊在資料上佔了 400 byte,其中只有 280 byte 被使用到,而沒使用到的區域就是我們要佔據的未使用區域。( 實際上區塊經過對齊後有 1000 的空間 )

確認要把 cave code 設定的位置,才能讓跳躍成功降落。

看看上面的 address + sizeofRawData1000+280 = 1280,跳到該位置 :

https://ithelp.ithome.com.tw/upload/images/20220930/20135675z7nHfqYmIG.png

一整片零,看來是很好的設置位置,就決定把大門設在 00401280

那我們要做的目標就是將那兩個字串修改成別的。直接在資料上修改被加密過後的字串位置是不行的( 這次該用 code cave )。那先修改原本 jmpOEP 的那個區塊紀錄跳躍點位置 401083

https://ithelp.ithome.com.tw/upload/images/20220930/201356752BmDqungao.png

因為需要修改它,所以要找出他在被加密流程中被加密了幾次,00401083 是屬於在第一個加密區塊( 4010F5 ~ 401248 )。所以可以得知他的資料是經過了 XOR 7 才變成現在的指令。

查看原文件,看到 .text + 83 就是存加密 JMP OEP 的地方。(401083 - 40000 - 1000 + 400 )

https://ithelp.ithome.com.tw/upload/images/20220930/20135675ulsJbOeNbE.png

那要把原本的指令修改成 jmp 00401280 還得通過解密要甚麼做呢 ?

答案就是想把原本的指令經過 XOR 一樣的數字,再次 XOR 時就會變回來了。

https://ithelp.ithome.com.tw/upload/images/20220930/20135675kGlqepnDaP.png

目標是 401280,所以改成 EE FF 06

https://ithelp.ithome.com.tw/upload/images/20220930/20135675nIke0oB8Gx.png

之後就可以然後開始寫 code cave,從 401280 開始 :

因為這邊的代碼每個人都會不一樣,以下是個人寫的 code cave

https://ithelp.ithome.com.tw/upload/images/20220930/20135675xvETUL8QPQ.png

  1. 首先 pushad 把暫存器的值存起來
  2. ECX 存字串長度
  3. ESI 移入要改的來源字串位置 ( 寫在下面空間 )

https://ithelp.ithome.com.tw/upload/images/20220930/20135675AtpfiALEYz.png

  1. EDI 放入被改的字串位置 ( 可以用在解密後用引用字串查位置 )

https://ithelp.ithome.com.tw/upload/images/20220930/20135675LaznHGn3gv.png

  1. 重複 ECX 次轉移字元
  2. 重複 2~5 這樣把三個字串都改了
  3. 之後 popad 後就跳回 OEP

把修改的 binary 檔案貼到檔案裡形成 Code Cave Patch

https://ithelp.ithome.com.tw/upload/images/20220930/20135675yon41HNW0t.png

執行看看 :

https://ithelp.ithome.com.tw/upload/images/20220930/20135675tiMDDjP30R.png

成功了 ! 好耶 !

在理解這些技術之後,就要進入 DLL 注入的篇章。感謝各位能陪我到這邊,我們之後繼續加油吧 !


上一篇
Dx15 - 內嵌代碼補丁製作 - 分析篇
下一篇
Dx17 - Hook : 勾走你的鍵盤
系列文
我逆向你逆向我的逆向工程膩31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言