吾愛破解 - LCG - LSG |安卓破解|病毒分析|huihengkj.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 2763|回復: 47

[原創] Safengine Shielden v2.40 IAT修復及腳本編寫(x64dbg)

  [復制鏈接]
樓主
Lixinist 發表于 2020-7-29 11:25 回帖獎勵
前言:
首先感謝L4nce前輩寫的“淺談Safengine系列脫殼”,給了我很大幫助,讓我開始入門脫加密殼。
L4nce的這篇文章已經算是“巨人的肩膀”了,但我覺得仍有一些東西可以細寫。由于是自己第一次研究脫殼寫腳本,沒有人指點,錯誤紕漏處還請指正包涵沒看文章的務必先看看這篇文章 。其在 “淺談Safengine系列脫殼”已經談及的東西,這里就不細談了,一筆帶過。
地址:淺談Safengine系列脫殼



環境:
x64dbg(2020-7-29)及其SharpOD插件。x64dbg設置單字節斷點(int3),建議win7系統


正文:
到這里,我就假設大家已經看完L4nce的文章了。接下來我想談一些他文章中沒有寫到或者寫全的東西,以及一些我的“奇妙旅途”


關于研究脫殼寫腳本,我是先從簡單程序(只有幾個API調用的匯編程序)入手,分析調用iat的代碼有什么特征和功能,然后寫個簡易腳本,測試脫殼成功了。再用相對復雜程序(易語言靜態編譯程序)測試腳本并完善修改。
這個方法在我看來或許比較耗時,但可以逐步解決難關,避免在莫名其妙的問題上“卡關”。

再來談談SE的IAT加密。。。剛開始按照L4nce的思路寫腳本,最后測試脫殼什么的都成功了。。。直到我√上了“使用散列API函數名稱”再測試脫殼,就失效了。分析看了一下,不再走獲得API地址的add edi,eax這條路了。這樣就只能另辟蹊徑獲得API地址這逼的我重新分析兩種情況下call sedata_section的流程,以圖尋找共同點和突破點。

一般來說,為了程序的速度,殼對原程序的iat調用的加密不會多厲害,最多是在第一次跑的時候跑的久一點,之后調用都是馬上取得目標地址,調用API或者對寄存器賦值API地址。這一點,我認為不僅適用于se,也適用于其他加密殼,照著這個想法找下去,總能找到希望。最終我找到了一個點:push xxxxxx se在虛擬機中獲取到目標(API)地址后會將其修改成push 目標地址。由此我修改了腳本流程:

1.找 call sedata_section

2.步進跟蹤找push xxxxxx和cmp dword ptr ss:[esp+0x4],0

3.對push的立即數下硬件寫入斷點,以此來獲得目標(API)地址

4.判斷調用IAT的類型,做出修復

在第4點上,L4nce說了大部分情況,但有些特殊情況沒有細說了。我在此把相關情況列一下:

常見:
1.call dword ptr [iat]
2.jmp dword ptr [iat]

3.mov reg,dword ptr [iat]
   call reg

少見:
4.call @ jmp dword ptr [iat]
   jmp dword ptr [iat]

第4種情況的call,在加殼的時候有時候會加密,有時候不會(但其調用的 jmp dword ptr [iat] 是一定會加密的)。既然這樣,就一律按加密的情況來考慮。接下來是判斷調用IAT的類型。在l4nce方法的基礎上,我做了一些較大的變動。方法如下:
1.分別對 call sedata_section+5call sedata_section+6這兩處可能的返回地址下單字節斷點(int3)


2.判斷獲取到的目標(API)地址所處地址是否大于殼區段,以此判斷是否是Mov_Reg類型或者其他IAT調用類型



其他IAT調用類型 (shadow已破)


3.1如果是 Mov_Reg類型,直接run,停在返回地址后,依次判斷哪個寄存器參與了調用。
3.2如果是其他IAT調用的類型,先對其API地址下硬件執行斷點再run,此時EIP停在API領空,判斷[esp]是否與 call sedata_section+5或者 call sedata_section+6相等,或者都不相等。


4.1如果與 call sedata_section+6相等,則是 call dword ptr [iat]
4.2如果與 call sedata_section+5相等,則是
       call @ jmp dword ptr [iat]
       jmp dword ptr [iat]
   中的call
4.3如果都不相等,則是 jmp dword ptr [iat]


至此,IAT的調用類型就判斷完了,然后按照各自情況修復就可以了,可以直接參考腳本。特殊API如CreateThread不會填充push xxxxxx,手動修復即可




“寫腳本的奇妙旅途”:
寫x64dbg腳本,還真是發生了不少“奇妙事件”。有些解決了,有些只能回避掉。

1.單步步入(sti)無效:
在把EIP設置到call上后,第一次sti有一定幾率停在原地不動

2.跑腳本時奇奇怪怪的異常崩潰:
也是把EIP設置到call上后,步進追蹤可能崩潰,可能出現異常訪問(偏偏手動單步執行腳本就不會出現,換個系統也有可能不會再出現)。遇到這種情況,只能把地址加入ignore表,到時候手動修復。所幸這都是少數,一般就3個左右

