史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 資訊系統安全備援防護技術文件
忘記密碼?
論壇說明

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

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

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

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-02-19, 06:03 AM   #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 金幣
預設 ESP定律+壹鍋端——ACProtect V1.20殼的簡便脫殼And修復方法

ESP定律 + 一鍋端——另類ACProtect V1.20殼的簡便脫殼And修復方法



下載位址: http://www.ultraprotect.com/acpr_pro.exe
軟體大小: 1.6M
軟體語言: 英文
套用平台: Win9x/NT/2000/XP

【軟體簡介】:ACProtect is an application that allows you to protect Windows executable files against piracy,using public keys encryption algorithms (RSA) to create and verify the registration keys and unlock some RSA key locked code,it has embedded cryptor against dump and unpacker.it also has many anti debug tricks. And you can use it to create evaluation and trial application versions. with specialized API system, mutual communication between loader and application is also can be achieved.

【作者聲明】:只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!

【偵錯環境】:WinXP、flyODBG修改版、PEiD、LordPE、ImportREC

—————————————————————————————————
【脫殼程序】:



ACProtect 現在的最新版本是 V1.20 [2004-02-08] 專業版,昇級很快。發覺ACProtect對Delphi的程序支持較好,以後Delphi的軟體會有很多用ACProtect加殼的。這次的試煉品是ACProtect內已含有ACP_Feedback.exe, Delphi的東東。


直接避開反跟蹤請參考以前的相關筆記。或者用這個修改版就可以正常偵錯了。
flyODBG 1.10 漢化修改版 下載頁面:(Ollydbg 1.10修正了某些程序無法暫停在入口的問題)
http://tongtian.net/pediybbs/viewtopic.php?p=20047

好幾天沒寫東西了,容易的大家都寫了,難的又脫不了,夠無奈的。滾滾長江東逝水,浪花淘盡多少Cracker?如果還不努力學習,我這菜鳥就更要被淘汰了。

—————————————————————————————————
一、ESP定律:快速尋找 偽OEP


老規矩:用IsDebug 1.4插件去掉Ollydbg的偵錯器標誌。忽略除了「int3異常」之外的所有其他異常選項。

何謂 偽OEP ?這裡的偽是假、偽裝的意思,因為有Stolen Code作怪,所以從殼中返回程序的地方並不是真正的OEP。
何謂 ESP定律?這是胡謅的,也就是說這個詞是我信口開河的,各位方家不必較真呀。 用這個ESP定律能快速找到大部分ACProtect 1.20加殼程序的偽OEP!下個版本作者應該會想辦法對付這個方法的,呵呵。ACProtect會越來越強大的!

覺得有不少殼在殼入口和進入OEP時的ESP值是很有規律的。其實 VolX 老兄在很早的時候脫 Videofixer 3.23 英文版時就曾經妙用過;exetool上也有人說過。因為單步或者TC跟蹤ACProtec都很浪費時間,所以無聊的時候又看了幾遍ACProtec,找到了一個稍微快點的方法。這個方法比我以前的方法要好很多,對於其他的殼或許也有借鑒的價值,權衡幾番還是發了出來。在此也希望有些兄弟能夠諒解!


0040A000 60 pushad//進入OD後停在這
0040A001 F9 stc//ACProtect V1.20以前的版本則利用入口pushad後的ESP值!
0040A002 D3FD sar ebp,cl
0040A004 0F80 01000000 jo Feedback.0040A00B
0040A00A FC cld
0040A00B FC cld
0040A00C 49 dec ecx
0040A00D C1DB FE rcr ebx,0FE
0040A010 85CF test edi,ecx
0040A012 72 03 jb short Feedback.0040A017
0040A014 73 01 jnb short Feedback.0040A017
0040A016 7A 81 jpe short Feedback.00409F99//ACProtect V1.20典型入口程式碼


F9執行,確定彈出的未註冊提示。程序會中斷在int3異常處。

