首页
社区
课程
招聘
《软件加密技术内幕》_外壳软件的编写基础中加入密码的检测的问题
发表于: 2005-4-8 09:36 13143

《软件加密技术内幕》_外壳软件的编写基础中加入密码的检测的问题

2005-4-8 09:36
13143
看雪师傅,在《软件加密技术内幕》第6章中,外壳软件的编写基础的代码中,
我在外壳的第二段中想加入一个对话框,这个对话框在执行加壳后的文件时,先在屏幕显示出来,
然后按确认后再执行文件,我是个新手,不知道如何实现,我的问题如下:
1、在外壳程序的第一段和第二段中,调用函数用的都是call,为什么不用invoke
2、我在外壳程序中加了如下代码,执行结果不对

.data
MsgCaption    db "Hi, Masm32!",0
MsgBoxText    db "Win32 Assembly is Great!",0

.code

invoke MessageBox ,0,addr MsgBoxText, addr MsgCaption, MB_OK

我是否要重新构造外壳的输入表
3、外壳程序的第一段中手工构造的输入表,符合PE文件的格式吗?另外,为什么是3个函数的
输入表,原文件如下:

ImportTableBegin:
ImportTable        DD        AddressFirst-ImportTable  
                DD        0,0
AppImpRVA1        DD        DllName-ImportTable   
AppImpRVA2        DD        AddressFirst-ImportTable
                DD        0,0,0,0,0
AddressFirst        DD        FirstFunc-ImportTable   
AddressSecond        DD        SecondFunc-ImportTable   
AddressThird        DD        ThirdFunc-ImportTable
                DD        0
DllName                DB        'KERNEL32.dll'
                DW        0
FirstFunc        DW        0       
                DB        'GetProcAddress',0
SecondFunc        DW        0
                DB        'GetModuleHandleA',0
ThirdFunc        DW        0
                DB        'LoadLibraryA',0
ImportTableEnd:
ShellBase        DD        0
ShellPackSize        DD        0
Virtualalloc        DB        'VirtualAlloc',0
VirtualallocADDR        DD        0
TlsTable        DB        18h dup (?)
4、看雪师傅能否给出实现的例子?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
外壳部分shell.asm是用自建输入表的方法调用相关API函数,具体参看书的P268,所以不能用invoke。获得GetProceAddress、GetModuleHandle、GetModuleHandleA函数后,有这3个函数就可调用其他任何API函数了,这3个函数用法你Google搜索一下,很多介绍的。你要调用MessageBox,就得靠这3个函数来做了。建议你跟踪一下其他外壳,如Aspack等,看看他们是如何在外壳调用其他函数的。

另外提问请注意几点:
1、不要发重复帖(如在这发一份,脱壳论坛发一份);
2、不要点将(你点名,无形中将其他人拒之门外了);
2005-4-8 11:37
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看雪师傅,印豪先生写的自建的输入表的结构我看不懂,好象不符和PE文件的格式,你能否给我详细说明一下
2005-4-8 11:49
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哦 明白了 下次不会了
2005-4-8 11:49
0
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
最初由 jianlizhao 发布
看雪师傅,印豪先生写的自建的输入表的结构我看不懂,好象不符和PE文件的格式,你能否给我详细说明一下


你看看书中的 268页,这里讲的仔细些,和印豪那外壳是一回事。
2005-4-8 11:52
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
能否给出调用invoke的例子
2005-4-8 11:59
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
上面写错了,能否给出在外壳中调用MessageBox 的例子
2005-4-8 12:21
0
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
你看看shell.asm中的VirtualFree函数调用
一样的,记得用Getprocaddress获得Messageboxa函数地址后,再将各参数Push进堆栈,再CALL EAX即可了。
2005-4-8 12:38
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这是Virtualfree的定义:
S_Virtualfree        DB        'VirtualFree',0
S_VirtualfreeADDR        DD        0
以下是Virtualfree的调用吗?
mov   esi,eax
lea   ebx,dword ptr [ebp+(S_Virtualfree-ShellStart)]
push  ebx
push  esi
call  dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
mov   dword ptr [ebp+(S_VirtualfreeADDR-ShellStart)],eax

