史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > Hacker/Cracker 及加解密技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-12-18, 06:29 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 菜鳥也玩手動修復引入表

菜鳥也玩手動修復引入表[修正]
手工修復引入表是破解加殼軟體最難的一道工序,一向是頂尖高手的專利,令我等菜鳥往往望而卻步,而不敢奢望越雷池半步!那麼有沒有簡單一些的方法呢?通過本人的實踐,終於找到了這條捷徑。我的做法可以分為以下幾步:
1、確定程序的OEP,並脫殼。
2、使未脫殼程序處於正常執行態,使用ImportREC或LordPE檢查是否所有的API都可識別,並記錄下不可識別API的列表及其函數入口位址。
3、重新啟動未脫殼程序,並使之中斷在OEP,用前面記錄到的資料在所有不可識別API的入口設執行斷點,盡可能嘗試軟體所有的功能,通過跟蹤查清每一個不可識別API的名稱及實際入口位址,並加以記錄。
4、再次啟動未脫殼程序,並使之中斷在OEP,用上一步確定的實際API的入口位址逐一替換相應的未識別API入口位址,然後使程序處於正常執行態,使用ImportREC或LordPE進行檢查,這時所有的API就都能識別了。API識別完成後,對已脫殼的程序進行FixDump,整個修復程序就完成了。

