Armadillo加壳的dll脱壳:Visual.Assist.X
 

标题:Armadillo加壳的dll脱壳:Visual.Assist.X
链接:http://www.unpack.cn/viewthread.php?tid=17307
贴者:freecat
日期:2007-9-10 18:30

Visual.Assist.X.V10
va_x.dll

peid查出为 Armadillo 4.x 加的壳

od加载 va_x.dll,提示内存错不理 点确定!

下断he VirtualAlloc 按F9
然后hd VirtualAlloc取消断点 按Alt+F9返回

00993F3C    6A 40                    PUSH 40
00993F3E    68 00200000              PUSH 2000
00993F43    FFB5 64C6FFFF            PUSH DWORD PTR SS:[EBP-399C]
00993F49    FF35 80E89A00            PUSH DWORD PTR DS:[9AE880]
00993F4F    FF15 A4F19900            CALL NEAR DWORD PTR DS:[99F1A4]  ; kernel32.VirtualAlloc
00993F55    8985 6CC6FFFF            MOV DWORD PTR SS:[EBP-3994], EAX //返回到这
00993F5B    83BD 6CC6FFFF 00         CMP DWORD PTR SS:[EBP-3994], 0
00993F62    74 33                    JE SHORT 00993F97
00993F64    6A 40                    PUSH 40
00993F66    68 00100000              PUSH 1000
00993F6B    FFB5 64C6FFFF            PUSH DWORD PTR SS:[EBP-399C]
00993F71    FF35 80E89A00            PUSH DWORD PTR DS:[9AE880]       
00993F77    FF15 A4F19900            CALL NEAR DWORD PTR DS:[99F1A4]  ; kernel32.VirtualAlloc
00993F7D    8985 6CC6FFFF            MOV DWORD PTR SS:[EBP-3994], EAX
下断he 993F49 Ctrl+F2 重来
在提示内存错不理 点确定

下断he GetModuleHandleA 按shift+F9
中断后按Alt+F9
hd GetModuleHandleA 取消断点 
00979A27    FF15 CCF09900            CALL NEAR DWORD PTR DS:[99F0CC]  ; kernel32.GetModuleHandleA
00979A2D    8B0D 40A19A00            MOV ECX, DWORD PTR DS:[9AA140]   //返回到这
00979A33    89040E                   MOV DWORD PTR DS:[ESI+ECX], EAX
00979A36    A1 40A19A00              MOV EAX, DWORD PTR DS:[9AA140]
00979A3B    393C06                   CMP DWORD PTR DS:[ESI+EAX], EDI
00979A3E    75 16                    JNZ SHORT 00979A56
00979A40    8D85 B4FEFFFF            LEA EAX, DWORD PTR SS:[EBP-14C]
00979A46    50                       PUSH EAX
00979A47    FF15 D4F09900            CALL NEAR DWORD PTR DS:[99F0D4]  ; kernel32.LoadLibraryA
00979A4D    8B0D 40A19A00            MOV ECX, DWORD PTR DS:[9AA140]
00979A53    89040E                   MOV DWORD PTR DS:[ESI+ECX], EAX
00979A56    A1 40A19A00              MOV EAX, DWORD PTR DS:[9AA140]
00979A5B    393C06                   CMP DWORD PTR DS:[ESI+EAX], EDI
00979A5E    0F84 B0000000            JE 00979B14                      //Magic JMP 改 jmp 00979B14
00979A64    33C9                     XOR ECX, ECX

然后按F9 中断在993F49

这时看一下 009AE880里的数据 是03CF0000 
嗯戊成改成 1F200000吧
改好后壳会自动帮你调整调用到 jmp 03CFxxxx 的地址为 jmp 1F20xxxx的了

好了Alt+M 在第二个段下内存读断点吧(直接F2也行,不用一会取消哦 ~)

然后按F9~
中断在OEP了
LordPE 上场了 先完全Dump吧
再来部分Deump 地址:1F200000 大小:20000 就是上面我改成1F200000的段哦