我真苯,还是看不懂,
请各位师傅指点
2005-4-8 13:46
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
各位师傅,能否在原代码的基础上给出调用messagebox的例子,
另外,如果不是调用messagebox,而是调用自己编写的函数,而自己的
函数中有调用了动态连接库,又该如何实现呢?
2005-4-8 14:08
0
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
11
希望你能打好基础,先看懂现成的源码。写壳是一个考查你综合能力的事情。
关键就一句:
GetProcAddress ( GetModuleHandle("USER32.dll"),"Messageboxa");

ShellStart0:
        call        next0
;********************
ImportTableBegin:
ImportTable        DD        AddressFirst-ImportTable  
                DD        0,0
AppImpRVA1        DD        DllName-ImportTable   
AppImpRVA2        DD        AddressFirst-ImportTable
                DD        0,0,0,0,0
AddressFirst        DD        FirstFunc-ImportTable   
AddressSecond        DD        SecondFunc-ImportTable   
AddressThird        DD        ThirdFunc-ImportTable
                DD        0
DllName                DB        'KERNEL32.dll'
                DW        0
FirstFunc        DW        0       
                DB        'GetProcAddress',0
SecondFunc        DW        0
                DB        'GetModuleHandleA',0
ThirdFunc        DW        0
                DB        'LoadLibraryA',0
ImportTableEnd:
ShellBase        DD        0
ShellPackSize        DD        0
Virtualalloc        DB        'VirtualAlloc',0
VirtualallocADDR        DD        0
TlsTable        DB        18h dup (?)
next0:
        pop        ebp
        sub        ebp,(ImportTable-ShellStart0)
        lea        esi,[ebp+(DllName-ShellStart0)]
        push        esi
        call        dword ptr [ebp+(AddressSecond-ShellStart0)]
        lea        esi,[ebp+(Virtualalloc-ShellStart0)]
        push        esi
        push        eax
        call        dword ptr [ebp+(AddressFirst-ShellStart0)]
        mov        dword ptr [ebp+(VirtualallocADDR-ShellStart0)],eax
        push        PAGE_READWRITE
        push        MEM_COMMIT
        push        dword ptr [ebp+(ShellPackSize-ShellStart0)]
        push        0
        call        dword ptr [ebp+(VirtualallocADDR-ShellStart0)]
        push        eax
        mov        ebx,dword ptr [ebp+(ShellBase-ShellStart0)]
        add        ebx,ebp
        push        eax
        push        ebx
        call        _aP_depack_asm
        pop        edx
        push        ebp
        jmp        edx
_aP_depack_asm:
    pushad
    mov    esi, [esp + 36]    ; C calling convention
    mov    edi, [esp + 40]
    cld
    mov    dl, 80h
    xor    ebx, ebx
literal:
    movsb
    mov    bl, 2
nexttag:
    call   getbit
    jnc    literal

    xor    ecx, ecx
    call   getbit
    jnc    codepair
    xor    eax, eax
    call   getbit
    jnc    shortmatch
    mov    bl, 2
    inc    ecx
    mov    al, 10h
getmorebits:
    call   getbit
    adc    al, al
    jnc    getmorebits
    jnz    domatch
    stosb
    jmp    short nexttag
codepair:
    call   getgamma_no_ecx
    sub    ecx, ebx
    jnz    normalcodepair
    call   getgamma
    jmp    short domatch_lastpos
shortmatch:
    lodsb
    shr    eax, 1
    jz     donedepacking
    adc    ecx, ecx
    jmp    short domatch_with_2inc
normalcodepair:
    xchg   eax, ecx
    dec    eax
    shl    eax, 8
    lodsb
    call   getgamma
    cmp    eax, 32000
    jae    domatch_with_2inc
    cmp    ah, 5
    jae    domatch_with_inc
    cmp    eax, 7fh
    ja     domatch_new_lastpos
