我的PE程序加密核心代码(MASM 6.0)(3)

时间:2005-12-20 来源: 作者: 点击:
push MB_ICONEXCLAMATION+MB_OK mov eax,[offset lpszLoadError-data1][ebx] push eax mov eax,[offset dll_name-data1][ebx] push eax push NULL call MessageBox invoke ExitProcess,NULL .endif .endif mov dword ptr[esi],0 mov [offset hdll-data1][ebx],eax mov
                    push MB_ICONEXCLAMATION+MB_OK
                    mov eax,[offset lpszLoadError-data1][ebx]
                    push eax
                    mov eax,[offset dll_name-data1][ebx]
                    push eax
                    push NULL
                    call MessageBox
                    invoke ExitProcess,NULL

                .endif
            .endif
            mov dword ptr[esi],0
            mov [offset hdll-data1][ebx],eax
            mov eax,[edi].FirstThunk
            invoke RVAtoAddr,eax
            push eax                    ;FirstThunk的偏移量压栈,
            .if [edi].OriginalFirstThunk!=0      ;有的连接器会将OriginalFirstThunk的值置0,这时取FirstThunk所指的数组的值指向涵数名
                mov eax,[edi].OriginalFirstThunk
                invoke RVAtoAddr,eax
                push eax                  ;OriginalFirstThunk的偏移量压栈,这时eax所指数组的值指向IMAGE_IMPORT_BY_NAME
            .else
                push eax    ;这时eax所指数组的值指向IMAGE_IMPORT_BY_NAME
            .endif
            call SetprocAddr
            pop edx
            add edx,sizeof IMAGE_IMPORT_DESCRIPTOR
            add edi,sizeof IMAGE_IMPORT_DESCRIPTOR
        .endw
impend:

      ret
import endp

RVAtoAddr proc  RVA:DWORD
    mov eax,RVA
    ADD eax,DWORD PTR[offset imagebase-data1][ebx]
    ret
RVAtoAddr endp
           
SetprocAddr proc uses edi ecx esi edx naddr:DWORD ,faddr:DWORD

        mov edi,naddr
        mov esi,faddr
        .while DWORD PTR[edi]!=0
            .if dword ptr[edi]&80000000h ;判断涵数是以序号方式引入,还是用名称的方式引入。
                mov eax,dword ptr[edi]
                and eax,7fffffffh ;得到引入函数的序号
                push eax
            .else
                mov eax,DWORD PTR[edi]
                invoke RVAtoAddr,eax            
                assume eax:ptr IMAGE_IMPORT_BY_NAME

                IF DEBUG
                    pusha
                    push MB_OK
                    lea ecx,[offset d_sz1-data1][ebx]
                    push ecx
                    lea ecx,[eax].Name1
                    push ecx
                    push 0
                    call MessageBox
                    popa
                ENDIF

                lea ecx,[eax].Name1    
                push ecx
                push ecx
            .endif

                mov ecx,[offset hdll-data1][ebx]
                push ecx
            call GetProcAddress
            .if eax==0
                lea eax,[offset lpszLoadError-data1][ebx]
                push MB_ICONEXCLAMATION+MB_OK
                push eax
                push eax
                push 0
                call MessageBox
                invoke ExitProcess,0
            .endif
            .if !(dword ptr[edi] & 80000000h)
                pop ecx
                mov DWORD PTR[ecx-2],0
            .endif
            mov DWORD PTR[esi],eax
            add esi,sizeof IMAGE_THUNK_DATA
            add edi,sizeof IMAGE_THUNK_DATA
          .endw

        ret
SetprocAddr endp
           
           
;----------------------------------------------------------
------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容