吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11725|回复: 7
收起左侧

[分享] Obsidium V1.3.0.4加壳之VB脱壳

[复制链接]
Hmily 发表于 2008-10-19 22:56
【文章标题】: Obsidium V1.3.0.4加壳之VB脱壳
【文章作者】: 夜凉如水
【作者邮箱】: Estelle@yeah.net
【作者QQ号】: 272227777
【软件名称】: 外挂
【下载地址】: 自己搜索下载
【加壳方式】: Obsidium V1.3.0.4 -> Obsidium Software * Sign.By.haggar [Overlay] *
【编写语言】: VB6.0
【使用工具】: OllyDbg 等等
【操作平台】: SP3黑屏版本
【软件介绍】: 几年前的外挂,整理硬盘的时候发现了就顺便脱壳这个版本已经过期了
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
几年前的外挂,整理硬盘的时候发现了就顺便脱壳,拿出来和大家分享分享,有不正确的地方请指教。外挂作者别杀我 呵呵开个玩笑


首先HideNtDebgBit,CheckRemoteDebuggerPresent,Process32Next三项勾上即可隐藏OD。不忽略内存访问异常

0043D000 沈> /EB 02    jmp short 0043D004//ep
0043D002  |73 5A    jnb short 0043D05E
0043D004  \E8 25000000  call 0043D02E
0043D009 EB 04    jmp short 0043D00F
0043D00B 94     xchg eax, esp
0043D00C 6F     outs dx, dword ptr es:[edi]
0043D00D 01BF EB019F8B  add dword ptr [edi+8B9F01EB], edi

shift+F9 第十二次

0043ED73 8911     mov dword ptr [ecx], 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 [ebp+8]
0043F39B 90     nop
0043F39C 90     nop
0043F39D 90     nop
0043F39E 90     nop

F8一路走来到这里:

0043F563 E8 CB000000  call 0043F633//按一下F4即可走出这个循环
0043F568 ^ E2 EF    loopd short 0043F559
0043F56A 848A 8F8B1E7A  test byte ptr [edx+7A1E8B8F], 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 A0010000  call dword ptr [esi+1A0]
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 [esi+4]
0043F57E 90     nop
0043F57F 90     nop
0043F580 90     nop
0043F581 FFB6 54010000  push dword ptr [esi+154]
0043F587 FF96 84000000  call dword ptr [esi+84]
0043F58D 90     nop
0043F58E 90     nop
0043F58F 90     nop
0043F590 90     nop
0043F591 25 FF030000  and eax, 3FF
0043F596 90     nop
0043F597 90     nop
0043F598 90     nop
0043F599 90     nop
0043F59A 8DBC07 00010000lea edi, dword ptr [edi+eax+100]
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 A133EE00  lea esi, dword ptr [ebp+EE33A1]
0043F5BA 90     nop
0043F5BB 90     nop
0043F5BC 90     nop
0043F5BD 90     nop
0043F5BE B9 93000000  mov ecx, 93
0043F5C3 90     nop
0043F5C4 90     nop
0043F5C5 90     nop
0043F5C6 F3:A4    rep movs byte ptr es:[edi], 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 EF34EE00  lea eax, dword ptr [ebp+EE34EF]
0043F5E3 90     nop
0043F5E4 90     nop
0043F5E5 90     nop
0043F5E6 90     nop
0043F5E7 90     nop
0043F5E8 68 80000000  push 80
0043F5ED 50     push eax
0043F5EE FF76 04    push dword ptr [esi+4]
0043F5F1 FF76 20    push dword ptr [esi+20]
0043F5F4 FF96 84000000  call dword ptr [esi+84]
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 [esi+4]
0043F604 FF76 28    push dword ptr [esi+28]
0043F607 FF96 84000000  call dword ptr [esi+84]
0043F60D 90     nop
0043F60E 90     nop
0043F60F 90     nop
0043F610 90     nop
0043F611 90     nop
0043F612 FFE7     jmp edi //F7 跟进


0093C799 E8 00000000  call 0093C79E //
0093C79E EB 01    jmp short 0093C7A1
0093C7A0 AF     scas dword ptr es:[edi]
0093C7A1 5D     pop ebp
0093C7A2 EB 03    jmp short 0093C7A7
0093C7A4 A2 719D81ED  mov byte ptr [ED819D71], al
0093C7A9 A6     cmps byte ptr [esi], 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 D448ACFF  jmp 沈阳四冲.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 2C104000  jmp dword ptr [40102C]
0040106C - FF25 08104000  jmp dword ptr [401008]
00401072 - FF25 10104000  jmp dword ptr [401010]
00401078 - FF25 04104000  jmp dword ptr [401004]
0040107E - FF25 48104000  jmp dword ptr [401048]
00401084 - FF25 50104000  jmp dword ptr [401050]
0040108A - FF25 38104000  jmp dword ptr [401038]
00401090 - FF25 28104000  jmp dword ptr [401028]
00401096 - FF25 3C104000  jmp dword ptr [40103C]
0040109C - FF25 4C104000  jmp dword ptr [40104C]
004010A2 - FF25 30104000  jmp dword ptr [401030]
004010A8 - FF25 0C104000  jmp dword ptr [40100C]
004010AE - FF25 40104000  jmp dword ptr [401040]
004010B4 - FF25 24104000  jmp dword ptr [401024]
004010BA - FF25 34104000  jmp dword ptr [401034]
004010C0 - FF25 20104000  jmp dword ptr [401020]
004010C6 - FF25 14104000  jmp dword ptr [401014]
004010CC - FF25 1C104000  jmp dword ptr [40101C]
004010D2 - FF25 00104000  jmp dword ptr [401000]
004010D8 - FF25 44104000  jmp dword ptr [401044]
004010DE 0000     add byte ptr [eax], al
004010E0 60     pushad
004010E1 AE     scas byte ptr es:[edi]
004010E2 ^ 74 E2    je short 004010C6
004010E4 CB     retf
004010E5 E8 EEFFFFFF  call 004010D8 //来到这里


VB偸的比较少

Stole code push 00406E80

补上代码后:

004010E0  68 806E4000  push 00406E80
004010E5  E8 EEFFFFFF  call 004010D8
004010EA  0000     add byte ptr [eax], al


运行LordPE,完全Dump这个进程。发现IAT都加密了 现在来处理IAT


重新加载程序

许多壳对VB保护不佳。Obsidium也没有对这个程序使用上特色重定位功能,因此我们直接去搞定输入表了。
修改完上面几处去除反跟踪后,Ctrl+G:IsProcessorFeaturePresent

7C80AEBA ke>8BFF     mov edi, edi
7C80AEBC  55     push ebp
7C80AEBD  8BEC     mov ebp, esp
7C80AEBF  8B45 08    mov eax, dword ptr [ebp+8]
7C80AEC2  83F8 40    cmp eax, 40
7C80AEC5  73 0B    jnb short 7C80AED2
7C80AEC7  0FB680 7402FE7Fmovzx eax, byte ptr [eax+7FFE0274]
7C80AECE  5D     pop ebp
7C80AECF  C2 0400    retn 4 ////在函数末尾下断,避开壳的检测。Shift+F9中断后取消断点


在PE Header下面的第2区段设置内存访问断点。Shift+F9中断下来取消断点


00937FCA  893E     mov dword ptr [esi], edi//这里
00937FCC  90     nop
00937FCD  90     nop
00937FCE  90     nop
00937FCF  83C7 0C    add edi, 0C
00937FD2  90     nop
00937FD3  90     nop
00937FD4  90     nop
00937FD5  90     nop
00937FD6  83C6 04    add esi, 4
00937FD9  90     nop
00937FDA  90     nop
00937FDB  90     nop
00937FDC  90     nop
00937FDD  90     nop