domatch_with_2inc:
    inc    ecx
domatch_with_inc:
    inc    ecx
domatch_new_lastpos:
    xchg   eax, ebp
domatch_lastpos:
    mov    eax, ebp
    mov    bl, 1
domatch:
    push   esi
    mov    esi, edi
    sub    esi, eax
    rep    movsb
    pop    esi
    jmp    short nexttag
getbit:
    add     dl, dl
    jnz     stillbitsleft
    mov     dl, [esi]
    inc     esi
    adc     dl, dl
stillbitsleft:
    ret
getgamma:
    xor    ecx, ecx
getgamma_no_ecx:
    inc    ecx
getgammaloop:
    call   getbit
    adc    ecx, ecx
    call   getbit
    jc     getgammaloop
    ret
donedepacking:
    sub    edi, [esp + 40]
    mov    [esp + 28], edi    ; return unpacked length in eax
    popad
    ret        8h
ShellEnd0:
;*****************
ShellStart:
        call        $+5
        pop        edx
        sub        edx,5h
        pop        ebp
        mov        ecx,3h
        lea        esi,[ebp+(AddressFirst-ShellStart0)]
        lea        edi,[edx+(GetprocaddressADDR-ShellStart)]
    MoveThreeFuncAddr:
        mov        eax,dword ptr [esi]
        mov        dword ptr [edi],eax
        add        esi,4h
        add        edi,4h
        loop        MoveThreeFuncAddr
        lea        eax,[ebp+(_aP_depack_asm-ShellStart0)]
        mov        dword ptr [edx+(aP_depackAddr-ShellStart)],eax
        mov        eax,dword ptr [ebp+(VirtualallocADDR-ShellStart0)]
        mov        dword ptr [edx+(S_VirtualallocADDR-ShellStart)],eax
        mov        ebp,edx
        push        0
        call        dword ptr [ebp+(GetmulehandleADDR-ShellStart)]
        mov        dword ptr [ebp+(FileHandle-ShellStart)],eax        ;取得当前文件句柄

;**********************************************************************************************************
; 调用Messageboxa示例
        lea        esi,dword ptr [ebp+(S_User32DllName-ShellStart)]
        push        esi
        call        dword ptr [ebp+(GetmulehandleADDR-ShellStart)]  ; GetModuleHandle("USER32.dll")
        .if        eax==0
                push        esi
                call        dword ptr [ebp+(LoadlibraryADDR-ShellStart)]
        .endif
        mov        esi,eax

       
        lea        ebx,dword ptr [ebp+(S_messagebox-ShellStart)]
        push    ebx
        push    esi
        ;即相当于 GetProcAddress ( GetModuleHandle("USER32.dll"),"Messageboxa");
        call        dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
        push        MB_OK
        lea        ebx, dword ptr [ebp+(S_M_wrong-ShellStart)]
        push        ebx
        push        ebx
        push        0
        call    eax

