首页
社区
课程
招聘
[旧帖] [求助]大嘴日语的四层壳脱掉后的修复问题 0.00雪花
发表于: 2008-2-3 18:45 3991

[旧帖] [求助]大嘴日语的四层壳脱掉后的修复问题 0.00雪花

2008-2-3 18:45
3991
软件:大嘴日语 V7.0 Build 71016
加壳:ExeStealth v2.73+?(壳没查出来)+Aspack+Upx
下载地址:http://www.skycn.com/soft/12090.html(我不能发附件,只能提供下载地址了
对脱壳感兴趣,学习而已

在该软件的四层壳脱完后,手动查找IAT,用Importrec 修复时,会出现两个无效指针(指向同一个地方),用等级1,2,3都无法修复这两个指针。剪切到后,修复脱壳后的程序,提示错误,无法运行。请各位大哥大姐给小弟指点一下。

脱壳过程:
用PEID查壳,没有查出来,用FI查壳,是ExeStealth v2.73r...

经过多次试验,最后一次异常法,可以一次过前面两层壳。
OD除了“忽略在KERNEL中发生的内存访问异常”勾上,其余的都不勾。用插件隐藏OD。
载入程序,停在:
015CD060 > /EB 00           jmp short BmJapane.015CD062
015CD062   \60              pushad
015CD063    E8 00000000     call BmJapane.015CD068
015CD068    5D              pop ebp
015CD069    81ED DB274000   sub ebp,BmJapane.004027DB
015CD06F    B9 16000000     mov ecx,16
015CD074    83C1 04         add ecx,4
015CD077    83C1 01         add ecx,1
015CD07A    EB 05           jmp short BmJapane.015CD081
015CD07C  - EB FE           jmp short BmJapane.015CD07C
015CD07E    83C7 56         add edi,56
015CD081    EB 00           jmp short BmJapane.015CD083
015CD083    EB 00           jmp short BmJapane.015CD085
015CD085    83E9 02         sub ecx,2
015CD088    81C1 78432765   add ecx,65274378
015CD08E    EB 00           jmp short BmJapane.015CD090

shift+f9  第8次 程序运行
重新载入,shift+f9,7次后,看堆栈:
0012FFBC   FFFFFFFF  SEH 链尾部
0012FFC0   00E5A724  SE 句柄                         //找到这里的00E5A724
0012FFC4   7C816FD7  返回到 kernel32.7C816FD7
0012FFC8   7C930738  ntdll.7C930738

ctrl+g 跟随到 00E5A724        F2下断,shift+f9  运行到:
00E5A724    B8 A994E5F0     mov eax,F0E594A9             //停在这里
00E5A729    8D88 9E120010   lea ecx,dword ptr ds:[eax+1000129E]
00E5A72F    8941 01         mov dword ptr ds:[ecx+1],eax
00E5A732    8B5424 04       mov edx,dword ptr ss:[esp+4]
00E5A736    8B52 0C         mov edx,dword ptr ds:[edx+C]
00E5A739    C602 E9         mov byte ptr ds:[edx],0E9
00E5A73C    83C2 05         add edx,5
00E5A73F    2BCA            sub ecx,edx
00E5A741    894A FC         mov dword ptr ds:[edx-4],ecx
00E5A744    33C0            xor eax,eax
00E5A746    C3              retn
00E5A747    B8 78563412     mov eax,12345678
00E5A74C    64:8F05 0000000>pop dword ptr fs:[0]
00E5A753    83C4 04         add esp,4

删除断点,代码往下翻,将找到jmp  eax,   下断,shift+f9运行到:
00E5A7E6  - FFE0            jmp eax               ; BmJapane.00BE4001   //停在这里
00E5A7E8    0140 BE         add dword ptr ds:[eax-42],eax
00E5A7EB    0008            add byte ptr ds:[eax],cl
00E5A7ED    A8 E5           test al,0E5
00E5A7EF    0030            add byte ptr ds:[eax],dh

删除断点,f8 到了aspack 的入口了:
00BE4001    60              pushad                                         //停在这里
00BE4002    E8 03000000     call BmJapane.00BE400A
00BE4007  - E9 EB045D45     jmp 461B44F7
00BE400C    55              push ebp
00BE400D    C3              retn
00BE400E    E8 01000000     call BmJapane.00BE4014
00BE4013    EB 5D           jmp short BmJapane.00BE4072
00BE4015    BB EDFFFFFF     mov ebx,-13
00BE401A    03DD            add ebx,ebp