00418A7A CC int3//ACProtect V1.20 典型異常
00418A7B 90 nop
00418A7C 64:67:8F06 0000 pop dword ptr fs:[0]
00418A82 83C4 04 add esp,4
00418A85 60 pushad
00418A86 E8 00000000 call Feedback.00418A8B
00418A8B 5E pop esi
00418A8C 83EE 06 sub esi,6
00418A8F B9 5B000000 mov ecx,5B
00418A94 29CE sub esi,ecx
00418A96 BA 5A630BF7 mov edx,F70B635A
00418A9B C1E9 02 shr ecx,2
00418A9E 83E9 02 sub ecx,2
00418AA1 83F9 00 cmp ecx,0
00418AA4 7C 1A jl short Feedback.00418AC0
00418AA6 8B048E mov eax,dword ptr ds:[esi+ecx*4]
00418AA9 8B5C8E 04 mov ebx,dword ptr ds:[esi+ecx*4+4]
00418AAD 33C3 xor eax,ebx
00418AAF C1C8 1B ror eax,1B
00418AB2 03C2 add eax,edx
00418AB4 81EA 3403B581 sub edx,81B50334
00418ABA 89048E mov dword ptr ds:[esi+ecx*4],eax
00418ABD 49 dec ecx
00418ABE EB E1 jmp short Feedback.00418AA1
00418AC0 61 popad
00418AC1 61 popad
00418AC2 C3 retn//直接在此處下斷,Shift+F9斷在這。F7走1步

0041BF97 66:C1D9 5E rcr cx,5E//返回這裡。此時 ESP=0012FF84 ★
0041BF9B 66:8BD1 mov dx,cx
0041BF9E 81F7 6B108A77 xor edi,778A106B
0041BFA4 50 push eax
0041BFA5 E8 01000000 call Feedback.0041BFAB


OK,現在 ESP定律 上場! 去轉存視窗,Ctrl+G:0012FF84 到達0012FF84記憶體處
0012FF84 00 00 00 00 ....

取消以前的斷點。在0012FF84處的4個字元上下 硬體訪問->Word 斷點 F9執行,斷下!

注意:對於 ACProtect V1.20[2004-02-08]以前的版本,則有的需要利用在入口處pushad後的ESP值!


00427B4F 8F05 58AC4000 pop dword ptr ds:[40AC58]//中斷第1次。可以取消斷點了
00427B55 FF35 58AC4000 push dword ptr ds:[40AC58]
00427B5B 8915 40AC4000 mov dword ptr ds:[40AC40],edx
00427B61 FF35 40AC4000 push dword ptr ds:[40AC40]
00427B67 8F05 3CAC4000 pop dword ptr ds:[40AC3C]
00427B6D 8B35 3CAC4000 mov esi,dword ptr ds:[40AC3C]
00427B73 90 nop
00427B74 90 nop
00427B75 90 nop
00427B76 90 nop
00427B77 60 pushad
00427B78 E8 5FF6FEFF call Feedback.004171DC
00427B7D 8B85 6EEC4100 mov eax,dword ptr ss:[ebp+41EC6E]
00427B83 0385 26D04000 add eax,dword ptr ss:[ebp+40D026]
//EAX=00002168 + 00400000=00402168 這就是偽OEP值
00427B89 8985 6EEC4100 mov dword ptr ss:[ebp+41EC6E],eax
//[ebp+41EC6E]=[00427C6E] 這個就是 飛天一躍 的地方
00427B8F 61 popad
00427B90 8935 38AC4000 mov dword ptr ds:[40AC38],esi
00427B96 FF35 38AC4000 push dword ptr ds:[40AC38]
00427B9C 8B0424 mov eax,dword ptr ss:[esp]
00427B9F 8F05 34AC4000 pop dword ptr ds:[40AC34]
00427BA5 8F05 54AC4000 pop dword ptr ds:[40AC54]
00427BAB FF35 54AC4000 push dword ptr ds:[40AC54]
00427BB1 5E pop esi
00427BB2 8F05 74AC4000 pop dword ptr ds:[40AC74]
00427BB8 60 pushad
00427BB9 E8 1EF6FEFF call Feedback.004171DC
00427BBE C685 2BEC4100 E8 mov byte ptr ss:[ebp+41EC2B],0E8
00427BC5 61 popad
00427BC6 8905 30AC4000 mov dword ptr ds:[40AC30],eax
00427BCC FF35 30AC4000 push dword ptr ds:[40AC30]
00427BD2 68 74AC4000 push Feedback.0040AC74
00427BD7 58 pop eax
00427BD8 8B10 mov edx,dword ptr ds:[eax]
00427BDA 8F05 2CAC4000 pop dword ptr ds:[40AC2C]
00427BE0 8B05 2CAC4000 mov eax,dword ptr ds:[40AC2C] ; Feedback.0040211C
//mov eax,0040211C 有點特別,偽OEP處的EAX就是這個值
00427BE6 90 nop
00427BE7 90 nop
00427BE8 90 nop
00427BE9 90 nop
00427BEA 90 nop
00427BEB 90 nop
00427BEC 90 nop
00427BED 90 nop
00427BEE 60 pushad
00427BEF E8 E8F5FEFF call Feedback.004171DC
00427BF4 C785 2CEC4100FF25000 mov dword ptr ss:[ebp+41EC2C],25FF
00427BFE 8D85 6EEC4100 lea eax,dword ptr ss:[ebp+41EC6E]
00427C04 8985 2EEC4100 mov dword ptr ss:[ebp+41EC2E],eax
00427C0A E8 CDF5FEFF call Feedback.004171DC
00427C0F 8DBD 8CE94100 lea edi,dword ptr ss:[ebp+41E98C]
00427C15 8D8D 20EC4100 lea ecx,dword ptr ss:[ebp+41EC20]
00427C1B 2BCF sub ecx,edi
00427C1D C1E9 02 shr ecx,2
00427C20 E8 55F3FEFF call Feedback.00416F7A
00427C25 AB stos dword ptr es:[edi]//清理剛才的戰場
00427C26 E2 F8 loopd short Feedback.00427C20
00427C28 61 popad//F4到這裡跳出LOOP
00427C29 EB 01 jmp short Feedback.00427C2C

