首页
社区
课程
招聘
脱一个双层壳的问题
发表于: 2006-11-27 15:48 4169

脱一个双层壳的问题

2006-11-27 15:48
4169
首先用PEID载入EXE显示yoda's cryptor 1.x / modified
第一次手脱,花了3个小时 :(  

到达OEP之后是这个样子。

00401000    68 0180C300     PUSH cabalmai.00C38001                   ; OEP
00401005    E8 01000000     CALL cabalmai.0040100B
0040100A    C3              RETN
0040100B    C3              RETN
0040100C    B0 7F           MOV AL,7F
0040100E    0AB1 6B03389C   OR DH,BYTE PTR DS:[ECX+9C38036B]
00401014    2D CA2D3F13     SUB EAX,133F2DCA
00401019    3337            XOR ESI,DWORD PTR DS:[EDI]
0040101B    3B4D 9C         CMP ECX,DWORD PTR SS:[EBP-64]
0040101E    19F6            SBB ESI,ESI
00401020    6F              OUTS DX,DWORD PTR ES:[EDI]               ; I/O 命令
00401021  - 79 A9           JNS SHORT cabalmai.00400FCC
00401023    0C 32           OR AL,32
00401025    89CC            MOV ESP,ECX
00401027    2BEC            SUB EBP,ESP
00401029    FD              STD
0040102A    B8 447278C6     MOV EAX,C6787244
0040102F    85A4EC B5FDE62B TEST DWORD PTR SS:[ESP+EBP*8+2BE6FDB5],E>
00401036    6282 77F6DE48   BOUND EAX,QWORD PTR DS:[EDX+48DEF677]
0040103C    7E 16           JLE SHORT cabalmai.00401054
0040103E    CF              IRETD

明显不是OPE啦~~,但是这个好眼熟哦,但是一时想不起是什么了,想用OD DUMP出来查查,呵呵。
看了下DUMP出来的文件,增肥不少,从1。3M到了8。3M

用PEID查壳 显示 ASProtect 1.33 - 2.1 Registered -> Alexey Solodovnikov *

怪不得这么熟悉。。。。。
不过我记得以前我也给自己的软件加过这个组合壳的,新版的ASPR是加不上的,所以我猜是老版本的。于是照着看雪精华里的脱壳教程来,最后在给代码段下访问断点飞回OEP处却是这个样子

00650432    C3              RETN
00650433    8B4D F0         MOV ECX,DWORD PTR SS:[EBP-10]
00650436    64:890D 0000000>MOV DWORD PTR FS:[0],ECX
0065043D    59              POP ECX
0065043E    5F              POP EDI
0065043F    5E              POP ESI
00650440    5B              POP EBX
00650441    C9              LEAVE
00650442    51              PUSH ECX
00650443    C3              RETN
00650444    56              PUSH ESI
00650445    43              INC EBX
00650446    3230            XOR DH,BYTE PTR DS:[EAX]
00650448    58              POP EAX
00650449    43              INC EBX
0065044A    3030            XOR BYTE PTR DS:[EAX],DH
0065044C    55              PUSH EBP
0065044D    8BEC            MOV EBP,ESP
0065044F    83EC 08         SUB ESP,8
00650452    53              PUSH EBX
00650453    56              PUSH ESI
00650454    57              PUSH EDI
00650455    55              PUSH EBP
00650456    FC              CLD

明显也不像。。。那好我跟着retuen进去看看

0064DBAA    BF 94000000     MOV EDI,94
0064DBAF    8BC7            MOV EAX,EDI
0064DBB1    E8 0A2A0000     CALL cabalmai.006505C0
0064DBB6    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
0064DBB9    8BF4            MOV ESI,ESP
0064DBBB    893E            MOV DWORD PTR DS:[ESI],EDI
0064DBBD    56              PUSH ESI
0064DBBE    FF15 78D16A00   CALL DWORD PTR DS:[6AD178]
0064DBC4    8B4E 10         MOV ECX,DWORD PTR DS:[ESI+10]
0064DBC7    890D AC7C7600   MOV DWORD PTR DS:[767CAC],ECX
0064DBCD    8B46 04         MOV EAX,DWORD PTR DS:[ESI+4]
0064DBD0    A3 B87C7600     MOV DWORD PTR DS:[767CB8],EAX
0064DBD5    8B56 08         MOV EDX,DWORD PTR DS:[ESI+8]
0064DBD8    8915 BC7C7600   MOV DWORD PTR DS:[767CBC],EDX
0064DBDE    8B76 0C         MOV ESI,DWORD PTR DS:[ESI+C]
0064DBE1    81E6 FF7F0000   AND ESI,7FFF
0064DBE7    8935 B07C7600   MOV DWORD PTR DS:[767CB0],ESI
0064DBED    83F9 02         CMP ECX,2
0064DBF0    74 0C           JE SHORT cabalmai.0064DBFE
0064DBF2    81CE 00800000   OR ESI,8000
0064DBF8    8935 B07C7600   MOV DWORD PTR DS:[767CB0],ESI
0064DBFE    C1E0 08         SHL EAX,8
0064DC01    03C2            ADD EAX,EDX
0064DC03    A3 B47C7600     MOV DWORD PTR DS:[767CB4],EAX
0064DC08    33F6            XOR ESI,ESI
0064DC0A    56              PUSH ESI
0064DC0B    8B3D B0D16A00   MOV EDI,DWORD PTR DS:[6AD1B0]
0064DC11    FFD7            CALL EDI

其中跟进0064DBBE    FF15 78D16A00   CALL DWORD PTR DS:[6AD178]
后发现是以下代码,那应该就是OEP了。
01630700  - E9 D9231E7B     JMP kernel32.GetVersionExA

先DUMP出来拿修复下IAT。用ImportREC修复后发现是这个样

0064DBAA > ?  BF 94000000   MOV EDI,94
0064DBAF   .  8BC7          MOV EAX,EDI
0064DBB1   .  E8 0A2A0000   CALL dumped1_.006505C0
0064DBB6   .  8965 E8       MOV DWORD PTR SS:[EBP-18],ESP
0064DBB9   .  8BF4          MOV ESI,ESP
0064DBBB   .  893E          MOV DWORD PTR DS:[ESI],EDI
0064DBBD   .  56            PUSH ESI                                 ; /pVersionInformation
0064DBBE   .  FF15 78D16A00 CALL DWORD PTR DS:[<&kernel32.GetVersion>; \GetVersionExA
0064DBC4   .  8B4E 10       MOV ECX,DWORD PTR DS:[ESI+10]
0064DBC7   .  890D AC7C7600 MOV DWORD PTR DS:[767CAC],ECX
0064DBCD   .  8B46 04       MOV EAX,DWORD PTR DS:[ESI+4]
0064DBD0   .  A3 B87C7600   MOV DWORD PTR DS:[767CB8],EAX
0064DBD5   .  8B56 08       MOV EDX,DWORD PTR DS:[ESI+8]
0064DBD8   .  8915 BC7C7600 MOV DWORD PTR DS:[767CBC],EDX
0064DBDE   .  8B76 0C       MOV ESI,DWORD PTR DS:[ESI+C]
0064DBE1   .  81E6 FF7F0000 AND ESI,7FFF
0064DBE7   .  8935 B07C7600 MOV DWORD PTR DS:[767CB0],ESI
0064DBED   .  83F9 02       CMP ECX,2
0064DBF0   .  74 0C         JE SHORT dumped1_.0064DBFE
0064DBF2   .  81CE 00800000 OR ESI,8000
0064DBF8   .  8935 B07C7600 MOV DWORD PTR DS:[767CB0],ESI
0064DBFE   >  C1E0 08       SHL EAX,8
0064DC01   .  03C2          ADD EAX,EDX
0064DC03   .  A3 B47C7600   MOV DWORD PTR DS:[767CB4],EAX
0064DC08   .  33F6          XOR ESI,ESI
0064DC0A   .  56            PUSH ESI
0064DC0B   .  8B3D B0D16A00 MOV EDI,DWORD PTR DS:[6AD1B0]
0064DC11   .  FFD7          CALL EDI
0064DC13   .  66:8138 4D5A  CMP WORD PTR DS:[EAX],5A4D
0064DC18   .  75 1F         JNZ SHORT dumped1_.0064DC39
0064DC1A   .  8B48 3C       MOV ECX,DWORD PTR DS:[EAX+3C]
0064DC1D   .  03C8          ADD ECX,EAX
0064DC1F   .  8139 50450000 CMP DWORD PTR DS:[ECX],4550
0064DC25   .  75 12         JNZ SHORT dumped1_.0064DC39
0064DC27   .  0FB741 18     MOVZX EAX,WORD PTR DS:[ECX+18]
0064DC2B   .  3D 0B010000   CMP EAX,10B
0064DC30   .  74 1F         JE SHORT dumped1_.0064DC51
0064DC32   .  3D 0B020000   CMP EAX,20B
0064DC37   .  74 05         JE SHORT dumped1_.0064DC3E
0064DC39   >  8975 E4       MOV DWORD PTR SS:[EBP-1C],ESI
0064DC3C   .  EB 27         JMP SHORT dumped1_.0064DC65
0064DC3E   >  83B9 84000000>CMP DWORD PTR DS:[ECX+84],0E
0064DC45   .^ 76 F2         JBE SHORT dumped1_.0064DC39
0064DC47   .  33C0          XOR EAX,EAX
0064DC49   .  39B1 F8000000 CMP DWORD PTR DS:[ECX+F8],ESI
0064DC4F   .  EB 0E         JMP SHORT dumped1_.0064DC5F
0064DC51   >  8379 74 0E    CMP DWORD PTR DS:[ECX+74],0E
0064DC55   .^ 76 E2         JBE SHORT dumped1_.0064DC39
0064DC57   .  33C0          XOR EAX,EAX
0064DC59   .  39B1 E8000000 CMP DWORD PTR DS:[ECX+E8],ESI
0064DC5F   >  0F95C0        SETNE AL
0064DC62   .  8945 E4       MOV DWORD PTR SS:[EBP-1C],EAX
0064DC65   >  6A 01         PUSH 1
0064DC67   .  E8 0E3B0000   CALL dumped1_.0065177A
0064DC6C   .  59            POP ECX
0064DC6D   .  85C0          TEST EAX,EAX
0064DC6F   .  75 08         JNZ SHORT dumped1_.0064DC79
0064DC71   .  6A 1C         PUSH 1C
0064DC73   .  E8 ACFEFFFF   CALL dumped1_.0064DB24
0064DC78   .  59            POP ECX
0064DC79   >  E8 99370000   CALL dumped1_.00651417
0064DC7E   .  85C0          TEST EAX,EAX
0064DC80   .  75 08         JNZ SHORT dumped1_.0064DC8A
0064DC82   .  6A 10         PUSH 10
0064DC84   .  E8 9BFEFFFF   CALL dumped1_.0064DB24
0064DC89   .  59            POP ECX
0064DC8A   >  E8 493A0000   CALL dumped1_.006516D8
0064DC8F   .  8975 FC       MOV DWORD PTR SS:[EBP-4],ESI
0064DC92   .  E8 0DA60000   CALL dumped1_.006582A4
0064DC97   .  85C0          TEST EAX,EAX
0064DC99   .  7D 08         JGE SHORT dumped1_.0064DCA3
0064DC9B   .  6A 1B         PUSH 1B
0064DC9D   .  E8 5DFEFFFF   CALL dumped1_.0064DAFF
0064DCA2   .  59            POP ECX
0064DCA3   >  FF15 C8D06A00 CALL DWORD PTR DS:[6AD0C8]
0064DCA9   .  A3 7424C300   MOV DWORD PTR DS:[C32474],EAX
0064DCAE   .  E8 88B10000   CALL dumped1_.00658E3B
0064DCB3   .  A3 247D7600   MOV DWORD PTR DS:[767D24],EAX
0064DCB8   .  E8 DCB00000   CALL dumped1_.00658D99
0064DCBD   .  85C0          TEST EAX,EAX
0064DCBF   .  7D 08         JGE SHORT dumped1_.0064DCC9
0064DCC1   .  6A 08         PUSH 8
0064DCC3   .  E8 37FEFFFF   CALL dumped1_.0064DAFF
0064DCC8   .  59            POP ECX
0064DCC9   >  E8 98AE0000   CALL dumped1_.00658B66
0064DCCE   .  85C0          TEST EAX,EAX
0064DCD0   .  7D 08         JGE SHORT dumped1_.0064DCDA
0064DCD2   .  6A 09         PUSH 9
0064DCD4   .  E8 26FEFFFF   CALL dumped1_.0064DAFF
0064DCD9   .  59            POP ECX
0064DCDA   >  6A 01         PUSH 1
0064DCDC   .  E8 69B1FFFF   CALL dumped1_.00648E4A
0064DCE1   .  59            POP ECX
0064DCE2   .  8945 D8       MOV DWORD PTR SS:[EBP-28],EAX
0064DCE5   .  3BC6          CMP EAX,ESI
0064DCE7   .  74 07         JE SHORT dumped1_.0064DCF0
0064DCE9   .  50            PUSH EAX
0064DCEA   .  E8 10FEFFFF   CALL dumped1_.0064DAFF
0064DCEF   .  59            POP ECX
0064DCF0   >  8975 BC       MOV DWORD PTR SS:[EBP-44],ESI
0064DCF3   .  8D45 90       LEA EAX,DWORD PTR SS:[EBP-70]
0064DCF6   .  50            PUSH EAX                                 ; /pStartupinfo
0064DCF7   .  FF15 CCD06A00 CALL DWORD PTR DS:[<&kernel32.GetStartup>; \GetStartupInfoA
0064DCFD   .  E8 07AE0000   CALL dumped1_.00658B09

但是我记得VC++的程序GetVersionExA与GetStartupInfoA之间没这么多奇怪的代码,两个函数之间距离应该是很短的,并且这个DUMP出来的程序不能执行

一到0064DC11   .  FFD7          CALL EDI

就说无法执行地址00000000

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
带壳调试进入到
0064DC11   .  FFD7          CALL EDI发现是以下代码。
我想问问大家能不能有什么办法把
Memory map, 条目 60
地址=01610000
大小=0001E000 (122880.)
属主=         01610000 (自身)
区段=
类型=Priv 00021004
访问=RW
初始访问=RW

这段代码加到DUMP后的文件里?怎么加?

01621C64    55              PUSH EBP
01621C65    8BEC            MOV EBP,ESP
01621C67    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
01621C6A    85C0            TEST EAX,EAX
01621C6C    75 13           JNZ SHORT 01621C81
01621C6E    813D A47A6201 0>CMP DWORD PTR DS:[1627AA4],400000
01621C78    75 07           JNZ SHORT 01621C81
01621C7A    A1 A47A6201     MOV EAX,DWORD PTR DS:[1627AA4]
01621C7F    EB 06           JMP SHORT 01621C87
01621C81    50              PUSH EAX
01621C82    E8 3135FFFF     CALL 016151B8                            ; JMP 到 kernel32.GetModuleHandleA
01621C87    5D              POP EBP
01621C88    C2 0400         RETN 4
2006-11-27 15:59
0
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我以前试过自己写到DUMP程序的代码里,但是自己写太麻烦了,工作量又大。
2006-11-27 16:01
0
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
刚才又仔细观察了下,发现
0064DB9E      00            DB 00
0064DB9F      00            DB 00
0064DBA0      00            DB 00
0064DBA1      00            DB 00
0064DBA2      00            DB 00
0064DBA3      00            DB 00
0064DBA4      00            DB 00
0064DBA5   .  E8 4E280000   CALL cabalmai.006503F8
0064DBAA   .  BF 94000000   MOV EDI,94
0064DBAF   .  8BC7          MOV EAX,EDI
0064DBB1   .  E8 0A2A0000   CALL cabalmai.006505C0

这个OPE越来越像VC++的了。就是0064DB9E这的数据全被删了,我需要的就是这点数据呀。。。。。怎么办呢。这个可恶的ASPR

被删那点应该是一个
PUSH 60
PUSH XXXXXXX

第二句的XXXXX该上哪去找
2006-11-27 16:18
0
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
后来乱搞搞出来了。。。。
我在最后一次异常后,按照FLY的说法返回到处理Stolen code那。然后我给0013FFC0下硬件读取断点。按了3-5次次F9后,突然眼前一亮,发现了几个很熟悉的脸孔
01635FE4    6A 60           PUSH 60
01635FE6    68 E85A6C00     PUSH 6C5AE8
01635FEB    EB 02           JMP SHORT 01635FEF
01635FED    CD 20           INT 20
01635FEF    EB 02           JMP SHORT 01635FF3
前面的两个PUSH是不是偶要找的那个呀,哈哈,不管那么多,补到OEP处再说,哈哈。
补后修复镜象大小,完整DUMP。然后用
ImportREC修复DUMP。再拿PEID查壳 Microsoft Visual C++ 7.0 [调试]。YEAH,总算出来了,DUMP文件执行完全无错,嘎嘎。
偶等小菜居然也会脱壳咯。虽然还是不大懂到底怎么脱掉的。
2006-11-27 17:18
0
游客
登录 | 注册 方可回帖
返回
//