;**********************************************************************************************************

        ;*******取一些函数入口
        lea        esi,dword ptr [ebp+(Ker32DllName-ShellStart)]
        push        esi
        call        dword ptr [ebp+(GetmulehandleADDR-ShellStart)]
        .if        eax==0
                push        esi
                call        dword ptr [ebp+(LoadlibraryADDR-ShellStart)]
        .endif
        mov        esi,eax
        lea        ebx,dword ptr [ebp+(S_Virtualfree-ShellStart)]
        push        ebx
        push        esi
        call        dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
        mov        dword ptr [ebp+(S_VirtualfreeADDR-ShellStart)],eax
        ;*******解压缩各段********
        mov        ebx,S_PackSection-ShellStart
    DePackNextSection:
        cmp        dword ptr [ebp+ebx],0h
        jz        AllSectionDePacked
        push        ebx
        push        PAGE_READWRITE
        push        MEM_COMMIT
        push        dword ptr [ebp+ebx]
        push        0
        call        dword ptr [ebp+(S_VirtualallocADDR-ShellStart)]        ;申请内存进行读写
        pop        ebx
        mov        esi,eax
        mov        eax,ebx
        add        eax,ebp
        mov        edi,dword ptr [eax+4h]
        add        edi,dword ptr [ebp+(FileHandle-ShellStart)]
        push        esi
        push        edi
        call        dword ptr [ebp+(aP_depackAddr-ShellStart)]
        mov        ecx,dword ptr [ebp+ebx]
        push        esi
        rep        movsb
        pop        esi
        push        ebx
        push        MEM_RELEASE
        push        0
        push        esi
        call        dword ptr [ebp+(S_VirtualfreeADDR-ShellStart)]        ;释放内存
        pop        ebx
        add        ebx,0ch
        jmp        DePackNextSection
    AllSectionDePacked:
        ;*******恢复原输入表******
        mov        eax,dword ptr [ebp+(S_IsProtImpTable-ShellStart)]
        .if        eax == 0
                mov        edi,dword ptr [ebp+(ImpTableAddr-ShellStart)]
                add        edi,dword ptr [ebp+(FileHandle-ShellStart)]
            GetNextDllFuncAddr:
                mov        esi,dword ptr [edi+0ch]
                .if        esi == 0
                        jmp        AllDllFuncAddrGeted
                .endif
                add        esi,dword ptr [ebp+(FileHandle-ShellStart)]
                push        esi
                call        dword ptr [ebp+(GetmulehandleADDR-ShellStart)]
                .if        eax==0
                        push        esi
                        call        dword ptr [ebp+(LoadlibraryADDR-ShellStart)]
                .endif
                mov        esi,eax
                mov        edx,dword ptr [edi]
                .if        edx == 0
                        mov        edx,dword ptr [edi+10h]
                .endif
                add        edx,dword ptr [ebp+(FileHandle-ShellStart)]
                mov        ebx,dword ptr [edi+10h]
                add        ebx,dword ptr [ebp+(FileHandle-ShellStart)]
            GetNextFuncAddr:
                mov        eax,dword ptr [edx]
                .if        eax == 0
                        jmp        AllFuncAddrGeted
                .endif
                push        ebx
                push        edx
                cdq
                .if        edx == 0       
                        add        eax,2h
                        add        eax,dword ptr [ebp+(FileHandle-ShellStart)]
                .else
                        and        eax,7fffffffh
                .endif
                push        eax
                push        esi
                call        dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
                mov        dword ptr [ebx],eax
                pop        edx
                pop        ebx
                add        edx,4h
                add        ebx,4h
                jmp        GetNextFuncAddr
            AllFuncAddrGeted:
                add        edi,14h
                jmp        GetNextDllFuncAddr
            AllDllFuncAddrGeted:
        .else
                mov        edx,dword ptr [ebp+(ImpTableAddr-ShellStart)]
                add        edx,ebp
            GetNextDllFuncAddr2:
                mov        edi,dword ptr [edx]
                .if        edi == 0
                        jmp        AllDllFuncAddrGeted2
                .endif
                add        edi,dword ptr [ebp+(FileHandle-ShellStart)]
                add        edx,5h
                mov        esi,edx
                push        esi
                call        dword ptr [ebp+(GetmulehandleADDR-ShellStart)]
                .if        eax==0
                        push        esi
                        call        dword ptr [ebp+(LoadlibraryADDR-ShellStart)]
                .endif
                movzx        ecx,byte ptr [esi-1]
                add        esi,ecx
                mov        edx,esi
                mov        esi,eax
                inc        edx
                mov        ecx,dword ptr [edx]
                add        edx,4h
            GetNextFuncAddr2:
                push        ecx
                movzx        eax,byte ptr [edx]
                .if        eax == 0
                        inc        edx
                        push        edx
                        mov        eax,dword ptr [edx]
                        push        eax
                        push        esi
                        call        dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
                        mov        dword ptr [edi],eax
                        pop        edx
                        add        edx,4h
                .else
                        inc        edx
                        push        edx
                        push        edx
                        push        esi
                        call        dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
                        mov        dword ptr [edi],eax
                        pop        edx
                        movzx        eax,byte ptr [edx-1]
                        add        edx,eax
                .endif
                inc        edx
                add        edi,4h
                pop        ecx
                loop        GetNextFuncAddr2
                jmp        GetNextDllFuncAddr2
            AllDllFuncAddrGeted2:
        .endif
        ;*******修正特殊代码加密的代码
        mov        eax,dword ptr [ebp+(S_IsCodeProt-ShellStart)]
        .if        eax == 1
                mov        edi,dword ptr [ebp+(CodeProtAddr-ShellStart)]
                add        edi,ebp
                lea        esi,[ebp+(CodeProtFunc-ShellStart)]
            FixNextCodeProcCode:
                mov        eax,dword ptr [edi]
                .if        eax == 0
                        jmp        FixAllCodeProcCode
                .endif
                and        eax,7fffffffh
                mov        ebx,esi
                sub        ebx,eax
                mov        dword ptr [eax-4],ebx
                add        edi,8h
                jmp        FixNextCodeProcCode
            FixAllCodeProcCode:
        .endif
        ;*******anti  dump*****************
        push        fs:[30h]
        pop        eax
        test        eax,eax
        js        fuapfdw_is9x  