00427C2C FF25 6E7C4200 jmp dword ptr ds:[427C6E] ;00402168//GO!飛向光明之巔!


00402168 E8 43FCFFFF call Feedback.00401DB0//偽OEP 在這兒用LordPE後完全DUMP工作
0040216D 68 D0214000 push Feedback.004021D0; ASCII "ACProtect Feedback From"
00402172 6A 00 push 0
00402174 6A 00 push 0
00402176 E8 F9FCFFFF call Feedback.00401E74

注意:在00402168偽OEP處記下暫存器和堆倉情況! ★


—————————————————————————————————
二、修復輸入表


既然ImportREC能夠很好的對付ACProtect,我就偷懶了。 重新執行Feedback.exe,執行ImportREC,選項這個工作。把OEP改為00002168,點IT AutoSearch,點「Get Import」,用「追蹤層次3」全部修復無效函數。FixDump!


—————————————————————————————————
三、仿真 Stolen Code,一鍋端 的方法修復變形程式碼


想從 ACProtect 1.2 中找到未被「改造」的Stolen Code有點麻煩,索性就根據偽OEP處的暫存器、堆倉情況以及上面的程式碼來手動仿真吧。誰有更好的方法請多指教。


在00402168偽OEP處Ollydbg中看到暫存器和堆倉的情況是:

EAX=0040211C //這就是在00427BE0處看到的值
EBX=7FFDF000
EBP=0012FFC0
ESP=0012FFAC

0012FFAC 7FFDF000
0012FFB0 00000000
0012FFB4 00000024
0012FFB8 7FFDF000
0012FFBC 7FFDF000
0012FFC0 0012FFF0
0012FFC4 77E5EB69 返回到 kernel32.77E5EB69


————————————————————————
簡單看了幾種其他的 Delphi 6.0-7.0 程序的OEP處程式碼:


push ebp
mov ebp,esp
add esp,-XX
mov eax,00XXXXXX

push ebp
mov ebp,esp
add esp,-XX
xor eax,eax
mov dword ptr ss:[ebp-10],eax
mov eax,00XXXXXX

————————————————————————

當然,上面修復輸入表後的程序還是無法執行的,Stolen Code和變形程式碼還沒有修復。ACProtect 1.2 的變形程度更嚴重了。這部分讓人頭疼,現在學習了 heXer 和 jingulong 兩位脫神的一鍋端方法居然奇兵突出輕鬆解決!感謝二位老師的教誨!當然,任何方法都不是萬能的,靈活運用才是關鍵!用這個方法可以搞定一些 ACProtect 1.2 加殼的程序,還有某些程序是不行的,生搬硬套是不可取的。

用Ollydbg載入dumped_.exe,開始偶們的 一鍋端 修復!Ctrl+G:0040A000 這是原先ACProtect加殼的入口。

猜、猜、猜…… 呵呵,結合暫存器、堆倉和殼中程式碼情況,仿真Stolen Code如下:

0040A000 55 push ebp
0040A001 8BEC mov ebp,esp
0040A003 83C4 F0 add esp,-10
0040A006 53 push ebx
0040A007 B8 1C214000 mov eax,dumped_.0040211C
0040A00C E9 5781FFFF jmp dumped_.00402168//跳向偽OEP


把這些修改程式碼 複製入可執行文件,另存新檔 修正-dumped_.exe。用LordPE修改其入口點=0000A000
因為利用了原perplex區段,所以不可以刪除這個區段;可以用File Scanner簡單最佳化一下。

執行一下,如何?OK了!
BTW:某些程序經過以上處理後會存在無法跨系統平台執行的問題。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



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

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


所有時間均為台北時間。現在的時間是 03:58 AM


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


SEO by vBSEO 3.6.1