3.跑腳本跑得x64dbg崩潰:
這個還好,跑腳本前把GUI更新關閉,堆棧更新關閉,日志更新關閉即可。出現特殊情況了,再解開GUI更新,分析情況。

4.call壓入錯誤返回地址:
這個是最奇妙的。把EIP設置到call上后,第一次步進,,有幾率出現壓入錯誤的返回地址的現象!只能重新把EIP設置在call上,把之前的返回地址清0,再步進跟蹤一次,就不會再出現了。





尾聲:
脫殼時建議選擇win7環境(xp貌似用不了x64dbg),win10下脫出來的易語言靜態編譯程序 (其他語言程序沒問題) ,在其他平臺運行不了。只有win7脫下來的正常運行在其他平臺(暫時只測試了xp,win7,win10)腳本我寫了比較多的注釋,放上來供大家參考。至于特殊情況的判斷和修復,相信對有心學習的人來說不是難事,對伸手黨倒是難事。
(由于本文只探討IAT的修復,所以練手例子沒有檢測線程干擾。尋找OEP和過檢測線程的文章,看雪和吾愛有很多)
(為了方便,我將例子的OEP45e53d的下一行45e53e改成了jmp 0x45e53e,跑起來后,在45e53e下斷停住,即可開始修復IAT)



附件超過了3MB,放不上來,只能放個地址
附件地址:http://wwa.lanzous.com/isvgTf37l5g

SE2.4修復腳本及例子.zip

4.45 MB, 下載次數: 66, 下載積分: 吾愛幣 -1 CB

免費評分

參與人數 34吾愛幣 +36 熱心值 +29 收起 理由
fengbolee + 1 + 1 謝謝@Thanks!
小馬過河007 + 1 我很贊同!
poisonbcat + 1 + 1 謝謝@Thanks!
By阿清 + 1 + 1 我很贊同!
gaosld + 1 + 1 我很贊同!
Damitte + 1 + 1 我很贊同!
zsq + 1 + 1 謝謝@Thanks!
lookerJ + 1 + 1 用心討論,共獲提升!
VGA211200 + 1 用心討論,共獲提升!
lu_ + 3 + 1 用心討論,共獲提升!
情永在哥哥 + 1 + 1 用心討論,共獲提升!
pina123456 + 1 + 1 謝謝@Thanks!
zooah212 + 1 + 1 用心討論,共獲提升!
yixi + 1 + 1 我很贊同!
qq1269560093 + 1 + 1 我很贊同!
葉一葦 + 1 學習學習
shenjiyuan2hao + 1 + 1 我很贊同!
caoli5288 + 1 + 1 我很贊同!
evea + 1 + 1 我很贊同!
圣丶619 + 1 我很贊同!
蘭笙c + 1 + 1 用心討論,共獲提升!
木子月 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
查無此凡 + 1 + 1 用心討論,共獲提升!
chenjingyes + 1 + 1 熱心回復!
陽光如此溫暖 + 2 我很贊同!
nut1999 + 1 + 1 我很贊同!
笙若 + 1 + 1 謝謝@Thanks!
獨行風云 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
風掃春殘雪 + 1 + 1 我很贊同!
濤濤丶 + 1 這個是大佬,VMP 3.x 什么時候研究一下!
濤之雨 + 1 + 1 膜拜,看不懂(氣哭)
bp946 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
610100 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
dreamlivemeng + 1 + 1 用心討論,共獲提升!

查看全部評分

本帖被以下淘專輯推薦:

發帖前要善用論壇搜索500彩票邀请码功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
Hmily 發表于 2020-7-29 13:52
Lixinist 發表于 2020-7-29 11:31
其實早就應該發到52來了,當時沒有邀請碼。后來注冊了號以后,距離在看雪發帖又已經過了半年了,偷懶一直沒 ...

當時也可以通過技術文章發帖申請啦,附件我幫你編輯到帖子了。
推薦
我愛天空依舊藍 發表于 2020-7-29 14:58
推薦
我愛天空依舊藍 發表于 2020-7-29 17:51
沙發
 樓主| Lixinist 發表于 2020-7-29 11:31 |樓主
本帖最后由 Lixinist 于 2020-7-29 11:45 編輯

其實早就應該發到52來了,當時沒有邀請碼。后來注冊了號以后,距離在看雪發帖又已經過了半年了,偷懶一直沒發。。。

點評

當時也可以通過技術文章發帖申請啦。  詳情 回復 發表于 2020-7-29 13:52
3#
hardchao 發表于 2020-7-29 11:37
謝謝大佬的分享,學習。前排
4#
L4Nce 發表于 2020-7-29 11:45
字數補丁

免費評分

參與人數 1吾愛幣 +1 熱心值 +1 收起 理由
Lixinist + 1 + 1 震驚! 謝謝@Thanks!

查看全部評分

5#
羅薩 發表于 2020-7-29 12:51
謝謝大佬分享,彩蛋2是T m d3.0iat修復腳本
6#
殠尛偉 發表于 2020-7-29 12:56
好,學習了
頭像被屏蔽
7#
秋風和落葉 發表于 2020-7-29 13:12
提示: 該帖被管理員或版主屏蔽
9#
liuhaisong 發表于 2020-7-29 14:07
努力學習!!!
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-8-4 05:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表

500彩票邀請碼-彩經網