淺談SVKP 1.3X殼的輸入表修復――登錄檔醫生 V2.96 脫殼+破解

看雪資料發表於2015-11-15

淺談SVKP 1.3X殼的輸入表修復――登錄檔醫生 V2.96 脫殼+破解
 
 
 
下載頁面:  http://www.skycn.com/soft/7156.html
軟體大小:  1928 KB
軟體語言:  英文
軟體類別:  國產軟體 / 共享版 / 解除安裝清除
應用平臺:  Win9x/NT/2000/XP
加入時間:  2004-02-20 17:12:14
下載次數:  40350
推薦等級:  ****

【軟體簡介】:登錄檔醫生(Registry Medic)。Windows登錄檔是一個龐雜的資料庫,它記載了Windows所必需要的硬體和軟體資訊,稍有閃失就足讓Windows不能啟動或出現這樣那樣的錯誤。在通常情況下,我們的計算機會經常性的安裝和反安裝一些程式,日積月累就會被無用的資訊充滿整個的登錄檔!Windows不但會執行減慢,還會引起莫名的錯誤。如何解決呢?登錄檔醫生就能幫助治療您的登錄檔。登錄檔醫生,能夠幫您檢查登錄檔中檔案/目錄的完整性和一致性。如果這些檔案沒有從原來的位置移到了另外一個地方,但是和登錄檔中的資訊不一致,登錄檔醫生會幫您尋找這些檔案,並匹配到相應的登錄檔資訊上。如果您的登錄檔中儲存著磁碟上已經被刪除的檔案記錄,那麼登錄檔醫生會找到它們,並建議您刪除這些登錄檔資訊。當然您也可以保留這些資訊。

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

【除錯環境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC

――――――――――――――――――――――――――――――――― 
【過    程】:
          
      
 
SVK Protector的IAT加密不是很變態,用ImportREC就能修復大部分函式,但依舊有一些函式是無法識別的,SvkpIAT.dll外掛有點好用,不過碰上ExitProcess就OVER了。用了幾天時間看了幾個SVKP 1.3X的殼,簡單說一下避開IAT加密的方法,有不少是臆測,歡迎大家指正。

SVK Protector 1.32 的IAT加密我覺得可以分作三類:

①、普通函式加密   這個簡單
②、特殊函式加密   GetModuleHandleA、GetCommandLineA 等
③、SVK 檢測函式   也算是特殊函式吧,主要功能是反脫殼或者檢驗註冊

OK,Let"s Go!

―――――――――――――――――――――――――――――――――
一、Magic Jump ,避開IAT加密



設定Ollydbg忽略所有異常選項。老規矩:用IsDebug 1.4外掛去掉Ollydbg的偵錯程式標誌。


00558000     60                   pushad//進入OD後停在這
00558001     E8 00000000          call RegMedic.00558006
00558006     5D                   pop ebp
00558007     81ED 06000000        sub ebp,6
0055800D     EB 05                jmp short RegMedic.00558014

F9執行,程式在異常處中斷

081F137F     6285 0E0B0000        bound eax,qword ptr ss:[ebp+B0E]//SVK典型異常

下斷 BP GetModuleHandleA+5,Shift+F9 透過SVK的典型異常。斷下後取消斷點,Ctrl+F9返回

08213FC7     E8 02000000          call 08213FCE//返回這裡
08213FCC     CD20 83042408        vxdcall 8240483
08213FD2     C3                   retn


現在Ctrl+F在當前位置查詢以下命令並下斷:

sub dword ptr ds:[ebx],eax
mov dword ptr ds:[edi],eax

cmp dword ptr ds:[ebx],251097CC
cmp dword ptr ds:[ebx],2D66B1C5
cmp dword ptr ds:[ebx],D9B20494
cmp dword ptr ds:[ebx],D0861AA4
cmp dword ptr ds:[ebx],B1866570
cmp dword ptr ds:[ebx],9B76460E
cmp dword ptr ds:[ebx],E69307DB
cmp dword ptr ds:[ebx],A56C7B62
cmp dword ptr ds:[ebx],BB964E66
cmp dword ptr ds:[ebx],5BD70645
cmp dword ptr ds:[ebx],1DFCE00D
cmp dword ptr ds:[ebx],0FDD31
cmp dword ptr ds:[ebx],2651B795
cmp dword ptr ds:[ebx],4BF682B4
cmp dword ptr ds:[ebx],4CCF1A0F
cmp dword ptr ds:[ebx],DF87764A
cmp dword ptr ds:[ebx],FBB2B8B8