fuapfdw_isNT:
        mov        eax, [eax+0ch]
        mov        eax, [eax+0ch]
        mov        dword ptr [eax+20h], 1000h
        jmp        fuapfdw_finished
fuapfdw_is9x:
        push        0
        call        dword ptr [ebp+(GetmulehandleADDR-ShellStart)]
        test        edx, edx
        jns        fuapfdw_finished
        cmp        dword ptr [edx+8h], -1
        jne        fuapfdw_finished  
        mov        edx, [edx+4]  
        mov        dword ptr [edx+50h], 1000h
fuapfdw_finished:
        ;*************准备返回OEP***************
        mov        dword ptr [ebp+(ShellImageBase-ShellStart)],ebp
        mov        eax,dword ptr [ebp+(OEP-ShellStart)]
        add        eax,dword ptr [ebp+(FileHandle-ShellStart)]
        jmp        eax
        ;*******特殊代码加密的恢复函数******
        ;***通过此函数,找到正确的输入表项***
    CodeProtFunc:
        push        eax
        mov        eax,esp
        pushad
        mov        ebx,eax
        call        $+9
    ShellImageBase:
        DD        0
        pop        ebp
        mov        ebp,dword ptr [ebp]
        mov        edi,dword ptr [ebx+4]
        mov        esi,dword ptr [ebp+(CodeProtAddr-ShellStart)]
        add        esi,ebp
    FindCodeFuncReturnAddr:
        mov        eax,dword ptr [esi]
        xor        edx,edx
        mov        ecx,2h
        mul        ecx
        shr        eax,1
        .if        edi == eax
                .if        dl == 0
                jmp        FoundCodeFuncReturnAddr
                .else
                jmp        FoundCodeFuncReturnAddr2
                .endif
        .endif
        add        esi,8h
        jmp        FindCodeFuncReturnAddr
    FoundCodeFuncReturnAddr:
        mov        eax,dword ptr [esi+4]
        mov        dword ptr [ebx],eax
        popad
        pop        eax
        mov        eax,dword ptr [eax]
        jmp        eax
    FoundCodeFuncReturnAddr2:
        mov        eax,dword ptr [esi+4]
        mov        dword ptr [ebx],eax
        popad
        pop        eax
        add        esp,4h
        mov        eax,dword ptr [eax]
        jmp        eax
        ;************************
GetprocaddressADDR        DD        0
GetmulehandleADDR        DD        0
LoadlibraryADDR                DD        0
S_VirtualallocADDR        DD        0
FileHandle                DD        0
S_IsProtImpTable        DD        0
S_IsCodeProt                DD        0
ImpTableAddr                DD        0
CodeProtAddr                DD        0
OEP                        DD        0
aP_depackAddr                DD        0
Ker32DllName                DB        'KERNEL32.dll',0
S_Virtualfree                DB        'VirtualFree',0
S_VirtualfreeADDR        DD        0
S_PackSection        DB        0a0h dup (?)