下面关于还原IAT代码的修改,我直接借鉴前人有关OB脱壳文章中的方法,仍然有效

Ctrl+F在整个段块搜索命令:test word ptr ds:[esi],20


00937D3C  66:F706 2000 test word ptr [esi], 20

修改 test word ptr ds:[esi],8

00937D41  90     nop
00937D42  90     nop
00937D43  90     nop
00937D44  0F84 93000000  je 00937DDD

修改为 JE 00937ddd

00937D4A  90     nop
00937D4B  90     nop
00937D4C  90     nop
00937D4D  90     nop
00937D4E  90     nop
00937D4F  90     nop
00937D50  66:F706 0200 test word ptr [esi], 2
00937D55  90     nop
00937D56  90     nop
00937D57  90     nop
00937D58  90     nop
00937D59  90     nop
00937D5A  75 47    jnz short 00937DA3
00937D5C  90     nop
00937D5D  90     nop
00937D5E  90     nop
00937D5F  90     nop
00937D60  90     nop
00937D61  90     nop
00937D62  90     nop
00937D63  90     nop
00937D64  90     nop
00937D65  90     nop
00937D66  33C0     xor eax, eax
00937D68  90     nop
00937D69  90     nop
00937D6A  90     nop
00937D6B  66:C706 0400 mov word ptr [esi], 4
00937D70  90     nop
00937D71  90     nop
00937D72  90     nop
00937D73  90     nop
00937D74  90     nop
00937D75  90     nop
00937D76  6A 01    push 1
00937D78  50     push eax
00937D79  FF76 04    push dword ptr [esi+4]
00937D7C  50     push eax
00937D7D  FF75 18    push dword ptr [ebp+18]
00937D80  FF53 54    call dword ptr [ebx+54]
00937D83  90     nop
00937D84  90     nop
00937D85  90     nop
00937D86  90     nop
00937D87  85C0     test eax, eax
00937D89  90     nop
00937D8A  90     nop
00937D8B  90     nop
00937D8C  90     nop
00937D8D  0F84 86000000  je 00937E19

修改为 JNE 00937dd

00937D93  90     nop
00937D94  90     nop
00937D95  90     nop
00937D96  90     nop
00937D97  90     nop
00937D98  90     nop
00937D99  8907     mov dword ptr [edi], eax
00937D9B  90     nop
00937D9C  90     nop
00937D9D  90     nop
00937D9E  EB 3D    jmp short 00937DDD
00937DA0  90     nop
00937DA1  90     nop
00937DA2  90     nop
00937DA3  90     nop
00937DA4  90     nop
00937DA5  90     nop
00937DA6  90     nop
00937DA7  90     nop
00937DA8  66:C706 0400 mov word ptr [esi], 4
00937DAD  90     nop
00937DAE  90     nop
00937DAF  90     nop
00937DB0  90     nop
00937DB1  0FB756 02  movzx edx, word ptr [esi+2]
00937DB5  90     nop
00937DB6  90     nop
00937DB7  90     nop
00937DB8  90     nop
00937DB9  6A 01    push 1
00937DBB  52     push edx
00937DBC  6A 00    push 0
00937DBE  FF76 04    push dword ptr [esi+4]
00937DC1  FF75 18    push dword ptr [ebp+18]
00937DC4  FF53 54    call dword ptr [ebx+54]
00937DC7  90     nop
00937DC8  90     nop
00937DC9  90     nop
00937DCA  90     nop
00937DCB  90     nop
00937DCC  85C0     test eax, eax
00937DCE  90     nop
00937DCF  90     nop
00937DD0  90     nop
00937DD1  74 46    je short 00937E19

修改为 JNE 00937dd