――――――――――――――――――――――――
1、普通函式加密 處理


08216AAF     8907                 mov dword ptr ds:[edi],eax//寫入重定位地址
08216AB1     7C 03                jl short 08216AB6
08216AB8     61                   popad
08216AB9     E8 01000000          call 08216ABF


修改:

08216AAF     61                   popad//呵呵,先POPAD  ★
08216AB0     8907                 mov dword ptr ds:[edi],eax//寫入正確函式 ★
08216AB2     90                   nop
08216AB3     EB 03                jmp short 08216AB8
08216AB8     90                   nop//NOP掉原先的popad ★
08216AB9     E8 01000000          call 08216ABF


――――――――――――――――――――――――
2、特殊函式的處理:SVKP 的特殊函式(包括SVK 檢測函式)應該有17個


08214C3E     2903                 sub dword ptr ds:[ebx],eax//計算 函式名的HASH值?


下面比較是否是特殊函式,是則跳轉處理:

08214D9C     813B CC971025        cmp dword ptr ds:[ebx],251097CC
08214DA7     0F84 23310000        je 08217ED0//修改:jmp 082150B6  ★

08214E21     813B C5B1662D        cmp dword ptr ds:[ebx],2D66B1C5//GetCommandLineA
08214E2C     0F84 CB310000        je 08217FFD

08214E46     813B 9404B2D9        cmp dword ptr ds:[ebx],D9B20494
08214E51     0F84 FA350000        je 08218451

0821501D     813B A41A86D0        cmp dword ptr ds:[ebx],D0861AA4
08215028     0F84 DD380000        je 0821890B

0821503B     813B 706586B1        cmp dword ptr ds:[ebx],B1866570//GetModuleHandleA
08215046     0F84 343C0000        je 08218C80

08215055     813B 0E46769B        cmp dword ptr ds:[ebx],9B76460E
08215060     0F84 953F0000        je 08218FFB

0821506D     813B DB0793E6        cmp dword ptr ds:[ebx],E69307DB
08215078     0F84 C33F0000        je 08219041

08215087     813B 627B6CA5        cmp dword ptr ds:[ebx],A56C7B62
08215092     0F84 F33F0000        je 0821908B

082150A1     813B 664E96BB        cmp dword ptr ds:[ebx],BB964E66
082150AC     0F84 25400000        je 082190D7

082150B6     813B 4506D75B        cmp dword ptr ds:[ebx],5BD70645//SVK反脫殼(註冊)函式
082150C1     0F84 59400000        je 08219120

082150D0     813B 0DE0FC1D        cmp dword ptr ds:[ebx],1DFCE00D//SVK反脫殼(註冊)函式
082150DB     0F84 85400000        je 08219166 

082150E8     813B 31DD0F00        cmp dword ptr ds:[ebx],0FDD31   //SVK反脫殼(註冊)函式
082150F2     0F84 B7400000        je 082191AF

082150FC     813B 95B75126        cmp dword ptr ds:[ebx],2651B795
08215107     0F84 F5400000        je 08219202//修改:jmp 08215164  ★

08215111     813B B482F64B        cmp dword ptr ds:[ebx],4BF682B4
0821511C     0F84 2B410000        je 0821924D

08215126     813B 0F1ACF4C        cmp dword ptr ds:[ebx],4CCF1A0F
08215130     0F84 62410000        je 08219298

0821513F     813B 4A7687DF        cmp dword ptr ds:[ebx],DF87764A
08215149     0F84 BA440000        je 08219609

08215158     813B B8B8B2FB        cmp dword ptr ds:[ebx],FBB2B8B8
0821515E     0F84 0C4B0000        je 08219C70

