1.入口点处为:
pushfd
pushad
call XXXX
到OEP处的特点是:
popad
popfd
jmp OEP
所以,可通过查找popad;popfd;快速到OEP
2.加壳后的区段名为:
.nsp0
.nsp1
.nsp2
3.代码分析:
0067B3ED > 9C pushfd
0067B3EE 60 pushad
0067B3EF E8 00000000 call FoxitRea.0067B3F4
0067B3F4 5D pop ebp
0067B3F5 83ED 07 sub ebp,0x7
0067B3F8 8D8D 4FFCFFFF lea ecx,dword ptr ss:[ebp-0x3B1] ; 求得程序入口地址,将壳段入口作为偏移 保存到EBP中
0067B3FE 8039 01 cmp byte ptr ds:[ecx],0x1 ; 标志位
0067B401 0F84 42020000 je FoxitRea.0067B649
0067B407 C601 01 mov byte ptr ds:[ecx],0x1 ; 设置标志位
0067B40A 8BC5 mov eax,ebp ; eax=入口点
0067B40C 2B85 E3FBFFFF sub eax,dword ptr ss:[ebp-0x41D] ; eax=BaseAddr
0067B412 8985 E3FBFFFF mov dword ptr ss:[ebp-0x41D],eax ; 保存BaseAddr
0067B418 0185 13FCFFFF add dword ptr ss:[ebp-0x3ED],eax ; sizeOfHeader+BaseAddr=代码段
0067B41E 8DB5 57FCFFFF lea esi,dword ptr ss:[ebp-0x3A9]
0067B424 0106 add dword ptr ds:[esi],eax ; 入口点地址保存起来
0067B426 55 push ebp ; 入口点
0067B427 56 push esi ; 代码段地址
0067B428 6A 40 push 0x40
0067B42A 68 00100000 push 0x1000
0067B42F 68 00100000 push 0x1000
0067B434 6A 00 push 0x0
0067B436 FF95 8BFCFFFF call dword ptr ss:[ebp-0x375] ; VirtualAlloc
0067B43C 85C0 test eax,eax
0067B43E 0F84 69030000 je FoxitRea.0067B7AD ; 申请失败就跳走
0067B444 8985 0BFCFFFF mov dword ptr ss:[ebp-0x3F5],eax ; 申请成功,保存首地址
0067B44A E8 00000000 call FoxitRea.0067B44F
0067B44F 5B pop ebx ; ebx=当前地址
0067B450 B9 67030000 mov ecx,0x367
0067B455 03D9 add ebx,ecx
0067B457 50 push eax ; 申请的空间
0067B458 53 push ebx ; 从67B458开始的0x367个字节
0067B459 E8 B0020000 call FoxitRea.0067B70E ; 疑似APLIB解码出LZMA的代码
0067B45E 5E pop esi ; text段地址的地址
0067B45F 5D pop ebp ; 入口点
0067B460 8B36 mov esi,dword ptr ds:[esi] ; text段地址
0067B462 8BFD mov edi,ebp ; 入口点
0067B464 03BD D3FBFFFF add edi,dword ptr ss:[ebp-0x42D] ; 入口点偏移906
0067B46A 8BDF mov ebx,edi
0067B46C 833F 00 cmp dword ptr ds:[edi],0x0
0067B46F 75 0A jnz short FoxitRea.0067B47B
0067B471 83C7 04 add edi,0x4
0067B474 B9 00000000 mov ecx,0x0
0067B479 EB 16 jmp short FoxitRea.0067B491
0067B47B B9 01000000 mov ecx,0x1
0067B480 033B add edi,dword ptr ds:[ebx] ; 入口点偏移906+4
0067B482 83C3 04 add ebx,0x4
0067B485 833B 00 cmp dword ptr ds:[ebx],0x0
0067B488 74 34 je short FoxitRea.0067B4BE
0067B48A 0113 add dword ptr ds:[ebx],edx
0067B48C 8B33 mov esi,dword ptr ds:[ebx]
0067B48E 037B 04 add edi,dword ptr ds:[ebx+0x4]
0067B491 57 push edi
0067B492 51 push ecx
0067B493 53 push ebx
0067B494 FFB5 8FFCFFFF push dword ptr ss:[ebp-0x371] ; VirtualFree
0067B49A FFB5 8BFCFFFF push dword ptr ss:[ebp-0x375] ; VirtualAlloc
0067B4A0 8BD6 mov edx,esi ; 代码段
0067B4A2 8BCF mov ecx,edi
0067B4A4 8B85 0BFCFFFF mov eax,dword ptr ss:[ebp-0x3F5] ; 申请的空间
0067B4AA 05 AA050000 add eax,0x5AA
0067B4AF FFD0 call eax ; 解码了一段代码
0067B4B1 5B pop ebx
0067B4B2 59 pop ecx
0067B4B3 5F pop edi
0067B4B4 83F9 00 cmp ecx,0x0
0067B4B7 74 05 je short FoxitRea.0067B4BE
0067B4B9 83C3 08 add ebx,0x8
0067B4BC ^ EB C7 jmp short FoxitRea.0067B485
0067B4BE 68 00800000 push 0x8000
0067B4C3 - E9 00FFB50B jmp 0C1DB3C8
0067B4C8 FC cld
0067B4C9 FFFF ??? ; 未知命令
0067B4CB FF95 8FFCFFFF call dword ptr ss:[ebp-0x371] ; VirtualFree,释放申请的空间
0067B4D1 8DB5 13FCFFFF lea esi,dword ptr ss:[ebp-0x3ED]
0067B4D7 8B4E 08 mov ecx,dword ptr ds:[esi+0x8]
0067B4DA 8D56 10 lea edx,dword ptr ds:[esi+0x10]
0067B4DD 8B36 mov esi,dword ptr ds:[esi] ; 代码段首地址
0067B4DF 8BFE mov edi,esi
0067B4E1 83F9 00 cmp ecx,0x0
0067B4E4 74 3F je short FoxitRea.0067B525
0067B4E6 8A07 mov al,byte ptr ds:[edi]
0067B4E8 47 inc edi
0067B4E9 2C E8 sub al,0xE8 ; -E8后与1比较,就是与e9比较的意思。。查找E9(JMP)
0067B4EB 3C 01 cmp al,0x1
0067B4ED ^ 77 F7 ja short FoxitRea.0067B4E6
0067B4EF 8B07 mov eax,dword ptr ds:[edi] ; 保存找到的代码
0067B4F1 807A 01 00 cmp byte ptr ds:[edx+0x1],0x0
0067B4F5 74 14 je short FoxitRea.0067B50B
0067B4F7 8A1A mov bl,byte ptr ds:[edx]
0067B4F9 381F cmp byte ptr ds:[edi],bl
0067B4FB ^ 75 E9 jnz short FoxitRea.0067B4E6
0067B4FD 8A5F 04 mov bl,byte ptr ds:[edi+0x4]
0067B500 66:C1E8 08 shr ax,0x8
0067B504 C1C0 10 rol eax,0x10
0067B507 86C4 xchg ah,al
0067B509 EB 0A jmp short FoxitRea.0067B515
0067B50B 8A5F 04 mov bl,byte ptr ds:[edi+0x4]
0067B50E 86C4 xchg ah,al
0067B510 C1C0 10 rol eax,0x10
0067B513 86C4 xchg ah,al
0067B515 2BC7 sub eax,edi
0067B517 03C6 add eax,esi
0067B519 8907 mov dword ptr ds:[edi],eax
0067B51B 83C7 05 add edi,0x5
0067B51E 80EB E8 sub bl,0xE8
0067B521 8BC3 mov eax,ebx
0067B523 ^ E2 C6 loopd short FoxitRea.0067B4EB
0067B525 E8 3A010000 call FoxitRea.0067B664
0067B52A 8D8D 27FCFFFF lea ecx,dword ptr ss:[ebp-0x3D9]
0067B530 8B41 08 mov eax,dword ptr ds:[ecx+0x8]
0067B533 83F8 00 cmp eax,0x0
0067B536 0F84 81000000 je FoxitRea.0067B5BD
0067B53C 8BF2 mov esi,edx
0067B53E 2B71 10 sub esi,dword ptr ds:[ecx+0x10]
0067B541 74 7A je short FoxitRea.0067B5BD
0067B543 8971 10 mov dword ptr ds:[ecx+0x10],esi
0067B546 8DB5 57FCFFFF lea esi,dword ptr ss:[ebp-0x3A9]
0067B54C 8B36 mov esi,dword ptr ds:[esi]
0067B54E 8D5E FC lea ebx,dword ptr ds:[esi-0x4]
0067B551 8B01 mov eax,dword ptr ds:[ecx]
0067B553 83F8 01 cmp eax,0x1
0067B556 74 0A je short FoxitRea.0067B562
0067B558 8BFA mov edi,edx
0067B55A 0379 08 add edi,dword ptr ds:[ecx+0x8]
0067B55D 8B49 10 mov ecx,dword ptr ds:[ecx+0x10]
0067B560 EB 08 jmp short FoxitRea.0067B56A
0067B562 8BFE mov edi,esi
0067B564 0379 08 add edi,dword ptr ds:[ecx+0x8]
0067B567 8B49 10 mov ecx,dword ptr ds:[ecx+0x10]
0067B56A 33C0 xor eax,eax
0067B56C 8A07 mov al,byte ptr ds:[edi]
0067B56E 47 inc edi
0067B56F 0BC0 or eax,eax
0067B571 74 20 je short FoxitRea.0067B593
0067B573 3C EF cmp al,0xEF
0067B575 77 06 ja short FoxitRea.0067B57D
0067B577 03D8 add ebx,eax
0067B579 010B add dword ptr ds:[ebx],ecx
0067B57B ^ EB ED jmp short FoxitRea.0067B56A
0067B57D 24 0F and al,0xF
0067B57F C1E0 10 shl eax,0x10
0067B582 66:8B07 mov ax,word ptr ds:[edi]
0067B585 83C7 02 add edi,0x2
0067B588 0BC0 or eax,eax
0067B58A ^ 75 EB jnz short FoxitRea.0067B577
0067B58C 8B07 mov eax,dword ptr ds:[edi]
0067B58E 83C7 04 add edi,0x4
0067B591 ^ EB E4 jmp short FoxitRea.0067B577
0067B593 33DB xor ebx,ebx
0067B595 87FE xchg esi,edi
0067B597 8B06 mov eax,dword ptr ds:[esi]
0067B599 83F8 00 cmp eax,0x0
0067B59C 74 1F je short FoxitRea.0067B5BD
0067B59E AD lods dword ptr ds:[esi]
0067B59F 0BC0 or eax,eax
0067B5A1 74 08 je short FoxitRea.0067B5AB
0067B5A3 03D8 add ebx,eax
0067B5A5 66:010C1F add word ptr ds:[edi+ebx],cx
0067B5A9 ^ EB F3 jmp short FoxitRea.0067B59E
0067B5AB 33DB xor ebx,ebx
0067B5AD C1E9 10 shr ecx,0x10
0067B5B0 AD lods dword ptr ds:[esi]
0067B5B1 0BC0 or eax,eax
0067B5B3 74 08 je short FoxitRea.0067B5BD
0067B5B5 03D8 add ebx,eax
0067B5B7 66:010C1F add word ptr ds:[edi+ebx],cx
0067B5BB ^ EB F3 jmp short FoxitRea.0067B5B0
0067B5BD 8DB5 E3FBFFFF lea esi,dword ptr ss:[ebp-0x41D]
0067B5C3 8B16 mov edx,dword ptr ds:[esi]
0067B5C5 8DB5 3FFCFFFF lea esi,dword ptr ss:[ebp-0x3C1]
0067B5CB 8A06 mov al,byte ptr ds:[esi]
0067B5CD 3C 01 cmp al,0x1
0067B5CF 75 3F jnz short FoxitRea.0067B610
0067B5D1 0356 04 add edx,dword ptr ds:[esi+0x4]
0067B5D4 56 push esi
0067B5D5 52 push edx
0067B5D6 56 push esi
0067B5D7 6A 04 push 0x4
0067B5D9 68 00010000 push 0x100
0067B5DE 52 push edx
0067B5DF FF95 87FCFFFF call dword ptr ss:[ebp-0x379]
0067B5E5 5F pop edi
0067B5E6 5E pop esi
0067B5E7 83F8 01 cmp eax,0x1
0067B5EA 0F85 BD010000 jnz FoxitRea.0067B7AD
0067B5F0 83C6 08 add esi,0x8
0067B5F3 B9 08000000 mov ecx,0x8
0067B5F8 F3:A4 rep movs byte ptr es:[edi],byte ptr d>
0067B5FA 83EE 0C sub esi,0xC
0067B5FD 83EF 08 sub edi,0x8
0067B600 56 push esi
0067B601 FF76 FC push dword ptr ds:[esi-0x4]
0067B604 68 00010000 push 0x100
0067B609 57 push edi
0067B60A FF95 87FCFFFF call dword ptr ss:[ebp-0x379]
0067B610 55 push ebp ; 入口点
0067B611 5B pop ebx ; 入口点
0067B612 81EB 21000000 sub ebx,0x21
0067B618 33C9 xor ecx,ecx
0067B61A 8A0B mov cl,byte ptr ds:[ebx]
0067B61C 80F9 00 cmp cl,0x0
0067B61F 74 28 je short FoxitRea.0067B649
0067B621 43 inc ebx
0067B622 8DB5 E3FBFFFF lea esi,dword ptr ss:[ebp-0x41D]
0067B628 8B16 mov edx,dword ptr ds:[esi] ; BaseAddr
0067B62A 56 push esi
0067B62B 51 push ecx
0067B62C 53 push ebx
0067B62D 52 push edx
0067B62E 56 push esi
0067B62F FF33 push dword ptr ds:[ebx]
0067B631 FF73 04 push dword ptr ds:[ebx+0x4]
0067B634 8B43 08 mov eax,dword ptr ds:[ebx+0x8]
0067B637 03C2 add eax,edx
0067B639 50 push eax
0067B63A FF95 87FCFFFF call dword ptr ss:[ebp-0x379] ; VirtualProtect
0067B640 5A pop edx
0067B641 5B pop ebx
0067B642 59 pop ecx
0067B643 5E pop esi
0067B644 83C3 0C add ebx,0xC
0067B647 ^ E2 E1 loopd short FoxitRea.0067B62A
0067B649 B8 00000000 mov eax,0x0
0067B64E 83F8 00 cmp eax,0x0
0067B651 74 0A je short FoxitRea.0067B65D
0067B653 61 popad
0067B654 9D popfd
0067B655 B8 01000000 mov eax,0x1
0067B65A C2 0C00 retn 0xC
0067B65D 61 popad
0067B65E 9D popfd
0067B65F - E9 D112DDFF jmp FoxitRea.0044C935