接着就用ImportREC 来修复IAT了
由于此DLL加载后没有进行重定位,所以保留 Use PE Header From Disk 选项
(注意:Create New IA不能勾)
oep:142ac8 点IAT AutoSearch 自动找到
RVA:001B6000 Size: 00000ABC
CUT掉无效的函数
考虑到文件大小的问题IAT放回原来的附近地址吧
fly大哥说Armadillo没有清掉输入表的函数DLL名,
当找到很多00中的输入表中函数DLL名处就可以放输入表了
WinHEX打开Dumper.dll 搜KERNEL32.dll找到附近好多00的就是了
嗯
放在 0020C0C0 吧,当然大小要算好够用才行
0020CF40   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0020CF50   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0020CF60   00 00 00 00 00 00 4B 45  52 4E 45 4C 33 32 2E 64   ......KERNEL32.d
0020CF70   6C 6C 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ll..............
0020CF80   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
取消Add new sectio 的勾
填入新的RVA 0020C0A0 FixDump
修正001B6000段VSize和RSize为0020F000-001B6000=00059000

由于上面输入表的修复覆盖了输出表,所以我们要把输出表重新挪个位置
复制dumper.dll
运行PeMove把复件 Dumped.dll拖进去
Export Table's File Offset填入001B5300,
点击Move后把001B5300处的输出表用WinHEX复制写入到dumped_.dll中,
修正输出表所在区段0019E000段的VSize和RSize为001B6000-0019E000=00018000
再用LordPE修正Export Table RVA

(注意:不知道为什么做完这步后导入表中总有几个DLL的函数是乱了的~
       导致这是用od加载总出错,有时说XXXDLL失败~~~~~~
       后来重做用ImportREC 来修复IAT了这步,把IAT再写一次才行)


重定位表修复
Armadillo对于DLL比较友好,没有加密重定位表,因此就没有再调试时跟踪此重定位处理了
LordPE察看区段,“.reloc”段RVA即是重定位表RVA,Size看看其结尾的00就知道了
RVA: 276000 Size: 2975b7-276000 = 215B7

脱壳文件的优化
用LordPE删除“.reloc”区段下的所有壳区段,记住第一个壳区段“.text1”段的RVA=002A6000
用WinHex移除0X002A6000至末尾的所有数据,另存为unDumped_.dll。好了,壳数据基本清理完了

用DT_FixRes修复资源。DT_FixRes打开修复前的dumped.dll
NewRva=002A6000,FileAlignment=1000,Dump Resource,获得rsrc.bin
用LordPE把rsrc.bin载入UnPacKed.dll,修正Resource RVA=002A6000

最后LordPE导入Dumped.dmp的数据也就是刚才1F200000的数据了
修正区段的RVA: 1F200000 - 1ED00000 = 500000

LorePE只选验证PE 重建一下文件

(注意一下原来Win2003对导入表所在区段的属性有限制 C0000040即可)

改回原文件名 va_a.dll
运行vs试一下
出来一个提示License Error
脱壳应没问题了
接着来下一步

看导出的函数 ComSetup
1ED91440 >  83EC 24                     SUB ESP, 24
1ED91443    E8 98F8FAFF                 CALL VA_X.1ED40CE0                                    ; 认证的函数 返回1 表示成功 0 表示失败
1ED91448    85C0                        TEST EAX, EAX
1ED9144A    75 04                       JNZ SHORT VA_X.1ED91450
1ED9144C    83C4 24                     ADD ESP, 24
1ED9144F    C3                          RETN
1ED91450    F605 08EEF11E 01            TEST BYTE PTR DS:[1EF1EE08], 1
1ED91457    74 0D                       JE SHORT VA_X.1ED91466
1ED91459    68 2815EC1E                 PUSH VA_X.1EEC1528                                    ; ASCII "ComSetup"