08215164     60                   pushad
08215165     7C 03                jl short 0821516A
08215167     EB 03                jmp short 0821516C


可以直接把082150AC以上的幾個跳轉NOP掉,這樣原先ImportREC無法識別的GetModuleHandleA等特殊函式就變成普通函式來處理了。SVK反脫殼(註冊)函式現在不需要處理,後面的跳轉也不能NOP,否則會出錯的。

為了“照顧”反脫殼(註冊)函式,最後修改如下:
08214DA7     E9 0A030000          jmp 082150B6
08215107     EB 5B                jmp 08215164

修改之後這些特殊函式在08216AB0處就自動還原成正確函式寫入地址了。

RegMedical.exe的特殊函式如下:

001141A8  ?  0000  082733FC   //GetModuleHandleA
001141B8  ?  0000  08272A23   //GetCommandLineA
00114258  ?  0000  082733FC   //GetModuleHandleA
0011432C  ?  0000  0827B008   //GetVersionExA
00114330  ?  0000  0827AC83   //GetVersion
00114358  ?  0000  082733FC   //GetModuleHandleA


――――――――――――――――――――――――
3、SVK反脫殼(註冊)函式    這幾個函式最後進入程式處理。


082191E1     83C4 04              add esp,4
082191E4     890F                 mov dword ptr ds:[edi],ecx//SVK反脫殼(註冊)函式
082191E6     E8 02000000          call 082191ED

本程式共有三個SVK反脫殼(註冊)函式:

FThunk: 001148B4  NbFunc: 00000003
0  001148B4  ?  0000  082785D2
0  001148B8  ?  0000  08278098
0  001148BC  ?  0000  08276FC4



―――――――――――――――――――――――――――――――――
二、ESP定律,走至偽OEP。模擬Stolen Code



輸入表處理結束後程式當然要跳向OEP啦。我再次使用ESP定律,當然這個程式也可以在CODE段下記憶體斷點走到偽OEP。也可以直接Ctrl+F:jmp dword ptr ss:[esp-4],找到飛天一躍的地方。但推薦使用ESP定律的方法,這樣可以看到部分變形的Stolen Code

在★0012FFB0★處的4個位元組上下 硬體訪問->Word 斷點,F9執行,斷幾次就會來到目的地啦! :-)
為何要選擇在0012FFB0處?呵呵,只是我的猜測+試驗得出的,你當然可以想其他辦法啦。


08271D45     60                   pushad//中斷。F9數十次會來到以下地方

0827D1CE     58                   pop eax
0827D1CF     68 EE91DFBB          push BBDF91EE
0827D1D4     87E4                 xchg esp,esp
0827D1D6     50                   push eax ; RegMedic.004E2268//這個值可以在偽OEP處看到
0827D1D7     B8 7D946E44          mov eax,446E947D
0827D1DC     014424 04            add dword ptr ss:[esp+4],eax
0827D1E0     58                   pop eax
0827D1E1     89DB                 mov ebx,ebx
0827D1E3     83C4 04              add esp,4
0827D1E6     87FF                 xchg edi,edi
0827D1E8     FF6424 FC            jmp dword ptr ss:[esp-4]; 004E266B//GO!飛向光明之巔!:-)


在偽OEP處看看相關暫存器和堆疊資料:EBP=0012FFB4  ESP=0012FFC0  EAX=004E2268
SVKP 的Stolen Code一般不多,根據以上資料和殼中程式碼處理部分,補上OEP處的Stolen Code


004E2660     55                   push ebp//在這兒用LordPE糾正ImageSize後完全DUMP這個程式
004E2661     8BEC                 mov ebp,esp
004E2663     83C4 F4              add esp,-0C
004E2666     B8 68224E00          mov eax,004E2268//補上的Stolen Code   :-)

004E266B     E8 A443F2FF          call RegMedic.00406A14//偽OEP
004E2670     A1 D4B94F00          mov eax,dword ptr ds:[4FB9D4]
004E2675     8B00                 mov eax,dword ptr ds:[eax]
004E2677     E8 8CC2F6FF          call RegMedic.0044E908
004E267C     A1 D4B94F00          mov eax,dword ptr ds:[4FB9D4]
004E2681     8B00                 mov eax,dword ptr ds:[eax]
004E2683     BA AC264E00          mov edx,RegMedic.004E26AC; ASCII "Registry Medic"