00937DD3  90     nop
00937DD4  90     nop
00937DD5  90     nop
00937DD6  8907     mov dword ptr [edi], eax
00937DD8  90     nop
00937DD9  90     nop
00937DDA  90     nop
00937DDB  90     nop
00937DDC  90     nop
00937DDD  90     nop
00937DDE  90     nop
00937DDF  90     nop
00937DE0  83C6 08    add esi, 8
00937DE3  90     nop
00937DE4  90     nop
00937DE5  90     nop
00937DE6  90     nop
00937DE7  83C7 04    add edi, 4
00937DEA  90     nop
00937DEB  90     nop
00937DEC  90     nop
00937DED  90     nop
00937DEE  90     nop
00937DEF  90     nop
00937DF0  FF4D 08    dec dword ptr [ebp+8]
00937DF3  90     nop
00937DF4  90     nop
00937DF5  90     nop
00937DF6  ^ 0F85 3CFFFFFF  jnz 00937D38
00937DFC  90     nop
00937DFD  90     nop
00937DFE  90     nop
00937DFF  90     nop
00937E00  90     nop
00937E01  33C0     xor eax, eax
00937E03  90     nop
00937E04  90     nop
00937E05  90     nop
00937E06  90     nop
00937E07  40     inc eax
00937E08  90     nop
00937E09  90     nop
00937E0A  90     nop
00937E0B  90     nop
00937E0C  90     nop
00937E0D  90     nop
00937E0E  5F     pop edi
00937E0F  5E     pop esi
00937E10  5B     pop ebx
00937E11  5D     pop ebp
00937E12  C2 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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

unpack 发表于 2008-10-23 12:38
[s:40] 被看到了来膜拜学习了 [s:38] 没见过,看到大世界了
上帝不在爱我 发表于 2008-10-30 23:51
这个鸟壳只是冷了点,其强度还算不错,手脱的话还不会,看下大牛的文章!
chen886 发表于 2008-12-29 03:46
wangxvfeng101 发表于 2008-12-31 12:27
来到最后一次异常,
cpu:
009507B0    F7F0            DIV EAX
009507B2    EB 03           JMP SHORT 009507B7
009507B4    9A EC2FEB02 E76>CALL FAR 62E7:02EB2FEC                   ; 远调用

堆栈:
0012FA74   7C9232A8  ntdll.7C9232A8
0012FA78   0012FA9C  指向下一个 SEH 记录的指针
0012FA7C   009506F8  SE 处理器
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:[EBP+10]
0095070E    90              NOP
0095070F    90              NOP
00950710    90              NOP
00950711    8D92 D0000000   LEA EDX,DWORD PTR DS:[EDX+D0]
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:[ECX+B8],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:[ECX+4],EAX
00950739    90              NOP
0095073A    90              NOP
0095073B    90              NOP
0095073C    8941 0C         MOV DWORD PTR DS:[ECX+C],EAX
0095073F    90              NOP
00950740    90              NOP
00950741    90              NOP
00950742    90              NOP
00950743    90              NOP
00950744    8941 08         MOV DWORD PTR DS:[ECX+8],EAX
00950747    90              NOP
00950748    90              NOP
00950749    90              NOP
0095074A    8941 10         MOV DWORD PTR DS:[ECX+10],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:[ECX+18],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  
然后呢
wgz001 发表于 2009-1-1 12:38
00950722    8991 B8000000   MOV DWORD PTR DS:[ECX+B8],EDX
ctrl +G  去EDX里的地址
wangxvfeng101 发表于 2009-1-1 14:14
谢谢 wgz001
您说的是对付Obsidium V1.2的方法吧,Obsidium V1.3这个方法貌似是不行.
1.3的版本我想是这个样子的,申请一片内存把代码放到这个堆上来而原来的代码段,直到程序运行起来都是空数据.这是和1.2最大的区别.(我是这样想的,不知对不对)
wgz001 发表于 2009-1-1 14:24
楼上客气了
俺也菜鸟     看看超大的教程吧  [email=http://bbs.52pojie.cn/thread-14016-1-1.html]http://bbs.52pojie.cn/thread-14016-1-1.html[/email]
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表