S_User32DllName                DB        'USER32.dll', 0
S_messagebox                DB        'MessageBoxA', 0
S_M_wrong                DB        'warning', 0

ShellEnd:

;******************************************************;
;在外壳前由程序在加壳时加入随机花指令,产生方法是有8组花;
;指令由程序;随机抽取,每部分之中又有可随机插入的部分,一 ;
;般看上去就较难发现其规律了.********************;
Junk_Code_1_Start:                ;17字节
        nop
Junk_Code_1_End:
        ;*****
Junk_Code_2_Start:                ;22字节
nop
Junk_Code_2_End:
        ;*****
Junk_Code_3_Start:                ;42字节
        nop
Junk_Code_3_End:
        ;*****
Junk_Code_4_Start:                ;26字节
        nop
Junk_Code_4_End:
        ;*****
Junk_Code_5_Start:                ;19字节
        nop
Junk_Code_5_End:
        ;*****
Junk_Code_6_Start:
        nop
Junk_Code_6_End:
        ;*****
Junk_Code_7_Start:
nop
Junk_Code_7_End:
        ;*****
Junk_Code_8_Start:
nop
Junk_Code_8_End:

        ;*****
2005-4-8 14:58
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
lea  ebx,dword ptr [ebp+(S_messagebox-ShellStart)]
  push    ebx
  push    esi
  ;即相当于 GetProcAddress ( GetModuleHandle("USER32.dll"),"Messageboxa");
  call  dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
  push  MB_OK
  lea  ebx, dword ptr [ebp+(S_M_wrong-ShellStart)]
  push  ebx
  push  ebx
  push  0
  call    eax

这段代码调用MessageBoxA的参数的压栈的顺序是什么顺序,MessageBoxA这个函数我在MSDN中还查不到,
2005-4-8 16:36
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
为什么在外壳中调用函数必须这样去做,这是不是与PE文件的输入表有关,还是和PE文件的加载器的原理有关
2005-4-8 16:51
0
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
14
最初由 jianlizhao 发布
lea ebx,dword ptr [ebp+(S_messagebox-ShellStart)]
push ebx
push esi
;即相当于 GetProcAddress ( GetModuleHandle("USER32.dll"),"Messageboxa");
call dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
........


msdn里查MessageBox,MessageBoxA是MessageBox的ANSI格式。
int MessageBox(

    HWND hWnd,        // handle of owner window
    LPCTSTR lpText,        // address of text in message box
    LPCTSTR lpCaption,        // address of title of message box  
    UINT uType         // style of message box
   );
2005-4-8 19:27
0
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
15
最初由 jianlizhao 发布
为什么在外壳中调用函数必须这样去做,这是不是与PE文件的输入表有关,还是和PE文件的加载器的原理有关


你现在是写“壳”,壳模拟了PE加载器的一些功能,如IAT初始化等, 而壳本身要调用的API函数,你当然可以在自建输入表那段构造,但这样强度就几乎没有了,所以一般用Getprocaddress调用,这样隐蔽些,一些强度高的壳,都自己构造Getprocaddress函数,不用系统提供的Getprocaddress。

不知你会脱壳否?掌握一些脱壳技术对你写壳有帮助的。
2005-4-8 19:29
0
雪    币: 239
活跃值: (478)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
看雪老大真有耐心!
2005-4-9 12:21
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
17
是r
2005-4-19 14:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
跟着学习了一把,谢了。
2005-11-15 15:23
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
看雪大哥的这份执着,,学习~~~
2005-12-11 10:20
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
ImportTable  DD  AddressFirst-ImportTable  
我今天在看书时看到这名代码有点郁闷,AddressFirst-ImportTable这代表什么数据类型?DD定义变量时有这样写的吗?老大提示一下!
2006-7-14 10:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
哦 明白了 下次不会
2006-12-24 11:13
0
游客
登录 | 注册 方可回帖
返回
//