執行ImportREC,設定“啟用除錯許可權”的選項,選擇這個程式。把OEP改為000E2660、RVA=00114150、Size=000007B4,點“Get Import”,呵呵,除了3個SVK反脫殼(註冊)函式其他的全部是有效的!FixDump。


―――――――――――――――――――――――――――――――――
三、修正 SVK 反脫殼(註冊)函式



程式現在還是無法正常執行的,別忘了還有3個SVK函式沒有修復。

0  001148B4  ?  0000  082785D2
0  001148B8  ?  0000  08278098
0  001148BC  ?  0000  08276FC4

在這幾個地方下 記憶體 斷點,很容易就找到呼叫的地方:

0044FB78     FF25 BC485100        jmp dword ptr ds:[5148BC]
0044FB80     FF25 B8485100        jmp dword ptr ds:[5148B8]
0044FB88     FF25 B4485100        jmp dword ptr ds:[5148B4]

把這幾個修改為:

0044FB78     C3                   retn
0044FB80     C3                   retn
0044FB88     C3                   retn


OK,程式已經能夠執行了。比較幸運的是這個程式沒有使用分段解密。


―――――――――――――――――――――――――――――――――
四、破解



雖然程式能夠執行了,但提示Trail Expired,彈出大大的註冊框讓偶註冊。呵呵,看來註冊部分沒用SVK的。

使用者名稱:@ fly @
試煉碼:13572-46890-12135-20040-03080-24689-123
――――――――――――――――――――――――
根據提示資訊,很容易找到註冊核心的地方。


004E1294     8B45 F4              mov eax,dword ptr ss:[ebp-C]//[ebp-C]=@ fly @
004E1297     E8 8C2CF2FF          call dumped_.00403F28
004E129C     83F8 06              cmp eax,6//使用者名稱至少6位
004E129F     0F8C F0000000        jl dumped_.004E1395
004E12A5     8B45 F8              mov eax,dword ptr ss:[ebp-8]//[ebp-8]=試煉碼
004E12A8     E8 7B2CF2FF          call dumped_.00403F28
004E12AD     83F8 21              cmp eax,21//試煉碼至少33位
004E12B0     7C 1D                jl short dumped_.004E12CF
004E12B2     8B45 FC              mov eax,dword ptr ss:[ebp-4]
004E12B5     E8 CE0A0000          call dumped_.004E1D88//黑名單檢測

黑名單:Cindy J. Leonheardt、[DJ]neo  呵呵,希望以後不要加上 fly   :-)

004E12BA     84C0                 test al,al
004E12BC     75 11                jnz short dumped_.004E12CF//是黑名單上的就直接OVER  :oops:
004E12BE     8B55 F4              mov edx,dword ptr ss:[ebp-C]
004E12C1     B8 F4134E00          mov eax,dumped_.004E13F4
004E12C6     E8 492FF2FF          call dumped_.00404214//檢測使用者名稱中有無 @ 這個字元
004E12CB     85C0                 test eax,eax
004E12CD     75 45                jnz short dumped_.004E1314//沒有@就OVER  :oops:
004E12CF     8D45 EC              lea eax,dword ptr ss:[ebp-14]
004E12D2     BA 00144E00          mov edx,dumped_.004E1400
           //ASCII "Registration failed. Please try again!"       BAD BOY!  :-(
