Obsidium V1.3.0.4加壳之VB脱壳
【文章标题】: Obsidium V1.3.0.4加壳之VB脱壳【文章作者】: 夜凉如水
【作者邮箱】: Estelle@yeah.net
【作者QQ号】: 272227777
【软件名称】: 外挂
【下载地址】: 自己搜索下载
【加壳方式】: Obsidium V1.3.0.4 -> Obsidium Software * Sign.By.haggar *
【编写语言】: VB6.0
【使用工具】: OllyDBG 等等
【操作平台】: SP3黑屏版本
【软件介绍】: 几年前的外挂,整理硬盘的时候发现了就顺便脱壳这个版本已经过期了
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
几年前的外挂,整理硬盘的时候发现了就顺便脱壳,拿出来和大家分享分享,有不正确的地方请指教。外挂作者别杀我 呵呵开个玩笑
首先HideNtDebgBit,CheckRemoteDebuggerPresent,Process32Next三项勾上即可隐藏OD。不忽略内存访问异常
0043D000 沈> /EB 02 jmp short 0043D004//ep
0043D002|73 5A jnb short 0043D05E
0043D004\E8 25000000call 0043D02E
0043D009 EB 04 jmp short 0043D00F
0043D00B 94 xchg eax, esp
0043D00C 6F outs dx, dword ptr es:
0043D00D 01BF EB019F8Badd dword ptr , edi
shift+F9 第十二次
0043ED73 8911 mov dword ptr , edx
0043ED75 EB 01 jmp short 0043ED78
0043ED77 C7 ??? ; Unknown command
0043ED78 EB 01 jmp short 0043ED7B
0043ED7A 9E sahf
堆栈
0012FF94 0012FFE0Pointer to next SEH record
0012FF98 0043F391SE handler//注意这里
0012FF9C 7C930208ntdll.7C930208
在命令行设断:bp 0043f391
按Shift+F9跳过异常来到:
0043F391 55 push ebp
0043F392 8BEC mov ebp, esp
0043F394 90 nop
0043F395 90 nop
0043F396 90 nop
0043F397 90 nop
0043F398 8B4D 08 mov ecx, dword ptr
0043F39B 90 nop
0043F39C 90 nop
0043F39D 90 nop
0043F39E 90 nop
F8一路走来到这里:
0043F563 E8 CB000000call 0043F633//按一下F4即可走出这个循环
0043F568 ^ E2 EF loopd short 0043F559
0043F56A 848A 8F8B1E7Atest byte ptr , cl
解码去除花指令后;
0043F563 90 nop
0043F564 90 nop
0043F565 90 nop
0043F566 90 nop
0043F567 90 nop
0043F568 90 nop
0043F569 90 nop
0043F56A 90 nop
0043F56B 90 nop
0043F56C FF96 A0010000call dword ptr
0043F572 90 nop
0043F573 90 nop
0043F574 90 nop
0043F575 90 nop
0043F576 90 nop
0043F577 90 nop
0043F578 90 nop
0043F579 90 nop
0043F57A 90 nop
0043F57B 8B7E 04 mov edi, dword ptr
0043F57E 90 nop
0043F57F 90 nop
0043F580 90 nop
0043F581 FFB6 54010000push dword ptr
0043F587 FF96 84000000call dword ptr
0043F58D 90 nop
0043F58E 90 nop
0043F58F 90 nop
0043F590 90 nop
0043F591 25 FF030000and eax, 3FF
0043F596 90 nop
0043F597 90 nop
0043F598 90 nop
0043F599 90 nop
0043F59A 8DBC07 00010000lea edi, dword ptr
0043F5A1 90 nop
0043F5A2 90 nop
0043F5A3 90 nop
0043F5A4 90 nop
0043F5A5 90 nop
0043F5A6 90 nop
0043F5A7 56 push esi
0043F5A8 90 nop
0043F5A9 90 nop
0043F5AA 90 nop
0043F5AB 90 nop
0043F5AC 90 nop
0043F5AD 57 push edi
0043F5AE 90 nop
0043F5AF 90 nop
0043F5B0 90 nop
0043F5B1 90 nop
0043F5B2 90 nop
0043F5B3 90 nop
0043F5B4 8DB5 A133EE00lea esi, dword ptr
0043F5BA 90 nop
0043F5BB 90 nop
0043F5BC 90 nop
0043F5BD 90 nop
0043F5BE B9 93000000mov ecx, 93
0043F5C3 90 nop
0043F5C4 90 nop
0043F5C5 90 nop
0043F5C6 F3:A4 rep movs byte ptr es:, byte ptr>//这里F7 F8步过
0043F5C8 90 nop
0043F5C9 90 nop
0043F5CA 90 nop
0043F5CB 90 nop
0043F5CC 5F pop edi
0043F5CD 90 nop
0043F5CE 90 nop
0043F5CF 90 nop
0043F5D0 5E pop esi
0043F5D1 90 nop
0043F5D2 90 nop
0043F5D3 90 nop
0043F5D4 90 nop
0043F5D5 90 nop
0043F5D6 90 nop
0043F5D7 90 nop
0043F5D8 90 nop
0043F5D9 90 nop
0043F5DA 90 nop
0043F5DB 90 nop
0043F5DC 90 nop
0043F5DD 8D85 EF34EE00lea eax, dword ptr
0043F5E3 90 nop
0043F5E4 90 nop
0043F5E5 90 nop
0043F5E6 90 nop
0043F5E7 90 nop
0043F5E8 68 80000000push 80
0043F5ED 50 push eax
0043F5EE FF76 04 push dword ptr
0043F5F1 FF76 20 push dword ptr
0043F5F4 FF96 84000000call dword ptr
0043F5FA 90 nop
0043F5FB 90 nop
0043F5FC 90 nop
0043F5FD 6A 7E push 7E
0043F5FF 57 push edi
0043F600 50 push eax
0043F601 FF76 04 push dword ptr
0043F604 FF76 28 push dword ptr
0043F607 FF96 84000000call dword ptr
0043F60D 90 nop
0043F60E 90 nop
0043F60F 90 nop
0043F610 90 nop
0043F611 90 nop
0043F612 FFE7 jmp edi //F7 跟进
0093C799 E8 00000000call 0093C79E //
0093C79E EB 01 jmp short 0093C7A1
0093C7A0 AF scas dword ptr es:
0093C7A1 5D pop ebp
0093C7A2 EB 03 jmp short 0093C7A7
0093C7A4 A2 719D81EDmov byte ptr , al
0093C7A9 A6 cmps byte ptr , byte ptr es:[ed>
0093C7AA 33EE xor ebp, esi
0093C7AC 00EB add bl, ch
0093C7AE 04 1B add al, 1B
0093C7B0 94 xchg eax, esp
一路F7 来到这里
0093C80C - E9 D448ACFFjmp 沈阳四冲.004010E5 //
0093C811 90 nop
0093C812 90 nop
0093C813 90 nop
0093C814 90 nop
0093C815 90 nop
0093C816 90 nop
看堆栈
0012FFC0 00406E80沈阳四冲.00406E80//注意这里以后要用到
F7 跟进
00401066 - FF25 2C104000jmp dword ptr
0040106C - FF25 08104000jmp dword ptr
00401072 - FF25 10104000jmp dword ptr
00401078 - FF25 04104000jmp dword ptr
0040107E - FF25 48104000jmp dword ptr
00401084 - FF25 50104000jmp dword ptr
0040108A - FF25 38104000jmp dword ptr
00401090 - FF25 28104000jmp dword ptr
00401096 - FF25 3C104000jmp dword ptr
0040109C - FF25 4C104000jmp dword ptr
004010A2 - FF25 30104000jmp dword ptr
004010A8 - FF25 0C104000jmp dword ptr
004010AE - FF25 40104000jmp dword ptr
004010B4 - FF25 24104000jmp dword ptr
004010BA - FF25 34104000jmp dword ptr
004010C0 - FF25 20104000jmp dword ptr
004010C6 - FF25 14104000jmp dword ptr
004010CC - FF25 1C104000jmp dword ptr
004010D2 - FF25 00104000jmp dword ptr
004010D8 - FF25 44104000jmp dword ptr
004010DE 0000 add byte ptr , al
004010E0 60 pushad
004010E1 AE scas byte ptr es:
004010E2 ^ 74 E2 je short 004010C6
004010E4 CB retf
004010E5 E8 EEFFFFFFcall 004010D8 //来到这里
VB偸的比较少
Stole code push 00406E80
补上代码后:
004010E068 806E4000push 00406E80
004010E5E8 EEFFFFFFcall 004010D8
004010EA0000 add byte ptr , al
运行LordPE,完全Dump这个进程。发现IAT都加密了 现在来处理IAT
重新加载程序
许多壳对VB保护不佳。Obsidium也没有对这个程序使用上特色重定位功能,因此我们直接去搞定输入表了。
修改完上面几处去除反跟踪后,Ctrl+G:IsProcessorFeaturePresent
7C80AEBA ke>8BFF mov edi, edi
7C80AEBC55 push ebp
7C80AEBD8BEC mov ebp, esp
7C80AEBF8B45 08 mov eax, dword ptr
7C80AEC283F8 40 cmp eax, 40
7C80AEC573 0B jnb short 7C80AED2
7C80AEC70FB680 7402FE7Fmovzx eax, byte ptr
7C80AECE5D pop ebp
7C80AECFC2 0400 retn 4 ////在函数末尾下断,避开壳的检测。Shift+F9中断后取消断点
在PE Header下面的第2区段设置内存访问断点。Shift+F9中断下来取消断点
00937FCA893E mov dword ptr , edi//这里
00937FCC90 nop
00937FCD90 nop
00937FCE90 nop
00937FCF83C7 0C add edi, 0C
00937FD290 nop
00937FD390 nop
00937FD490 nop
00937FD590 nop
00937FD683C6 04 add esi, 4
00937FD990 nop
00937FDA90 nop
00937FDB90 nop
00937FDC90 nop
00937FDD90 nop
下面关于还原IAT代码的修改,我直接借鉴前人有关OB脱壳文章中的方法,仍然有效
Ctrl+F在整个段块搜索命令:test word ptr ds:,20
00937D3C66:F706 2000 test word ptr , 20
修改 test word ptr ds:,8
00937D4190 nop
00937D4290 nop
00937D4390 nop
00937D440F84 93000000je 00937DDD
修改为 JE 00937ddd
00937D4A90 nop
00937D4B90 nop
00937D4C90 nop
00937D4D90 nop
00937D4E90 nop
00937D4F90 nop
00937D5066:F706 0200 test word ptr , 2
00937D5590 nop
00937D5690 nop
00937D5790 nop
00937D5890 nop
00937D5990 nop
00937D5A75 47 jnz short 00937DA3
00937D5C90 nop
00937D5D90 nop
00937D5E90 nop
00937D5F90 nop
00937D6090 nop
00937D6190 nop
00937D6290 nop
00937D6390 nop
00937D6490 nop
00937D6590 nop
00937D6633C0 xor eax, eax
00937D6890 nop
00937D6990 nop
00937D6A90 nop
00937D6B66:C706 0400 mov word ptr , 4
00937D7090 nop
00937D7190 nop
00937D7290 nop
00937D7390 nop
00937D7490 nop
00937D7590 nop
00937D766A 01 push 1
00937D7850 push eax
00937D79FF76 04 push dword ptr
00937D7C50 push eax
00937D7DFF75 18 push dword ptr
00937D80FF53 54 call dword ptr
00937D8390 nop
00937D8490 nop
00937D8590 nop
00937D8690 nop
00937D8785C0 test eax, eax
00937D8990 nop
00937D8A90 nop
00937D8B90 nop
00937D8C90 nop
00937D8D0F84 86000000je 00937E19
修改为 JNE 00937dd
00937D9390 nop
00937D9490 nop
00937D9590 nop
00937D9690 nop
00937D9790 nop
00937D9890 nop
00937D998907 mov dword ptr , eax
00937D9B90 nop
00937D9C90 nop
00937D9D90 nop
00937D9EEB 3D jmp short 00937DDD
00937DA090 nop
00937DA190 nop
00937DA290 nop
00937DA390 nop
00937DA490 nop
00937DA590 nop
00937DA690 nop
00937DA790 nop
00937DA866:C706 0400 mov word ptr , 4
00937DAD90 nop
00937DAE90 nop
00937DAF90 nop
00937DB090 nop
00937DB10FB756 02movzx edx, word ptr
00937DB590 nop
00937DB690 nop
00937DB790 nop
00937DB890 nop
00937DB96A 01 push 1
00937DBB52 push edx
00937DBC6A 00 push 0
00937DBEFF76 04 push dword ptr
00937DC1FF75 18 push dword ptr
00937DC4FF53 54 call dword ptr
00937DC790 nop
00937DC890 nop
00937DC990 nop
00937DCA90 nop
00937DCB90 nop
00937DCC85C0 test eax, eax
00937DCE90 nop
00937DCF90 nop
00937DD090 nop
00937DD174 46 je short 00937E19
修改为 JNE 00937dd
00937DD390 nop
00937DD490 nop
00937DD590 nop
00937DD68907 mov dword ptr , eax
00937DD890 nop
00937DD990 nop
00937DDA90 nop
00937DDB90 nop
00937DDC90 nop
00937DDD90 nop
00937DDE90 nop
00937DDF90 nop
00937DE083C6 08 add esi, 8
00937DE390 nop
00937DE490 nop
00937DE590 nop
00937DE690 nop
00937DE783C7 04 add edi, 4
00937DEA90 nop
00937DEB90 nop
00937DEC90 nop
00937DED90 nop
00937DEE90 nop
00937DEF90 nop
00937DF0FF4D 08 dec dword ptr
00937DF390 nop
00937DF490 nop
00937DF590 nop
00937DF6^ 0F85 3CFFFFFFjnz 00937D38
00937DFC90 nop
00937DFD90 nop
00937DFE90 nop
00937DFF90 nop
00937E0090 nop
00937E0133C0 xor eax, eax
00937E0390 nop
00937E0490 nop
00937E0590 nop
00937E0690 nop
00937E0740 inc eax
00937E0890 nop
00937E0990 nop
00937E0A90 nop
00937E0B90 nop
00937E0C90 nop
00937E0D90 nop
00937E0E5F pop edi
00937E0F5E pop esi
00937E105B pop ebx
00937E115D pop ebp
00937E12C2 1400 retn 14
在00937e12处下断,Shift+F9后输入表处理完毕
在00401000处向下查看,可以发现结束地址是00401050
运行ImportREC,选择这个进程,填入RVA=00001000、Size=00000050,获取输入表后发现有一个无效指针
0040100066103C99MSVBVM60.MethCallEngine
00401004660E657BMSVBVM60.rtcAnsiValueBstr
00401008660DC5F3MSVBVM60.rtcMsgBox
0040100C660E6AE5MSVBVM60.rtcTrimVar
00401010660E64F3MSVBVM60.rtcMidCharVar
00401014660C9A94MSVBVM60.EVENT_SINK_AddRef
00401018003F0048
0040101C660C9AA7MSVBVM60.EVENT_SINK_Release
00401020660C99A5MSVBVM60.EVENT_SINK_QueryInterface
00401024660E3CA4MSVBVM60.__vbaExceptHandler
00401028660E73BAMSVBVM60.rtcStringVar
0040102C660E0408MSVBVM60.rtcVarBstrFromAnsi
00401030660E8456MSVBVM60.rtcStrConvVar2
00401034660FD05DMSVBVM60.ProcCallEngine
00401038660D4F71MSVBVM60.rtcDir
0040103C660E0833MSVBVM60.rtcHexVarFromVar
00401040660DCFA4MSVBVM60.rtcImmediateIf
004010446600357CMSVBVM60.ThunRTMain
00401048660E6271MSVBVM60.rtcLeftCharVar
0040104C660E6375MSVBVM60.rtcRightCharVar
00401050660D2DD4MSVBVM60.rtcR8ValFromBstr
VB的东东一般加密的特殊函数是DllFunctionCall。处理方法很简单 跟踪就可以得到。
修正ImportREC里面的OEP RVA=004010E0 ,ait RAV= 401000 SIZE= 50FixDump,终于整理完毕了.
--------------------------------------------------------------------------------
【经验总结】
Obsidium 并不可怕 只要你有耐心 文章写得比较乱对付看吧 破解自己去研究就不写
--------------------------------------------------------------------------------
【版权声明】: 本文原创于Unpack论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年10月19日 15:37:42 被看到了来膜拜学习了 没见过,看到大世界了 这个鸟壳只是冷了点,其强度还算不错,手脱的话还不会,看下大牛的文章! 要是,能做一个 视频就更好了` 来到最后一次异常,
cpu:
009507B0 F7F0 DIV EAX
009507B2 EB 03 JMP SHORT 009507B7
009507B4 9A EC2FEB02 E76>CALL FAR 62E7:02EB2FEC ; 远调用
堆栈:
0012FA74 7C9232A8ntdll.7C9232A8
0012FA78 0012FA9C指向下一个 SEH 记录的指针
0012FA7C 009506F8SE 处理器
0012FA80 00000000
0012FA84/0012FAA8
0012FA88|7C9232A8返回到 ntdll.7C9232A8
断到此里:
009506F8 55 PUSH EBP
009506F9 8BEC MOV EBP,ESP
009506FB 90 NOP
009506FC 90 NOP
009506FD 90 NOP
009506FE 90 NOP
009506FF E8 00000000 CALL 00950704
00950704 90 NOP
00950705 90 NOP
00950706 90 NOP
00950707 5A POP EDX
00950708 90 NOP
00950709 90 NOP
0095070A 90 NOP
0095070B 8B4D 10 MOV ECX,DWORD PTR SS:
0095070E 90 NOP
0095070F 90 NOP
00950710 90 NOP
00950711 8D92 D0000000 LEA EDX,DWORD PTR DS:
00950717 90 NOP
00950718 90 NOP
00950719 90 NOP
0095071A 90 NOP
0095071B 33C0 XOR EAX,EAX
0095071D 90 NOP
0095071E 90 NOP
0095071F 90 NOP
00950720 90 NOP
00950721 90 NOP
00950722 8991 B8000000 MOV DWORD PTR DS:,EDX
00950728 90 NOP
00950729 90 NOP
0095072A 90 NOP
0095072B 90 NOP
0095072C 90 NOP
0095072D 90 NOP
0095072E 90 NOP
0095072F 90 NOP
00950730 90 NOP
00950731 90 NOP
00950732 90 NOP
00950733 90 NOP
00950734 90 NOP
00950735 90 NOP
00950736 8941 04 MOV DWORD PTR DS:,EAX
00950739 90 NOP
0095073A 90 NOP
0095073B 90 NOP
0095073C 8941 0C MOV DWORD PTR DS:,EAX
0095073F 90 NOP
00950740 90 NOP
00950741 90 NOP
00950742 90 NOP
00950743 90 NOP
00950744 8941 08 MOV DWORD PTR DS:,EAX
00950747 90 NOP
00950748 90 NOP
00950749 90 NOP
0095074A 8941 10 MOV DWORD PTR DS:,EAX
0095074D 90 NOP
0095074E 90 NOP
0095074F 90 NOP
00950750 90 NOP
00950751 90 NOP
00950752 90 NOP
00950753 C741 18 5500333>MOV DWORD PTR DS:,33330055
0095075A 90 NOP
0095075B 90 NOP
0095075C 90 NOP
0095075D 90 NOP
0095075E 90 NOP
0095075F 90 NOP
00950760 90 NOP
00950761 5D POP EBP
00950762 C3 RETN 单步f8到这里:0012F6B0 7C9232A8返回到ntdll.7C9232A8
然后呢 00950722 8991 B8000000 MOV DWORD PTR DS:,EDX
ctrl +G去EDX里的地址 谢谢 wgz001
您说的是对付Obsidium V1.2的方法吧,Obsidium V1.3这个方法貌似是不行.
1.3的版本我想是这个样子的,申请一片内存把代码放到这个堆上来而原来的代码段,直到程序运行起来都是空数据.这是和1.2最大的区别.(我是这样想的,不知对不对) 楼上客气了
俺也菜鸟 看看超大的教程吧http://bbs.52pojie.cn/thread-14016-1-1.html]http://bbs.52pojie.cn/thread-14016-1-1.html
页:
[1]