能力值:
( LV2,RANK:10 )
|
-
-
2 楼
呵呵,经过一翻周折,终于手脱成功了。
程序校验文件名(.EXE后面的没校验),大小没校验。程序运行中会生成3dpro.exe及3D_LOG.ini,不知有何用,正在努力中。。。
过程:
OD载入未脱壳程序,
0068C001 > 60 pushad*************************停在这里,按F8跟下去
0068C002 E8 03000000 call BjQx3D.0068C00A***********F7跟进
0068C007 - E9 EB045D45 jmp 45C5C4F7
0068C00C 55 push ebp
0068C00D C3 retn
0068C00E E8 01000000 call BjQx3D.0068C014
0068C013 EB 5D jmp short BjQx3D.0068C072
0068C015 BB EDFFFFFF mov ebx,-13
0068C01A 03DD add ebx,ebp
0068C01C 81EB 00C02800 sub ebx,28C000 ; UNICODE ";0"
F7进入后,来到这里
0068C00A 5D pop ebp************************停在这里,按F8跟下去
0068C00B 45 inc ebp
0068C00C 55 push ebp
0068C00D C3 retn***************************返回到 0068C008
0068C00E E8 01000000 call BjQx3D.0068C014
0068C013 EB 5D jmp short BjQx3D.0068C072
0068C015 BB EDFFFFFF mov ebx,-13
0068C01A 03DD add ebx,ebp
0068C01C 81EB 00C02800 sub ebx,28C000 ; UNICODE ";0"
到这里
0068C008 /EB 04 jmp short BjQx3D.0068C00E
0068C00A |5D pop ebp
0068C00B |45 inc ebp
0068C00C |55 push ebp
0068C00D |C3 retn
0068C00E \E8 01000000 call BjQx3D.0068C014***********F7跟进
0068C013 EB 5D jmp short BjQx3D.0068C072
0068C015 BB EDFFFFFF mov ebx,-13
0068C01A 03DD add ebx,ebp
0068C01C 81EB 00C02800 sub ebx,28C000 ; UNICODE ";0"
到这里
0068C014 5D pop ebp ; BjQx3D.0068C013
0068C015 BB EDFFFFFF mov ebx,-13
0068C01A 03DD add ebx,ebp
0068C01C 81EB 00C02800 sub ebx,28C000 ; UNICODE ";0"
0068C022 83BD 22040000 00 cmp dword ptr ss:[ebp+422],0
0068C029 899D 22040000 mov dword ptr ss:[ebp+422],ebx
0068C02F 0F85 65030000 jnz BjQx3D.0068C39A
0068C035 8D85 2E040000 lea eax,dword ptr ss:[ebp+42E]
0068C03B 50 push eax
接着就是N个F8及F4,最后来到0068C3AF,会看到0068C3BA的变化,0068985F的地址可能是OEP。可以用d 401000在转存窗看文件头的解压过程。
0068C395 ^\E9 EBFEFFFF jmp BjQx3D.0068C285
0068C39A B8 5F982800 mov eax,28985F
0068C39F 50 push eax
0068C3A0 0385 22040000 add eax,dword ptr ss:[ebp+422]
0068C3A6 59 pop ecx
0068C3A7 0BC9 or ecx,ecx
0068C3A9 8985 A8030000 mov dword ptr ss:[ebp+3A8],eax
0068C3AF 61 popad********************************到这里停下,注意下面的push
0068C3B0 75 08 jnz short BjQx3D.0068C3BA
0068C3B2 B8 01000000 mov eax,1
0068C3B7 C2 0C00 retn 0C
0068C3BA 68 5F986800 push BjQx3D.0068985F*****************注意地址
0068C3BF C3 retn*********************************返回到上面的地址。
返回到这
0068985F 90 nop******************可能是OEP,试DUMP后,PEID查是UPX-Scrambler RC1.x -> ┫nT?L,继续F8跟下去
00689860 61 popad
00689861 BE 00E05F00 mov esi,BjQx3D.005FE000
00689866 8DBE 0030E0FF lea edi,dword ptr ds:[esi+FFE03000]
0068986C 57 push edi******************************注意EDI的值,00401000,按F8及F4跟下去
0068986D 83CD FF or ebp,FFFFFFFF
00689870 EB 10 jmp short BjQx3D.00689882
00689872 EB 00 jmp short BjQx3D.00689874
00689874 ^ EB EA jmp short BjQx3D.00689860
00689876 ^ EB E8 jmp short BjQx3D.00689860
00689878 8A06 mov al,byte ptr ds:[esi]
0068987A 46 inc esi
0068987B 8807 mov byte ptr ds:[edi],al
0068987D 47 inc edi
经地漫长的F8+F4后,来到
006899A2 ^\74 DC je short BjQx3D.00689980**************来到这后,向下看,找到下面的pushad或popad就快成功了
006899A4 89F9 mov ecx,edi
006899A6 79 07 jns short BjQx3D.006899AF
006899A8 0FB707 movzx eax,word ptr ds:[edi]
006899AB 47 inc edi
006899AC 50 push eax
006899AD 47 inc edi
006899AE B9 5748F2AE mov ecx,AEF24857
006899B3 55 push ebp
006899B4 FF96 08A42800 call dword ptr ds:[esi+28A408]
006899BA 09C0 or eax,eax
006899BC 74 07 je short BjQx3D.006899C5
006899BE 8903 mov dword ptr ds:[ebx],eax
006899C0 83C3 04 add ebx,4
006899C3 ^ EB D8 jmp short BjQx3D.0068999D
006899C5 FF96 0CA42800 call dword ptr ds:[esi+28A40C]
006899CB 60 pushad**************************UPX壳特征pushad jmp xxxxxxxx 或popad jmp xxxxxxxx,代码解压完才看到,否则就是add byte ptr ds:[eax],al之类的。
006899CC - E9 2F76D7FF jmp BjQx3D.00401000*************跳到真正的OEP,F8跟
006899D1 0000 add byte ptr ds:[eax],al
006899D3 00EC add ah,ch
006899D5 99 cdq
006899D6 68 00A09A68 push 689AA000
006899DB 0038 add byte ptr ds:[eax],bh
006899DD 16 push ss
006899DE 5F pop edi
006899DF 0000 add byte ptr ds:[eax],al
006899E1 0000 add byte ptr ds:[eax],al
006899E3 0000 add byte ptr ds:[eax],al
006899E5 0000 add byte ptr ds:[eax],al
006899E7 0000 add byte ptr ds:[eax],al
呵呵,终于见到光明了,
00401000 /EB 10 jmp short BjQx3D.00401012***************OEP,DUMP吧。
00401002 |66:623A bound di,dword ptr ds:[edx]
00401005 |43 inc ebx
00401006 |2B2B sub ebp,dword ptr ds:[ebx]
00401008 |48 dec eax
00401009 |4F dec edi
0040100A |4F dec edi
0040100B |4B dec ebx
0040100C |90 nop
0040100D -|E9 DC145A00 jmp 009A24EE
00401012 \A1 CF145A00 mov eax,dword ptr ds:[5A14CF]
00401017 C1E0 02 shl eax,2
0040101A A3 D3145A00 mov dword ptr ds:[5A14D3],eax
0040101F 52 push edx
00401020 6A 00 push 0
DUMP后的文件不能运行,要用IREC修复,填上OEP=1000,按IAT Autosearch后,RVA变为001F8308,Size为000001E8,若按这样获得的输入表是不完全的,这样FIX出来的文件不能运行!改Size=1000,这样获得完整的输入表了。
奇怪的是我用OD插件“OllyDump 2.21.108”DUMP下来的修复后,有2.56M,可以正常运行,但用OD插件“OllyDbg PE Dumper 3.00”的DUMP下来的还有壳?用不了。
另外要注意的是,用“OllyDump 2.21.108”DUMP时,记得将“重建输入表”前的勾取消,否则修复后不能运行的。
by cnnets 2005.3.25 (菜鸟定文章,谢谢你看完)
最终脱壳文件:http://ocn.e5v.com/noncgi/2003/affix/050325044517__3_bjqx.rar
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这样还没弄好吧!可以运行,但在运行中程序有自校验的吧!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
慢慢搞吧,呵呵。
|