004E130A     E8 8960F2FF          call <jmp.&user32.MessageBoxA>//呵呵,Please try again!
004E130F     E9 B0000000          jmp dumped_.004E13C4
004E1314     8B55 F8              mov edx,dword ptr ss:[ebp-8]
004E1317     8B45 F4              mov eax,dword ptr ss:[ebp-C]
004E131A     E8 91A9FAFF          call dumped_.0048BCB0
004E131F     E8 C4B4FAFF          call dumped_.0048C7E8//運算、比較註冊碼
004E1324     A1 D4B74F00          mov eax,dword ptr ds:[4FB7D4]
004E1329     8038 00              cmp byte ptr ds:[eax],0//判斷[4FB7D4]處標誌
004E132C     74 25                je short dumped_.004E1353
004E132E     A1 58B84F00          mov eax,dword ptr ds:[4FB858]
004E1333     8338 00              cmp dword ptr ds:[eax],0//判斷[4FB858]處標誌
004E1336     74 0C                je short dumped_.004E1344
004E1338     A1 58B84F00          mov eax,dword ptr ds:[4FB858]
004E133D     8B00                 mov eax,dword ptr ds:[eax]
004E133F     E8 68D1FFFF          call dumped_.004DE4AC
004E1344     8D45 EC              lea eax,dword ptr ss:[ebp-14]
004E1347     BA 30144E00          mov edx,dumped_.004E1430
           //ASCII "Thank you for registering Registry Medic."  呵呵,勝利女神!:-)
004E134C     E8 EF29F2FF          call dumped_.00403D40
004E1351     EB 0D                jmp short dumped_.004E1360
004E1353     8D45 EC              lea eax,dword ptr ss:[ebp-14]
004E1356     BA 00144E00          mov edx,dumped_.004E1400
           //ASCII "Registration failed. Please try again!"       BAD BOY!  :-(


直接看註冊碼的比較部分吧: :-)

0048B300     8B45 D8              mov eax,dword ptr ss:[ebp-28]//EAX=50e8c2d4bc92
0048B303     8B55 CC              mov edx,dword ptr ss:[ebp-34]//EDX=135724689012
0048B306     E8 2D8DF7FF          call dumped_.00404038//比較註冊碼前12位
0048B30B     75 11                jnz short dumped_.0048B31E
0048B30D     8B45 D4              mov eax,dword ptr ss:[ebp-2C]//[ebp-2C]=123
0048B310     8B55 D0              mov edx,dword ptr ss:[ebp-30]//[ebp-30]=2db
0048B313     E8 208DF7FF          call dumped_.00404038//比較註冊碼最後3位,根據前30位得出
0048B318     75 04                jnz short dumped_.0048B31E
0048B31A     C645 F7 01           mov byte ptr ss:[ebp-9],1//置成功標誌位
0048B31E     33C0                 xor eax,eax
0048B320     5A                   pop edx
0048B321     59                   pop ecx
0048B322     59                   pop ecx
0048B323     64:8910              mov dword ptr fs:[eax],edx
0048B326     68 38B34800          push dumped_.0048B338
0048B32B     E8 5048FCFF          call dumped_.0044FB80
0048B330     C3                   retn


――――――――――――――――――――――――――――――――― 
【註冊資訊儲存】:


註冊資訊和時間資訊儲存在登錄檔中的2個地方:

[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{B087CE89-A8EE-4890-91E7-696B3F749500}]
"AppIdK"="CA000DFE903977C2EB7C-5CD3A51B5BED33B772DB-316841B94D9A0C-50E8C2D4BC921352004003080246892DB"

[HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{0C985599-3A7C-4D1D-9D73-B6BBC812D950}]
"AppIdK"="CA000DFE903977C2EB7C-5CD3A51B5BED33B772DB-316841B94D9A0C-50E8C2D4BC921352004003080246892DB"


――――――――――――――――――――――――――――――――― 
【整        理】:


使用者名稱:@ fly @
註冊碼:50E8C-2D4BC-92135-20040-03080-24689-2DB


―――――――――――――――――――――――――――――――――
    
                                
         ,     _/ 
        /| _.-~/            _     ,        青春都一晌
       ( /~   /              ~-._ |
       `\  _/                   ~ )          忍把浮名 
   _-~~~-.)  )__/;;,.          _  //'
  /'_,   --~    ~~~-  ,;;___(  (.-~~~-.        換了破解輕狂
 `~ _( ,_..-- (     ,;'' /    ~--   /._` 
  /~~//'   /' `~         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`    `\~~   
                         "     "   "~'  ""

    

     Cracked By 巢水工作坊――fly [OCN][FCG][NUKE][DCM]

                2004-03-12  14:00



相關文章