-
-
[旧帖] [求助]在脱PECompact时遇到的不解之处 0.00雪花
-
发表于: 2008-1-6 01:11 2337
-
本人在学脱壳,在看黑鹰初级班教程之前都先自己来脱一下,在看教程的。
od载入程序后看到没有pushad pushfd等等的东西。试试用两次内存断点法!
打开内存镜像,分别在 .rsrc和.text 下断后od停在0101baa5:
0101BAA5 C602 E9 mov byte ptr ds:[edx],0E9 <=====停在这里
0101BAA8 83C2 05 add edx,5 <===单步好这里,看到edx为01001016
0101BAAB 2BCA sub ecx,edx
0101BAAD 894A FC mov dword ptr ds:[edx-4],ecx
0101BAB0 33C0 xor eax,eax
0101BAB2 C3 retn
当时看到edx的值就有点奇怪,自己也说不出什么原因。就ctrl+g到那里看看:
01001016 - E9 08504543 jmp 44456023
0100101B 6F outs dx,dword ptr es:[edi]
0100101C 6D ins dword ptr es:[edi],dx
0100101D 70 61 jo short PECompac.01001080
0100101F 637432 00 arpl word ptr ds:[edx+esi],si
01001023 - EB D6 jmp short PECompac.01000FFB
看到jmp 44456023奇怪的跳转,F2下断,F9运行到这里。F8进去
0101BAB3 B8 97A801F1 mov eax,F101A897
0101BAB8 64:8F05 000000>pop dword ptr fs:[0]
0101BABF 83C4 04 add esp,4
0101BAC2 55 push ebp
0101BAC3 53 push ebx
0101BAC4 51 push ecx
0101BAC5 57 push edi
0101BAC6 56 push esi
0101BAC7 52 push edx
0101BAC8 8D98 D5110010 lea ebx,dword ptr ds:[eax+100011D5]
0101BACE 8B53 18 mov edx,dword ptr ds:[ebx+18]
0101BAD1 52 push edx
0101BAD2 8BE8 mov ebp,eax
0101BAD4 6A 40 push 40
0101BAD6 68 00100000 push 1000
0101BADB FF73 04 push dword ptr ds:[ebx+4]
0101BADE 6A 00 push 0
0101BAE0 8B4B 10 mov ecx,dword ptr ds:[ebx+10]
0101BAE3 03CA add ecx,edx
0101BAE5 8B01 mov eax,dword ptr ds:[ecx]
0101BAE7 FFD0 call eax
0101BAE9 5A pop edx
0101BAEA 8BF8 mov edi,eax
0101BAEC 50 push eax
0101BAED 52 push edx
0101BAEE 8B33 mov esi,dword ptr ds:[ebx]
0101BAF0 8B43 20 mov eax,dword ptr ds:[ebx+20]
0101BAF3 03C2 add eax,edx
0101BAF5 8B08 mov ecx,dword ptr ds:[eax]
0101BAF7 894B 20 mov dword ptr ds:[ebx+20],ecx
0101BAFA 8B43 1C mov eax,dword ptr ds:[ebx+1C]
0101BAFD 03C2 add eax,edx
0101BAFF 8B08 mov ecx,dword ptr ds:[eax]
0101BB01 894B 1C mov dword ptr ds:[ebx+1C],ecx
0101BB04 03F2 add esi,edx
0101BB06 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
0101BB09 03CA add ecx,edx
0101BB0B 8D43 1C lea eax,dword ptr ds:[ebx+1C]
0101BB0E 50 push eax
0101BB0F 57 push edi
0101BB10 56 push esi
0101BB11 FFD1 call ecx
0101BB13 5A pop edx
0101BB14 58 pop eax
0101BB15 0343 08 add eax,dword ptr ds:[ebx+8]
0101BB18 8BF8 mov edi,eax
0101BB1A 52 push edx
0101BB1B 8BF0 mov esi,eax
0101BB1D 8B46 FC mov eax,dword ptr ds:[esi-4]
0101BB20 83C0 04 add eax,4
0101BB23 2BF0 sub esi,eax
0101BB25 8956 08 mov dword ptr ds:[esi+8],edx
0101BB28 8B4B 10 mov ecx,dword ptr ds:[ebx+10]
0101BB2B 894E 24 mov dword ptr ds:[esi+24],ecx
0101BB2E 8B4B 14 mov ecx,dword ptr ds:[ebx+14]
0101BB31 51 push ecx
0101BB32 894E 28 mov dword ptr ds:[esi+28],ecx
0101BB35 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
0101BB38 894E 14 mov dword ptr ds:[esi+14],ecx
0101BB3B FFD7 call edi
0101BB3D 8985 C8120010 mov dword ptr ss:[ebp+100012C8],eax
0101BB43 8BF0 mov esi,eax
0101BB45 59 pop ecx
0101BB46 5A pop edx
0101BB47 EB 0C jmp short PECompac.0101BB55
0101BB49 03CA add ecx,edx
0101BB4B 68 00800000 push 8000
0101BB50 6A 00 push 0
0101BB52 57 push edi
0101BB53 FF11 call dword ptr ds:[ecx]
0101BB55 8BC6 mov eax,esi
0101BB57 5A pop edx
0101BB58 5E pop esi
0101BB59 5F pop edi
0101BB5A 59 pop ecx
0101BB5B 5B pop ebx
0101BB5C 5D pop ebp
0101BB5D FFE0 jmp eax <===一直单步到这里,eax0100739d很大的跳转
跳过去后就是oep
本人不解的是那个edx值跟oep有什么关系呢?后来看看那个edx的值01001016就是程序开头的地方啊。不过刚开始是01001016 8908 mov dword ptr ds:[eax],ecx
后来就变了那个大跳转。
有高手能指点一下原理吗?这是不是另外一种脱PECompact 2.x的方法呢??
od载入程序后看到没有pushad pushfd等等的东西。试试用两次内存断点法!
打开内存镜像,分别在 .rsrc和.text 下断后od停在0101baa5:
0101BAA5 C602 E9 mov byte ptr ds:[edx],0E9 <=====停在这里
0101BAA8 83C2 05 add edx,5 <===单步好这里,看到edx为01001016
0101BAAB 2BCA sub ecx,edx
0101BAAD 894A FC mov dword ptr ds:[edx-4],ecx
0101BAB0 33C0 xor eax,eax
0101BAB2 C3 retn
当时看到edx的值就有点奇怪,自己也说不出什么原因。就ctrl+g到那里看看:
01001016 - E9 08504543 jmp 44456023
0100101B 6F outs dx,dword ptr es:[edi]
0100101C 6D ins dword ptr es:[edi],dx
0100101D 70 61 jo short PECompac.01001080
0100101F 637432 00 arpl word ptr ds:[edx+esi],si
01001023 - EB D6 jmp short PECompac.01000FFB
看到jmp 44456023奇怪的跳转,F2下断,F9运行到这里。F8进去
0101BAB3 B8 97A801F1 mov eax,F101A897
0101BAB8 64:8F05 000000>pop dword ptr fs:[0]
0101BABF 83C4 04 add esp,4
0101BAC2 55 push ebp
0101BAC3 53 push ebx
0101BAC4 51 push ecx
0101BAC5 57 push edi
0101BAC6 56 push esi
0101BAC7 52 push edx
0101BAC8 8D98 D5110010 lea ebx,dword ptr ds:[eax+100011D5]
0101BACE 8B53 18 mov edx,dword ptr ds:[ebx+18]
0101BAD1 52 push edx
0101BAD2 8BE8 mov ebp,eax
0101BAD4 6A 40 push 40
0101BAD6 68 00100000 push 1000
0101BADB FF73 04 push dword ptr ds:[ebx+4]
0101BADE 6A 00 push 0
0101BAE0 8B4B 10 mov ecx,dword ptr ds:[ebx+10]
0101BAE3 03CA add ecx,edx
0101BAE5 8B01 mov eax,dword ptr ds:[ecx]
0101BAE7 FFD0 call eax
0101BAE9 5A pop edx
0101BAEA 8BF8 mov edi,eax
0101BAEC 50 push eax
0101BAED 52 push edx
0101BAEE 8B33 mov esi,dword ptr ds:[ebx]
0101BAF0 8B43 20 mov eax,dword ptr ds:[ebx+20]
0101BAF3 03C2 add eax,edx
0101BAF5 8B08 mov ecx,dword ptr ds:[eax]
0101BAF7 894B 20 mov dword ptr ds:[ebx+20],ecx
0101BAFA 8B43 1C mov eax,dword ptr ds:[ebx+1C]
0101BAFD 03C2 add eax,edx
0101BAFF 8B08 mov ecx,dword ptr ds:[eax]
0101BB01 894B 1C mov dword ptr ds:[ebx+1C],ecx
0101BB04 03F2 add esi,edx
0101BB06 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
0101BB09 03CA add ecx,edx
0101BB0B 8D43 1C lea eax,dword ptr ds:[ebx+1C]
0101BB0E 50 push eax
0101BB0F 57 push edi
0101BB10 56 push esi
0101BB11 FFD1 call ecx
0101BB13 5A pop edx
0101BB14 58 pop eax
0101BB15 0343 08 add eax,dword ptr ds:[ebx+8]
0101BB18 8BF8 mov edi,eax
0101BB1A 52 push edx
0101BB1B 8BF0 mov esi,eax
0101BB1D 8B46 FC mov eax,dword ptr ds:[esi-4]
0101BB20 83C0 04 add eax,4
0101BB23 2BF0 sub esi,eax
0101BB25 8956 08 mov dword ptr ds:[esi+8],edx
0101BB28 8B4B 10 mov ecx,dword ptr ds:[ebx+10]
0101BB2B 894E 24 mov dword ptr ds:[esi+24],ecx
0101BB2E 8B4B 14 mov ecx,dword ptr ds:[ebx+14]
0101BB31 51 push ecx
0101BB32 894E 28 mov dword ptr ds:[esi+28],ecx
0101BB35 8B4B 0C mov ecx,dword ptr ds:[ebx+C]
0101BB38 894E 14 mov dword ptr ds:[esi+14],ecx
0101BB3B FFD7 call edi
0101BB3D 8985 C8120010 mov dword ptr ss:[ebp+100012C8],eax
0101BB43 8BF0 mov esi,eax
0101BB45 59 pop ecx
0101BB46 5A pop edx
0101BB47 EB 0C jmp short PECompac.0101BB55
0101BB49 03CA add ecx,edx
0101BB4B 68 00800000 push 8000
0101BB50 6A 00 push 0
0101BB52 57 push edi
0101BB53 FF11 call dword ptr ds:[ecx]
0101BB55 8BC6 mov eax,esi
0101BB57 5A pop edx
0101BB58 5E pop esi
0101BB59 5F pop edi
0101BB5A 59 pop ecx
0101BB5B 5B pop ebx
0101BB5C 5D pop ebp
0101BB5D FFE0 jmp eax <===一直单步到这里,eax0100739d很大的跳转
跳过去后就是oep
本人不解的是那个edx值跟oep有什么关系呢?后来看看那个edx的值01001016就是程序开头的地方啊。不过刚开始是01001016 8908 mov dword ptr ds:[eax],ecx
后来就变了那个大跳转。
有高手能指点一下原理吗?这是不是另外一种脱PECompact 2.x的方法呢??
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [求助]请教一个防拷贝问题 3302
- [求助]遇到一个狠毒的软件! 4488
- [讨论]好想问一下大家,学习破解的主要原因是什么 3316
- [求助]在脱PECompact时遇到的不解之处 2338
- [求助]用od载入程序,f9运行就出现以下错误,请高手指教! 4451
看原图
赞赏
雪币:
留言: