VideoSplitter V2.31 脫殼去暗樁+完美爆破
標 題:VideoSplitter V2.31 脫殼去暗樁+完美爆破
發信人:David
時 間:2004年4月04日 11:54
詳細資訊:
【脫文標題】 VideoSplitter V2.31 脫殼去暗樁+完美爆破
【脫文作者】 weiyi75[Dfcg]
【作者郵箱】 weiyi75@sohu.com
【作者主頁】 Dfcg官方大本營
【使用工具】 Ollydbg1.10b,ImportREC1.42,Loadpe
【破解平臺】 Win2000/XP
【軟體名稱】 VideoSplitter V2.31
【下載地址】 http://www.boilsoft.com/videosplitter
【軟體簡介】 一個AVI/MPEG/ASF/WMV分機的分割,合併工具,也包括了AVI和MPEG的播放器在裡面,你可以很輕鬆的利用這個播放器把你喜歡的片斷擷取下來。
【軟體大小】 705KB
【加殼方式】 ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
【保護方式】 沒有使用Asprotcet的Rsa演算法保護,採用自行研究的加密演算法,啟動時校驗註冊碼,10天試用期限制,SDK防脫殼暗樁。
【破解宣告】 我是一隻小菜鳥,偶得一點心得,願與大家分享:
--------------------------------------------------------------------------------
【破解內容】
第一部分,脫去Asprotect1.23外殼保護,補上Stolen Code,修復IAT。
首先Peid查殼,為ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov。透過二哥=weiyi75=David作品Asprotect1.23rc4之Dephi語言篇經驗,脫殼修復這個軟體易如反掌。
複習一下,暫存器EBP=0012FFF0 //這是未加殼程式停在入口點EBP的值,其它Dephi語言或程式語言這裡的EBP值全部相同,這又說明什麼,當Asprotect執行到這裡或Stolen Code做手腳時EBP的值就為EBP=0012FFF0,我們來具體試試。
Ollydbg載入程式,隱藏OD,OD異常設定忽略除記憶體異常外的全部異常。
00401000 > 68 01604B00 push VideoSpl.004B6001 //加殼程式入口點,這裡先停一下,Asprotect殼一般都有防脫殼暗樁,我們初學者採用被動式脫殼法比較好,發現問題再想辦法解決。那麼就先脫殼,修復IAT,補上Stolen Code。
00401005 E8 01000000 call VideoSpl.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C 9B wait
0040100D 3E:AE scas byte ptr es:[edi]
0040100F 81E9 06A552EF sub ecx, EF52A506
00401015 2D 1FCABC58 sub eax, 58BCCA1F
0040101A 56 push esi
0040101B BC 9F7BA982 mov esp, 82A97B9F
00401020 4F dec edi
00401021 40 inc eax
00401022 D6 salc
00401023 4F dec edi
00401024 6E outs dx, byte ptr es:[edi]
00401025 F9 stc
00401026 95 xchg eax, ebp
00401027 27 daa
00401028 47 inc edi
00401029 8371 C3 9A xor dword ptr ds:[ecx-3D], FFFFFF9A
.........................................................................................
直接用OD指令碼外掛到達地球人都知道的位置。
012239EC 3100 xor dword ptr ds:[eax], eax
012239EE 64:8F05 0000000>pop dword ptr fs:[0]
012239F5 58 pop eax
012239F6 833D B07E2201 0>cmp dword ptr ds:[1227EB0], 0
012239FD 74 14 je short 01223A13
012239FF 6A 0C push 0C
01223A01 B9 B07E2201 mov ecx, 1227EB0
01223A06 8D45 F8 lea eax, dword ptr ss:[ebp-8]
01223A09 BA 04000000 mov edx, 4
01223A0E E8 2DD1FFFF call 01220B40
01223A13 FF75 FC push dword ptr ss:[ebp-4]
01223A16 FF75 F8 push dword ptr ss:[ebp-8]
01223A19 8B45 F4 mov eax, dword ptr ss:[ebp-C]
01223A1C 8338 00 cmp dword ptr ds:[eax], 0
01223A1F 74 02 je short 01223A23
01223A21 FF30 push dword ptr ds:[eax]
01223A23 FF75 F0 push dword ptr ss:[ebp-10]
01223A26 FF75 EC push dword ptr ss:[ebp-14]
01223A29 C3 retn //再這裡下斷點,Shift+F9中斷後清除斷點,F8步過。
..........................................................................................
01237838 /E9 08000000 jmp 01237845 //到這裡。
0123783D |40 inc eax
0123783E ^|79 BE jns short 012377FE
01237840 |1F pop ds
01237841 |6C ins byte ptr es:[edi], dx
01237842 |35 CA3BE80D xor eax, 0DE83BCA
01237847 0000 add byte ptr ds:[eax], al
01237849 00B1 961704ED add byte ptr ds:[ecx+ED041796], dh
0123784F 22B3 70E96E0F and dh, byte ptr ds:[ebx+F6EE970]
..........................................................................................
我這次沒有用記憶體映象斷點到OEP,下面的這個方法可以發現Stolen Code(如果有)+Oep二合一。
仍然是命令列斷點
tc ebp==12fff0 //當前EBP內容為12fff0就被中斷,略微看看就可以找到Stolen Code(如果有)或Oep
01237AE8 /3E:EB 02 jmp short 01237AED //一會就來到這裡,呵呵,C語言就開始有Stolen Code,往下全部用F7步過,轉標籤1 01237AEB |CD20 2EEB01C7 vxdcall C701EB2E
01237AF1 F3: prefix rep:
01237AF2 EB 02 jmp short 01237AF6
01237AF4 CD20 6A505589 vxdcall 8955506A
01237AFA 74 24 je short 01237B20
01237AFC 04 F3 add al, 0F3
01237AFE EB 02 jmp short 01237B02
01237B00 CD20 8D642404 vxdcall 424648D
01237B06 2E:EB 02 jmp short 01237B0B
..........................................................................................
標籤1
01237AED /2E:EB 01 jmp short 01237AF1
01237AF1 F3: prefix rep:
01237AF6 6A 50 push 50
01237AF8 55 push ebp
01237AF9 897424 04 mov dword ptr ss:[esp+4], esi
01237AFD F3: prefix rep:
01237B02 8D6424 04 lea esp, dword ptr ss:[esp+4]
01237B06 2E:EB 02 jmp short 01237B0B
01237B0B /EB 01 jmp short 01237B0E
01237B0E 0FBCF1 bsf esi, ecx
01237B11 36:EB 01 jmp short 01237B15
01237B15 C1D6 C6 rcl esi, 0C6
01237B18 EB 01 jmp short 01237B1B
01237B1B 8DB7 F77A2301 lea esi, dword ptr ds:[edi+1237AF7]
01237B21 2BF7 sub esi, edi
01237B23 FF56 32 call dword ptr ds:[esi+32]
01237B30 5E pop esi ; 01237B26
01237B31 2E:EB 02 jmp short 01237B36
01237B36 337424 28 xor esi, dword ptr ss:[esp+28] ; kernel32.77E68EC8
01237B3A 5E pop esi
01237B3B F2: prefix repne:
01237B3F 55 push ebp //Stolen Code第一句
01237B40 8BEC mov ebp, esp //執行完它後,EBP=ESP=12FFC0,打破了從跟蹤到這裡EBP的值一直為12fff0的情況,同時也讓我們也可以知道入口程式碼就在附近。Stolen Code第二句。
01237B42 6A FF push -1 //Stolen Code第三
01237B44 68 402E4800 push 482E40 //Stolen Code第四句
01237B49 68 B8E54400 push 44E5B8 //Stolen Code第五句
01237B4E 64:A1 00000000 mov eax, dword ptr fs:[0] //Stolen Code第六句
01237B54 F2: prefix repne:
01237B58 50 push eax //Stolen Code第七句
01237B59 64:8925 0000000>mov dword ptr fs:[0], esp //Stolen Code第八句
01237B60 83EC 58 sub esp, 58 //Stolen Code第九句
01237B63 F2: prefix repne:
01237B67 53 push ebx //Stolen Code第十句
01237B68 F2: prefix repne:
01237B6C 56 push esi //Stolen Code第十一句
01237B6D F2: prefix repne:
01237B71 57 push edi //Stolen Code第十二句
01237B72 8965 E8 mov dword ptr ss:[ebp-18], esp //Stolen Code第十三句
01237B75 3E:EB 02 jmp short 01237B7A
01237B7A F2: prefix repne:
01237B7E 68 04E44400 push 44E404
01237B83 68 467A2301 push 1237A46
01237B88 C3 retn
01237A46 /EB 01 jmp short 01237A49
01237A49 51 push ecx
01237A4A 57 push edi
01237A4B 9C pushfd
01237A4C FC cld
01237A4D BF 8A7A2301 mov edi, 1237A8A
01237A52 B9 5E140000 mov ecx, 145E
01237A57 F3:AA rep stos byte ptr es:[edi] //F7可以看著它迴圈執行Stolen Code,真是白痴,我們的Stolen Code已經到手了,它還在打掃戰場。
01237A59 9D popfd
01237A5A 5F pop edi
01237A5B 59 pop ecx
01237A5C C3 retn //返回到偽Oep
0044E3DE 0000 add byte ptr ds:[eax], al //真Oep
0044E3E0 0000 add byte ptr ds:[eax], al
0044E3E2 0000 add byte ptr ds:[eax], al
0044E3E4 0000 add byte ptr ds:[eax], al
0044E3E6 0000 add byte ptr ds:[eax], al
0044E3E8 0000 add byte ptr ds:[eax], al
0044E3EA 0000 add byte ptr ds:[eax], al
0044E3EC 0000 add byte ptr ds:[eax], al
0044E3EE 0000 add byte ptr ds:[eax], al
0044E3F0 0000 add byte ptr ds:[eax], al
0044E3F2 0000 add byte ptr ds:[eax], al
0044E3F4 0000 add byte ptr ds:[eax], al
0044E3F6 0000 add byte ptr ds:[eax], al
0044E3F8 0000 add byte ptr ds:[eax], al
0044E3FA 0000 add byte ptr ds:[eax], al
0044E3FC 0000 add byte ptr ds:[eax], al
0044E3FE 0000 add byte ptr ds:[eax], al
0044E400 0000 add byte ptr ds:[eax], al
0044E402 0000 add byte ptr ds:[eax], al
0044E404 FF15 EC314700 call dword ptr ds:[4731EC] //偽Oep
0044E40A 33D2 xor edx, edx
0044E40C 8AD4 mov dl, ah
0044E40E 8915 28F44900 mov dword ptr ds:[49F428], edx
0044E414 8BC8 mov ecx, eax
0044E416 81E1 FF000000 and ecx, 0FF
0044E41C 890D 24F44900 mov dword ptr ds:[49F424], ecx
0044E422 C1E1 08 shl ecx, 8
0044E425 03CA add ecx, edx
0044E427 890D 20F44900 mov dword ptr ds:[49F420], ecx
0044E42D C1E8 10 shr eax, 10
0044E430 A3 1CF44900 mov dword ptr ds:[49F41C], eax
0044E435 6A 01 push 1
0044E437 E8 882C0000 call VideoSpl.004510C4
..........................................................................................
整理一下Stolen Code
.......................................................
push ebp //Stolen Code
mov ebp, esp
push -1
push 4822F0
push 44E000 一共13句程式碼
mov eax, dword ptr fs:[0]
push eax
mov dword ptr fs:[0], esp
sub esp, 58
push ebx
push esi
push edi
mov dword ptr ss:[ebp-18], esp //Stolen Code
.......................................................
0044E3DE 55 push ebp //補好後複製程式碼到檔案中,直接用Loadpe脫殼。
0044E3DF 8BEC mov ebp, esp
0044E3E1 6A FF push -1
0044E3E3 68 402E4800 push VideoSpl.00482E40
0044E3E8 68 B8E54400 push VideoSpl.0044E5B8
0044E3ED 64:A1 00000000 mov eax, dword ptr fs:[0]
0044E3F3 50 push eax
0044E3F4 64:8925 0000000>mov dword ptr fs:[0], esp
0044E3FB 83EC 58 sub esp, 58
0044E3FE 53 push ebx
0044E3FF 56 push esi
0044E400 57 push edi
0044E401 8965 E8 mov dword ptr ss:[ebp-18], esp
0044E404 FF15 EC314700 call dword ptr ds:[4731EC]
0044E40A 33D2 xor edx, edx
0044E40C 8AD4 mov dl, ah
0044E40E 8915 28F44900 mov dword ptr ds:[49F428], edx
0044E414 8BC8 mov ecx, eax
0044E416 81E1 FF000000 and ecx, 0FF
0044E41C 890D 24F44900 mov dword ptr ds:[49F424], ecx
0044E422 C1E1 08 shl ecx, 8
0044E425 03CA add ecx, edx
0044E427 890D 20F44900 mov dword ptr ds:[49F420], ecx
0044E42D C1E8 10 shr eax, 10
0044E430 A3 1CF44900 mov dword ptr ds:[49F41C], eax
0044E435 6A 01 push 1
0044E437 E8 882C0000 call VideoSpl.004510C4
.......................................................
IAT修復
執行ImportREC,OEP填入4E3DE,自動搜尋,獲得輸入資訊,先用跟蹤等級1修復,然後用Asprotect1.3外掛修復剩下的幾個指標,修復先脫殼的Dumped.exe。
第二部分,去除暗樁
第二部分,去除暗樁
OD載入修復的檔案,F9執行。
狀態列/提示記憶體寫錯誤。
堆疊友好提示
0012AFD8 0040DD53 返回到 dumped_.0040DD53 來自 01221C08 //錯誤來自0040DD53
0012AFDC 00474758 ASCII ".RMF"
0012AFE0 00000004
0012AFE4 00000000
0012AFE8 00496850 dumped_.00496850
.......................................................
那麼Ctrl+G 去0040DD53 看看。
0040DD4D |. FF15 8CD64800 call dword ptr ds:[48D68C] //ds:[48D68C]指向殼中,跟蹤原程式發現其作用是簡單的防脫殼校驗。
0040DD53 |. E8 13F10500 call dumped_.0046CE6B //無可疑
Od載入原程式
0040DD4D |. FF15 8CD64800 call dword ptr ds:[48D68C]
01221C08 55 push ebp //F7跟進
01221C09 8BEC mov ebp, esp
01221C0B 53 push ebx
01221C0C 56 push esi
01221C0D 8B5D 0C mov ebx, dword ptr ss:[ebp+C]
01221C10 8B75 08 mov esi, dword ptr ss:[ebp+8]
01221C13 8BC3 mov eax, ebx
01221C15 E8 F208FFFF call 0121250C
01221C1A A3 A4632201 mov dword ptr ds:[12263A4], eax
01221C1F 8B15 A4632201 mov edx, dword ptr ds:[12263A4]
01221C25 8BC6 mov eax, esi
01221C27 8BCB mov ecx, ebx
01221C29 E8 EA09FFFF call 01212618
01221C2E 891D 347E2201 mov dword ptr ds:[1227E34], ebx
01221C34 53 push ebx
01221C35 8BCE mov ecx, esi
01221C37 8B15 307E2201 mov edx, dword ptr ds:[1227E30]
01221C3D A1 2C7E2201 mov eax, dword ptr ds:[1227E2C]
01221C42 E8 F9EEFFFF call 01220B40
01221C47 833D E47A2201 0>cmp dword ptr ds:[1227AE4], 0
01221C4E 75 05 jnz short 01221C55
01221C50 E8 4FFFFFFF call 01221BA4
01221C55 5E pop esi
01221C56 5B pop ebx
01221C57 5D pop ebp
01221C58 C2 0800 retn 8 //跟進,暈,好多程式碼啊,殼是不可能搬回的,它進殼中的過程我們沒必有知道,但它從殼中取出程式碼動態修改程式領空程式碼我們脫殼後是需要的,可是這個也不是解碼Call。
Ctrl+F 在程式空間裡查詢命令:retn 8 隨便找一個吧:
命令列 DD 48D68C
把48D68C處的 01221C08 改為:00403B74
複製到程式裡,儲存覆蓋檔案。
Ctrl+F2 重新載入,F9執行。
程式介面出來了,嘗試分割檔案立即出錯。
狀態列/提示記憶體寫錯誤。
堆疊友好提示
0012ADB8 0041116A 返回到 dumped_.0041116A 來自 01221BA4
0012ADBC 0012B8E8
0012ADC0 0012B8E8
0012ADC4 0040FF02 返回到 dumped_.0040FF02 來自 dumped_.00411160
0012ADC8 0012B8E8
0012ADCC 00474A68 dumped_.00474A68
那麼Ctrl+G 去0041116A 看看
00411164 . FF15 84D64800 call dword ptr ds:[48D684] //這裡搞的飛機,ds:[48D684]指向殼中,跟蹤原程式發現其作用是動態解碼。
0041116A . E9 76000000 jmp dumped_.004111E5
Btw:用Winxp脫殼時這裡堆疊出錯沒有提示。
01224350 3100 xor dword ptr ds:[eax], eax //只有再硬碟指紋過後的pre-dip中分析了。
01224352 EB 01 jmp short 01224355
01224354 68 648F0500 push 58F64
01224359 0000 add byte ptr ds:[eax], al
0122435B 00EB add bl, ch
0122435D 02E8 add ch, al
0122435F 0158 80 add dword ptr ds:[eax-80], ebx
01224362 3D A07E2201 cmp eax, 1227EA0
01224367 007414 E8 add byte ptr ss:[esp+edx-18], dh
0122436B 2D D2FFFF84 sub eax, 84FFFFD2
01224370 C0740B E8 F0 sal byte ptr ds:[ebx+ecx-18], 0F0
01224375 DEFF fdivp st(7), st
01224377 FF84C0 740289EC inc dword ptr ds:[eax+eax*8+EC890274]
0122437E B2 01 mov dl, 1
01224380 A1 140C2201 mov eax, dword ptr ds:[1220C14]
01224385 E8 06C9FFFF call 01220C90
..........................................................
0012FF3C 0012FF44 指標到下一個 SEH 記錄
0012FF40 01224307 SE 控制程式碼
0012FF44 0012FFE0 指標到下一個 SEH 記錄
0012FF48 01224C49 SE 控制程式碼
0012FF4C 0012FF90
0012FF50 01210000
0012FF54 011F0000
0012FF58 01224138
0012FF5C 0123A318 ASCII "ARInMgCAUXY="
0040D490 8B4424 04 mov eax, dword ptr ss:[esp+4]
0040D494 A3 84D64800 mov dword ptr ds:[48D684], eax //pre-dip4,校驗註冊碼,與硬碟指紋計算後生成一個密匙,在部分殼裡,會解壓N段程式碼起到防止脫殼的功能。
0040D499 C2 0400 retn 4
0040D49C 90 nop
0040D49D 90 nop
0040D49E 90 nop
0040D49F 90 nop
0040D4A0 8B4424 04 mov eax, dword ptr ss:[esp+4]
0040D4A4 A3 88D64800 mov dword ptr ds:[48D688], eax
0040D4A9 C2 0400 retn 4
0040D4AC 90 nop
0040D4AD 90 nop
0040D4AE 90 nop
0040D4AF 90 nop
0040D4B0 8B4424 04 mov eax, dword ptr ss:[esp+4]
0040D4B4 A3 8CD64800 mov dword ptr ds:[48D68C], eax
於是再脫殼程式,dd 48D684 下記憶體訪問斷點,分割時同樣斷在我們剛才錯誤的地方。
00411164 FF15 84D64800 call dword ptr ds:[48D684] //原程式和脫殼程式錯誤地方。
0041116A E9 76000000 jmp dumped_.004111E5
0041116F C590 74E92A3B lds edx, fword ptr ds:[eax+3B2AE974]
00411175 3E:46 inc esi
00411177 15 BD0C6586 adc eax, 86650CBD
0041117C C7 ??? ; 未知命令
0041117D 6E outs dx, byte ptr es:[edi]
0041117E EB 01 jmp short dumped_.00411181
00411180 D5 C2 aad 0C2
00411182 D4 4A aam 4A
00411184 D6 salc
00411185 45 inc ebp
00411186 18AA 3E4837A5 sbb byte ptr ds:[edx+A537483E], ch
0041118C 03DB add ebx, ebx
0041118E B8 68E13DED mov eax, ED3DE168
00411193 DF29 fild qword ptr ds:[ecx]
00411195 ED in eax, dx
00411196 FA cli
00411197 A4 movs byte ptr es:[edi], byte ptr ds:[esi>
00411198 B2 DA mov dl, 0DA
0041119A 8817 mov byte ptr ds:[edi], dl
0041119C AB stos dword ptr es:[edi]
01221BA4 833D A4632201 0>cmp dword ptr ds:[12263A4], 0 //跟進00411164
01221BAB 75 0D jnz short 01221BBA
01221BAD A1 407D2201 mov eax, dword ptr ds:[1227D40]
01221BB2 8B15 447D2201 mov edx, dword ptr ds:[1227D44]
01221BB8 EB 0B jmp short 01221BC5
01221BBA A1 A4632201 mov eax, dword ptr ds:[12263A4]
01221BBF 8B15 347E2201 mov edx, dword ptr ds:[1227E34]
01221BC5 85C0 test eax, eax
01221BC7 74 0B je short 01221BD4
01221BC9 85D2 test edx, edx
01221BCB 74 07 je short 01221BD4
01221BCD 52 push edx
01221BCE 50 push eax
01221BCF E8 60FDFFFF call 01221934
01221BD4 C3 retn //具體什麼作用返回就知道是動態解碼用的。
00411164 FF15 84D64800 call dword ptr ds:[48D684]
0041116A E9 01000000 jmp VideoSpl.00411170 //解碼後跳轉的位置都不一樣,早就計劃好了的。
0041116F FD std
00411170 8D4424 04 lea eax, dword ptr ss:[esp+4]
00411174 50 push eax
00411175 6A 04 push 4
00411177 56 push esi
00411178 68 A0FC4000 push VideoSpl.0040FCA0
0041117D 6A 00 push 0
0041117F 6A 00 push 0
00411181 FF15 5C334700 call dword ptr ds:[47335C]
00411187 85C0 test eax, eax
00411189 8986 D0450000 mov dword ptr ds:[esi+45D0], eax
0041118F 74 4E je short VideoSpl.004111DF
00411191 6A 01 push 1
00411193 8D8E 64290000 lea ecx, dword ptr ds:[esi+2964]
00411199 C786 E0450000 0>mov dword ptr ds:[esi+45E0], 0
004111A3 E8 5E250500 call VideoSpl.00463706
004111A8 6A 00 push 0
004111AA 8D8E 582E0000 lea ecx, dword ptr ds:[esi+2E58]
004111B0 E8 51250500 call VideoSpl.00463706
004111B5 8B8E 68330000 mov ecx, dword ptr ds:[esi+3368]
004111BB 6A 00 push 0
004111BD 6A 00 push 0
004111BF 68 02040000 push 402
004111C4 51 push ecx
004111C5 FF15 28364700 call dword ptr ds:[473628] ; USER32.SendMessageA
004111CB 8BCE mov ecx, esi
004111CD E8 5EF9FFFF call VideoSpl.00410B30
004111D2 8B96 D0450000 mov edx, dword ptr ds:[esi+45D0]
004111D8 52 push edx
004111D9 FF15 60334700 call dword ptr ds:[473360]
004111DF EB 04 jmp short VideoSpl.004111E5
004111E1 F9 stc
004111E2 BA C5305E83 mov edx, 835E30C5
004111E7 C404FF les eax, fword ptr ds:[edi+edi*8]
004111EA 25 88D64800 and eax, 48D688
004111EF 90 nop
004111F0 56 push esi
004111F1 8BF1 mov esi, ecx
004111F3 E8 45A50500 call VideoSpl.0046B73D
004111F8 F64424 08 01 test byte ptr ss:[esp+8], 1
004111FD 74 09 je short VideoSpl.00411208
004111FF 56 push esi
00411200 E8 A4ED0400 call VideoSpl.0045FFA9
00411205 83C4 04 add esp, 4
00411208 8BC6 mov eax, esi
0041120A 5E pop esi
0041120B C2 0400 retn 4 //為了不漏掉解碼程式碼也不多動腦筋,從0041116A到這個Call全部二程式複製。
二進位制貼上到脫殼程式的相應位置。
然後還是從程式裡找一個
0040102B . C3 retn
給
00411164 FF15 84D64800 call dword ptr ds:[48D684]
模擬解碼。
命令列DD 48D684
修改01221BA4 為 0040102B
複製所以修改到程式裡面,儲存為一個檔案,Ctrl+F2重新載入測試功能。
執行時仍然出錯,繼續找原因。
004111D9 . FF15 60334700 call dword ptr ds:[<&kernel32.ResumeThre>; ResumeThread
004111DF > EB 04 jmp short dumped_.004111E5
004111E1 F9 db F9
004111E2 BA db BA
004111E3 . C530 lds esi, fword ptr ds:[eax]
004111E5 > 5E pop esi
004111E6 . 83C4 04 add esp, 4
004111E9 .- FF25 88D64800 jmp dword ptr ds:[48D688] //剛才複製的程式碼這裡指向殼中。
01221BD8 833D A4632201 0>cmp dword ptr ds:[12263A4], 0 //跟進
01221BDF 75 0D jnz short 01221BEE
01221BE1 A1 407D2201 mov eax, dword ptr ds:[1227D40]
01221BE6 8B15 447D2201 mov edx, dword ptr ds:[1227D44]
01221BEC EB 0B jmp short 01221BF9
01221BEE A1 A4632201 mov eax, dword ptr ds:[12263A4]
01221BF3 8B15 347E2201 mov edx, dword ptr ds:[1227E34]
01221BF9 85C0 test eax, eax
01221BFB 74 09 je short 01221C06
01221BFD 85D2 test edx, edx
01221BFF 74 05 je short 01221C06
01221C01 E8 A6FDFFFF call 012219AC
01221C06 C3 retn //還是一個retn返回程式,簡單的驗證是否脫殼。
於是簡單應付它
004111E9 - FF25 88D64800 jmp dword ptr ds:[48D688]
004111EF 90 nop
改為
004111E9 C3 retn
004111EA 90 nop
004111EB 90 nop
004111EC 90 nop
004111ED 90 nop
004111EE 90 nop
004111EF 90 nop
儲存最後的修改,所以暗樁清除,成功分割檔案。
破解分析參考我的 AVI MPEG RM WMV Joiner4.11脫殼+破解,過程查不多。
0040DED8 |. E8 53D5FFFF call dumped_.0040B430
0040DEDD |. 8B5424 30 mov edx, dword ptr ss:[esp+30]
0040DEE1 |. 8B4C24 2C mov ecx, dword ptr ss:[esp+2C]
0040DEE5 |. 8B4424 28 mov eax, dword ptr ss:[esp+28]
0040DEE9 |. 33D1 xor edx, ecx
0040DEEB |. 83C4 14 add esp, 14
0040DEEE |. 3BC2 cmp eax, edx
0040DEF0 |. 75 0A jnz short dumped_.0040DEFC //爆破點,jz short 0040DEFC
0040DEF2 |. C786 00460000>mov dword ptr ds:[esi+4600], 1 //全域性標誌位賦值。
0040DEFC |> 39AE 00460000 cmp dword ptr ds:[esi+4600], ebp
0040DF02 |. 75 10 jnz short dumped_.0040DF14
這樣改法,執行分割時功能被Nop掉了,暈。
只好將
0040E8BC 8B86 00460000 mov eax, dword ptr ds:[esi+4600]
改為
0040E8BC . 8986 00460000 mov dword ptr ds:[esi+4600], eax
RVA=0000E8BC處為
8B―― 未註冊版
89―― 註冊版
沒時間仔細看,這個程式的變態度比它的兩個兄長
ASF-AVI-RM-WMV Repair V1.41
AVI MPEG RM WMV Joiner4.61
差多了。
相關文章
- ASF-AVI-RM-WMV Repair V1.41 脫殼去暗樁+漢化完美爆破2015-11-15AI
- ASProtect 1.23 SDK之 Aspack2.12r 主程式脫殼去暗樁2015-11-15
- 同益起名大師
3.29 脫殼加爆破2004-09-22
- 手動脫殼ASProtect 1.23beta21之Aspack2.12的主程式and暗樁分析2015-11-15
- UltraEdit32 v10找註冊碼+去暗樁2015-11-15
- 我已爆破3.62版,要小心啊!有暗樁的…… (15千字)AcitveX控制元件2001-11-06控制元件
- 殼的工作原理脫殼2013-04-10
- Grduw最新版破解過程(爆破keyfile,nag,時間限制,暗樁,字元加密)... (10千字)2001-10-16字元加密
- 壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼2015-11-15
- VBExplorer.exe脫殼教程
附脫殼指令碼2015-11-15指令碼
- ASProtect
1.23RC4 以殼解殼+暗樁修復+解除自校驗+破解――ArtCursors V3.99B32004-06-16
- ExeStealth 常用脫殼方法 + ExeStealth V2.72主程式脫殼2015-11-15
- 易語言3.5很暗的暗樁分析:)2015-11-15
- 以殼解殼--SourceRescuer脫殼手記破解分析2004-11-16
- 脫殼基本知識2015-11-15
- SoftDefender主程式脫殼2015-11-15
- International CueClub主程式脫殼(Softwrap殼)2004-09-12
- 脫殼----對用pecompact加殼的程式進行手動脫殼
(1千字)2000-07-30
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- 先分析,再脫殼(一)2003-09-04
- IconEdit2
脫殼2002-03-28
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- C32Asm外殼脫殼分析筆記2015-11-15ASM筆記
- Acprotect之完美解除安裝XP V9.15脫殼修復 (狗尾續貂)2015-11-15
- “愛加密” 動態脫殼法2014-11-21加密
- 360加固保動態脫殼2014-11-17
- EasyBoot5.03脫殼+暴破2004-11-17boot
- Armadillo 3.6主程式脫殼2015-11-15
- 脫殼----對用Petite2.2加殼的程式進行手動脫殼的一點分析
(5千字)2000-07-27
- 模擬跟蹤+修復方法之ACProtect脫殼――完美解除安裝XP V9.122015-11-15
- 教你如何寫UPX脫殼指令碼2019-05-11指令碼
- ☆Steel
Box☆脫殼――taos的New Protection2004-12-13
- 寫給新手
- 淺談脫殼方法2004-12-18
- EmbedPE
1.13 詳細分析和脫殼2005-01-03
- [翻譯]利用程式碼注入脫殼2015-11-15
- 脫殼後軟體減肥大法2015-11-15
- 一次簡單的脫殼2024-08-30
- Krypton
0.5加殼程式脫殼及輸入表修復記2004-10-06