ESP定律搞定,到了UPX的壳的入口了:
009714A0    60              pushad                                           //停在这里
009714A1    BE 00207C00     mov esi,BmJapane.007C2000
009714A6    8DBE 00F0C3FF   lea edi,dword ptr ds:[esi+FFC3F000]
009714AC    57              push edi
009714AD    83CD FF         or ebp,FFFFFFFF
009714B0    EB 10           jmp short BmJapane.009714C2
009714B2    90              nop
009714B3    90              nop
009714B4    90              nop

ESP定律搞定,到了程序的入口了:
006B1298    55              push ebp                               //程序的OEP
006B1299    8BEC            mov ebp,esp
006B129B    83C4 F0         add esp,-10
006B129E    53              push ebx
006B129F    B8 380A6B00     mov eax,BmJapane.006B0A38
006B12A4    E8 EB65D5FF     call BmJapane.00407894
006B12A9    8B1D D49F6B00   mov ebx,dword ptr ds:[6B9FD4]                ; BmJapane.006BBCD8
006B12AF    8B03            mov eax,dword ptr ds:[ebx]
006B12B1    E8 5642DEFF     call BmJapane.0049550C
006B12B6    8B03            mov eax,dword ptr ds:[ebx]
006B12B8    BA E0156B00     mov edx,BmJapane.006B15E0
006B12BD    E8 323EDEFF     call BmJapane.004950F4
006B12C2    8B0B            mov ecx,dword ptr ds:[ebx]
006B12C4    B2 01           mov dl,1
006B12C6    A1 A8B45A00     mov eax,dword ptr ds:[5AB4A8]
006B12CB    E8 7CEADFFF     call BmJapane.004AFD4C

我用OD自带的插件和LoadPE都脱了一个,

修复过程
用Importrec 自动查找IAT和手动查找IAT都试了一下,有两个无效指针,I等级1,2,3都修复不了,就剪切掉了,修复脱壳文件。运行错误,参考了  “且行且远大哥的补区段手脱大嘴日语V7.0”,
不过补区段没弄明白,不会弄。

希望好心的大哥大姐给我指点一下。