下面讓我們一起來親手搞定目前比較凶悍的加殼保護軟體之一--SVKP1.32(當前版本,看雪工具有介紹)。
使用工具:(1)、SoftICE 2.6 根據http://www.chat001.com/forum/crackfo...的修改版
(2)、ImportREC 1.6 (http://www.pediy.com/tools/PE_tools/Rebuilder/Import%20REC/ucfir16f.zip)
(3)、LordPE DLX(http://www.pediy.com/tools/PE_tools/Lordpe/LPE-DLX.ZIP)
(4)、UltraEdit 10.10a(http://www.ttdown.com/SoftDown.asp?ID=6718)
目標程序: SVK Protect 1.32 (http://www.anticracking.szm.sk/svkp_setup.exe)

安裝目標程序,裝載SoftICE。

1、下斷點「bpint 1」,然後啟動SVKP.EXE,程序中斷於
001B:07BABC57 CD01 INT 01
下指令「bd 0」關閉斷點,並使用指令「r eip 07BAEE11」修改指令游標,以便躲過SEH陷阱,再下指令「g 07D31FA5」,使程序中斷於07D31FA5處(當然,你也可以使用指令「g 00401000」使程序直接停在OEP處),使用F8鍵單步跟蹤,要不了幾步就可以到達程序的OEP:00401000 處了。記錄下此值,並記錄下從OEP開始的幾行指令及相應十六進位編碼,下彙編指令「a eip」修改入口指令為「JMP EIP」然後用指令「x」使程序退出SoftICE並在OEP處進入死循環。
2、下面需要從記憶體中Dump出程序。啟動LordPE,用滑鼠游標點選SVKP.EXE工作,點滑鼠右鍵,在彈出的功能表中點選「Correct Image Size」項前先修正映像尺寸。然後在相同的功能表中點選「Dump Full」以Dump出脫過殼的程序,命名為「SVKP_Dump.exe」。然後還在相同功能表下點選「Burn Process」殺死在記憶體之中處於死循環狀態的程序。此後用LordPE的PE Editor功能調入脫過殼的SVKP_Dump.exe,修改其OEP的RVA為00001000,儲存退出。
3、下面需要復原SVKP_Dump.exe在OEP處的指令。使用UltraEdit載入SVKP_Dump.exe,使用十六進位碼搜尋功能搜尋以下字元串
eb fe f3 4b 00
找到後修改為:
68 1d f3 4b 00
改好後儲存碟退出。至此,脫殼程序SVKP_Dump.exe修改完畢,剩下的工作就是修復引入表IAT了。
4、啟動ImpotREC,在工作列表中選取SVKP.EXE,修改相應OEP的RVA為00001000,點擊「IAT Auto Search」按鈕,再點擊「Get Impots」按鈕,逐一檢查API的識別情況。最後發現,有5個API程序無法識別,對應的入口分別是:
(1) 07D37656
(2) 07D49E52
(3) 07D49E82
(4) 07D333DD
(5) 07D32070
5、重新啟動加殼程序,使之停在OEP處,下斷點:
(1)、「bpx 07D37656」
(2)、「bpx 07D49E52」
(3)、「bpx 07D49E82」
(4)、「bpx 07D333DD」
(5)、「bpx 07D32070」
然後讓程序繼續執行,分別從斷點處開始跟蹤,看看程序使用的究竟是哪個API,然後再返回到使用處看看:
(1) 00401005 CALL [004C521C] -- 07D37656 <-- SVKP API

(2) 00402F04 CALL [004C51A8] -- 07D49E52 <-- KERNEL32!CopyFileA
(2) 0040300B CALL [004C51A8] -- 07D49E52 <-- KERNEL32!CopyFileA

(3) 00402F58 CALL [004C51B0] -- 07D49E82 <-- KERNEL32!CreateFileMappingA
(3) 00403694 CALL [004C51B0] -- 07D49E82 <-- KERNEL32!CreateFileMappingA

(4) 00401086 CALL [004C51F8] -- 07D333DD <-- KERNEL32!GetModuleHandleA

(5) 004011A8 CALL [004C5200] -- 07D32070 <-- KERNEL32!ExitProcess
現在情況就比較清楚了,第一個API是用於為傳入的位址裝載類BIOS的文本內容,只在程序開始時使用,不是很重要,我們為它指定一個使用形式相當的API--KERNEL32!GetVersionExA作為替代,其它的API已經清楚了。
6、再次啟動加殼程序,使之停在OEP處,用識別出來的API入口位址替換原來無法識別的API入口位址。在本人的系統下,這些識別出來的API的對應位址分別是:
(1)、KERNEL32!GetVersionExA -- 77E6A9C3
(2)、KERNEL32!CopyFileA -- 77E7DA46
(3)、KERNEL32!CreateFileMappingA -- 77E68492
(4)、KERNEL32!GetModuleHandleA -- 77E66C42
(5)、KERNEL32!ExitProcess -- 77E78F94
需要做的工作就是把這些新的入口位址填到相應的記憶體單元,就像這樣:
序號 記憶體位址 修改前 修改後
===============================================
(1)、[004C521C] 07D37656 77E6A9C3
(2)、[004C51A8] 07D49E52 77E7DA46
(3)、[004C51B0] 07D49E82 77E68492
(4)、[004C51F8] 07D333DD 77E66C42
(5)、[004C5200] 07D32070 77E78F94
===============================================
為此,分別下指令:
(1)、 「e 004C521C C3 A9 E6 77」
(2)、 「e 004C51A8 46 DA E7 77」
(3)、 「e 004C51B0 92 84 E6 77」
(4)、 「e 004C51F8 42 6C E6 77」
(5)、 「e 004C5200 94 8F E7 77」
以完成此項修改。
完成此項工作後,下指令「r eip 0040102E」,把EIP從00401000更改為0040102E,讓程序繼續執行。按照前面的第4項操作,你會發現,所有的API都可以正常識別出來了。這時,用滑鼠點選「Fix Dump」按鈕,在彈出的文件選項窗中,用Browse功能選取前面已經脫過殼的SVKP_Dump.EXE,點確定就Ok了。
7、由於KERNEL32!GetVersionExA是代用的,所以還需要考慮修改後給程序流向帶來的影響。
001B:00401000 681DF34B00 PUSH 004BF31D
001B:00401005 FF151C524C00 CALL [004C521C]
001B:0040100B 85C0 TEST EAX,EAX
001B:0040100D 751F JNZ 0040102E
我們看到,修改前:
001B:00401005 FF151C524C00 CALL [004C521C]
總是返回EAX=1,而修改後又總是返回EAX=0,這就改變了程序的實際流向,必須補救,措施就是把
001B:0040100D 751F JNZ 0040102E
修改為
001B:0040100D EB1F JMP 0040102E
Ok,你都照做了嗎?大功告成!試著啟動一下程序看看,是不是很酷?
無殼SVKP1.32下載:http://tongtian.net/pediybbs/viewtopic.php?p=12016#12016
下載脫殼版SVKP1.32:http://tongtian.net/pediybbs/viewtop...?p=12016#12016
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 08:01 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2021, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1