进1ED40CE0看看
...
1ED4120C    68 74AFEB1E                 PUSH VA_X.1EEBAF74                                    ; ASCII "DAYSINSTALLED"
1ED41211    50                          PUSH EAX
1ED41212    E8 99FAFFFF                 CALL VA_X.1ED40CB0
1ED41217    8B08                        MOV ECX, DWORD PTR DS:[EAX]
1ED41219    8B69 F4                     MOV EBP, DWORD PTR DS:[ECX-C]
1ED4121C    8B4424 34                   MOV EAX, DWORD PTR SS:[ESP+34]
1ED41220    83C4 14                     ADD ESP, 14
1ED41223    3BEB                        CMP EBP, EBX
1ED41225    0F944424 13                 SETE BYTE PTR SS:[ESP+13]
1ED4122A    83C0 F0                     ADD EAX, -10
1ED4122D    8D50 0C                     LEA EDX, DWORD PTR DS:[EAX+C]
1ED41230    8BCF                        MOV ECX, EDI
1ED41232    F0:0FC10A                   LOCK XADD DWORD PTR DS:[EDX], ECX
1ED41236    49                          DEC ECX
1ED41237    85C9                        TEST ECX, ECX
1ED41239    7F 08                       JG SHORT VA_X.1ED41243
1ED4123B    8B08                        MOV ECX, DWORD PTR DS:[EAX]
1ED4123D    8B11                        MOV EDX, DWORD PTR DS:[ECX]
1ED4123F    50                          PUSH EAX
1ED41240    FF52 04                     CALL DWORD PTR DS:[EDX+4]
1ED41243    385C24 13                   CMP BYTE PTR SS:[ESP+13], BL                          ; License是否正确,正确就跳向1ED41060,否则返回0
1ED41247    74 47                       JE SHORT VA_X.1ED41290                                ; 修改为jmp 1ed41290
1ED41249    A1 C44CF21E                 MOV EAX, DWORD PTR DS:[1EF24CC4]
1ED4124E    53                          PUSH EBX
1ED4124F    68 60AFEB1E                 PUSH VA_X.1EEBAF60                                    ; ASCII "License"
1ED41254    68 58AFEB1E                 PUSH VA_X.1EEBAF58                                    ; ASCII "Error"
1ED41259    50                          PUSH EAX
1ED4125A    FF15 2C69EB1E               CALL DWORD PTR DS:[<&user32.MessageBoxA>]             ; USER32.MessageBoxA
1ED41260    8D46 F0                     LEA EAX, DWORD PTR DS:[ESI-10]
1ED41263    897C24 54                   MOV DWORD PTR SS:[ESP+54], EDI
1ED41267    8D48 0C                     LEA ECX, DWORD PTR DS:[EAX+C]
1ED4126A    F0:0FC139                   LOCK XADD DWORD PTR DS:[ECX], EDI
1ED4126E    4F                          DEC EDI
1ED4126F    85FF                        TEST EDI, EDI
1ED41271    7F 08                       JG SHORT VA_X.1ED4127B
1ED41273    8B08                        MOV ECX, DWORD PTR DS:[EAX]
1ED41275    8B11                        MOV EDX, DWORD PTR DS:[ECX]
1ED41277    50                          PUSH EAX
1ED41278    FF52 04                     CALL DWORD PTR DS:[EDX+4]
1ED4127B    5D                          POP EBP
1ED4127C    5F                          POP EDI
1ED4127D    5E                          POP ESI
1ED4127E    33C0                        XOR EAX, EAX
1ED41280    5B                          POP EBX
1ED41281    8B4C24 3C                   MOV ECX, DWORD PTR SS:[ESP+3C]
1ED41285    64:890D 00000000            MOV DWORD PTR FS:[0], ECX
1ED4128C    83C4 48                     ADD ESP, 48
1ED4128F    C3                          RETN
1ED41290    8D4424 38                   LEA EAX, DWORD PTR SS:[ESP+38]                        ; License 正确定到这进一步验证
1ED41294    68 50AFEB1E                 PUSH VA_X.1EEBAF50                                    ; ASCII "EXPIRED"
1ED41299    50                          PUSH EAX
1ED4129A    E8 11F3FFFF                 CALL VA_X.1ED405B0
1ED4129F    8BF0                        MOV ESI, EAX
1ED412A1    8D4C24 3C                   LEA ECX, DWORD PTR SS:[ESP+3C]
1ED412A5    68 74AFEB1E                 PUSH VA_X.1EEBAF74                                    ; ASCII "DAYSINSTALLED"
1ED412AA    51                          PUSH ECX
1ED412AB    C64424 64 0C                MOV BYTE PTR SS:[ESP+64], 0C
1ED412B0    E8 FBF2FFFF                 CALL VA_X.1ED405B0
1ED412B5    8BF8                        MOV EDI, EAX
1ED412B7    8D5424 40                   LEA EDX, DWORD PTR SS:[ESP+40]
1ED412BB    68 84AFEB1E                 PUSH VA_X.1EEBAF84                                    ; ASCII "DAYSLEFT"
1ED412C0    52                          PUSH EDX
1ED412C1    C64424 6C 0D                MOV BYTE PTR SS:[ESP+6C], 0D
1ED412C6    E8 E5F2FFFF                 CALL VA_X.1ED405B0
1ED412CB    83C4 18                     ADD ESP, 18
1ED412CE    8BE8                        MOV EBP, EAX
1ED412D0    C64424 54 0E                MOV BYTE PTR SS:[ESP+54], 0E
1ED412D5    E8 F6AB0800                 CALL VA_X.1EDCBED0
1ED412DA    8B00                        MOV EAX, DWORD PTR DS:[EAX]
1ED412DC    68 48AFEB1E                 PUSH VA_X.1EEBAF48                                    ; ASCII "EDL: "