另附第二层的入口, 第二层壳是什么壳啊,查壳工具查不出来,有知道的大哥大姐请告诉我
015AF000 >  60              pushad                                       ; (初始化 cpu 选择状态)
015AF001    50              push eax
015AF002    E8 01000000     call BmJapane.015AF008
015AF007  - 73 83           jnb short BmJapane.015AEF8C
015AF009    C40458          les eax,fword ptr ds:[eax+ebx*2]
015AF00C    87FA            xchg edx,edi
015AF00E    D3EF            shr edi,cl
015AF010    50              push eax
015AF011    E8 01000000     call BmJapane.015AF017
015AF016  - E9 83C40458     jmp 595FB49E
015AF01B    85FE            test esi,edi
015AF01D    50              push eax
015AF01E    E8 01000000     call BmJapane.015AF024
015AF023  - 7C 83           jl short BmJapane.015AEFA8
015AF025    C40458          les eax,fword ptr ds:[eax+ebx*2]
015AF028    85FE            test esi,edi
015AF02A    74 03           je short BmJapane.015AF02F
015AF02C    75 01           jnz short BmJapane.015AF02F
015AF02E    76 0F           jbe short BmJapane.015AF03F
015AF030    8902            mov dword ptr ds:[edx],eax
015AF032    0000            add byte ptr ds:[eax],al
015AF034    00D3            add bl,dl
015AF036    DAE8            fisubr eax                                   ; 非法使用寄存器
015AF038    0100            add dword ptr ds:[eax],eax
015AF03A    0000            add byte ptr ds:[eax],al
015AF03C  - 76 83           jbe short BmJapane.015AEFC1
015AF03E    C404F8          les eax,fword ptr ds:[eax+edi*8]
015AF041    50              push eax
015AF042    E8 01000000     call BmJapane.015AF048
015AF047  - 71 83           jno short BmJapane.015AEFCC
015AF049    C40458          les eax,fword ptr ds:[eax+ebx*2]
015AF04C    0F8C 02000000   jl BmJapane.015AF054
015AF052    87D6            xchg esi,edx
015AF054    E8 01000000     call BmJapane.015AF05A
015AF059  - 72 83           jb short BmJapane.015AEFDE
015AF05B    C4040F          les eax,fword ptr ds:[edi+ecx]
015AF05E    8001 00         add byte ptr ds:[ecx],0
015AF061    0000            add byte ptr ds:[eax],al
015AF063    FC              cld
015AF064    E8 01000000     call BmJapane.015AF06A
015AF069    7A 83           jpe short BmJapane.015AEFEE
015AF06B    C4044F          les eax,fword ptr ds:[edi+ecx*2]
015AF06E    50              push eax
015AF06F    E8 01000000     call BmJapane.015AF075
015AF074  - 78 83           js short BmJapane.015AEFF9
015AF076    C40458          les eax,fword ptr ds:[eax+ebx*2]
015AF079    70 05           jo short BmJapane.015AF080
015AF07B    BA 152A4632     mov edx,32462A15
015AF080    50              push eax
015AF081    E8 01000000     call BmJapane.015AF087
015AF086  ^ 73 83           jnb short BmJapane.015AF00B
015AF088    C40458          les eax,fword ptr ds:[eax+ebx*2]
015AF08B    81DA 0529311B   sbb edx,1B312905
015AF091    50              push eax
015AF092    E8 01000000     call BmJapane.015AF098
015AF097    E8 83C40458     call 595FB51F
015AF09C    66:BE BBD9      mov si,0D9BB
015AF0A0    7A 03           jpe short BmJapane.015AF0A5
015AF0A2    7B 01           jpo short BmJapane.015AF0A5
015AF0A4  - E9 7501F872     jmp 7452F21E
015AF0A9    0373 01         add esi,dword ptr ds:[ebx+1]
015AF0AC  ^ 78 F8           js short BmJapane.015AF0A6
015AF0AE    76 03           jbe short BmJapane.015AF0B3
015AF0B0    77 01           ja short BmJapane.015AF0B3
015AF0B2    EB 0F           jmp short BmJapane.015AF0C3
015AF0B4    8D03            lea eax,dword ptr ds:[ebx]
015AF0B6    0000            add byte ptr ds:[eax],al
015AF0B8    0066 0B         add byte ptr ds:[esi+B],ah
015AF0BB    F5              cmc
015AF0BC    E8 01000000     call BmJapane.015AF0C2
015AF0C1    7B 83           jpo short BmJapane.015AF046
015AF0C3    04 24           add al,24
015AF0C5    06              push es
015AF0C6    C3              retn
015AF0C7    66:D3D7         rcl di,cl
015AF0CA    EB 01           jmp short BmJapane.015AF0CD
015AF0CC  ^ 78 87           js short BmJapane.015AF055
015AF0CE    FE              ???                                          ; 未知命令
015AF0CF    78 03           js short BmJapane.015AF0D4
015AF0D1    79 01           jns short BmJapane.015AF0D4
015AF0D3  ^ 73 F8           jnb short BmJapane.015AF0CD
015AF0D5    78 03           js short BmJapane.015AF0DA
015AF0D7    79 01           jns short BmJapane.015AF0DA
015AF0D9    E8 4A50E801     call 03434128

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习一下!!!!
2008-2-4 01:35
0
雪    币: 295
活跃值: (346)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
3
跟原程序, 到OEP后对6BE2B0,6BE4C8下硬件访问断点:

[6BE2B0]=kernel32.GetProcAddress
[6BE4C8]=kernel32.GetProcAddress

copy data\data.dat .

修复的程序就可以运行,

不过, 原程序和修复的程序运行都有什么 OLE错误, 那就不是脱壳的问题了!
2008-2-5 03:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=blackeyes;413765]跟原程序, 到OEP后对6BE2B0,6BE4C8下硬件访问断点:

[6BE2B0]=kernel32.GetProcAddress
[6BE4C8]=kernel32.GetProcAddress

copy data\data.dat .

修复的程序就可以运行,

不过, 原程序和修复的程...[/QUOTE]
多谢blackeyes了,我马上去试试。
昨天我看了看补区段的教程,学习了补区段后,按照  且行且远 大哥的“补区段手脱大嘴日语V7.0”所介绍的方法,补了5个区段,在修复,能运行。
2008-2-5 19:25
0
游客
登录 | 注册 方可回帖
返回
//