北斗壳(nspack3.7)的特点

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值