...
1ED41400    52                          PUSH EDX
1ED41401    50                          PUSH EAX
1ED41402    51                          PUSH ECX
1ED41403    E8 68D80900                 CALL VA_X.1EDDEC70
1ED41408    83C4 1C                     ADD ESP, 1C
1ED4140B    E8 A0DC0900                 CALL VA_X.1EDDF0B0
1ED41410    3BC3                        CMP EAX, EBX
1ED41412    0F84 33010000               JE VA_X.1ED4154B                                      ; 看看注册码正确跳到返回真,否则看是否过期了
修改为
1ED41410    8BD8                        MOV EBX, EAX
1ED41412    E9 34010000                 JMP VA_X.1ED4154B
1ED41417    90                          NOP

1ED41418    83F8 02                     CMP EAX, 2
1ED4141B    0F94C2                      SETE DL
1ED4141E    52                          PUSH EDX
1ED4141F    6A 01                       PUSH 1
1ED41421    E8 FA040900                 CALL VA_X.1EDD1920                                    ; 弹出Licenes信息窗口
1ED41426    83C4 08                     ADD ESP, 8
1ED41429    85C0                        TEST EAX, EAX
1ED4142B    75 46                       JNZ SHORT VA_X.1ED41473
1ED4142D    A1 C44CF21E                 MOV EAX, DWORD PTR DS:[1EF24CC4]
1ED41432    53                          PUSH EBX
1ED41433    68 D072EB1E                 PUSH VA_X.1EEB72D0                                    ; ASCII "Visual Assist X"
1ED41438    68 C0AEEB1E                 PUSH VA_X.1EEBAEC0                                    ; ASCII "Visual Assist X is loaded but dormant. 
Assist X by using the Add or Remove Programs Control Panel Applet."
1ED4143D    50                          PUSH EAX
1ED4143E    FF15 2C69EB1E               CALL DWORD PTR DS:[<&user32.MessageBoxA>]             ; USER32.MessageBoxA
1ED41444    8D4C24 18                   LEA ECX, DWORD PTR SS:[ESP+18]
1ED41448    C64424 54 09                MOV BYTE PTR SS:[ESP+54], 9
1ED4144D    E8 8EAA0800                 CALL VA_X.1EDCBEE0

对于同一局域网不能同时用的问题
查找字串
All instances of the license ."%s".are in use. Visual Assist X will be disabled.  You must unlo
查 the license 就行了
找到反在下面的返回处下断
或 Ctrl+B查找 74 0E FF 71 44
找到一处这里 
1EDE69CF    53                          PUSH EBX
1EDE69D0    56                          PUSH ESI
1EDE69D1    57                          PUSH EDI
1EDE69D2    8965 F0                     MOV DWORD PTR SS:[EBP-10], ESP
1EDE69D5   /74 0E                       JE SHORT VA_X.1EDE69E5                                ; 这里好明显了改 jmp 1EDE69E5吧
1EDE69D7   |FF71 44                     PUSH DWORD PTR DS:[ECX+44]
1EDE69DA   |8365 FC 00                  AND DWORD PTR SS:[EBP-4], 0
1EDE69DE   |FF71 58                     PUSH DWORD PTR DS:[ECX+58]
1EDE69E1   |FFD0                        CALL EAX
1EDE69E3   |59                          POP ECX
1EDE69E4   |59                          POP ECX
1EDE69E5   \8B4D F4                     MOV ECX, DWORD PTR SS:[EBP-C]
1EDE69E8    5F                          POP EDI
1EDE69E9    5E                          POP ESI

关于注册信息看看RegIt.reg里的内容吧
REGEDIT4

[HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist X]
"UserKey"="FreeCat"
"UserName"="FreeCat "

[HKEY_CURRENT_USER\Software\Whole Tomato\VAnet]
"UserKey"="FreeCat"
"UserName"="FreeCat "

[HKEY_CURRENT_USER\Software\Whole Tomato\Visual Assist]
"UserKey"="FreeCat"
"UserName"="FreeCat"

好了
测试一下ok收工了

上一篇   下一篇