嗯嗯这些其实都是很久很久以前的技术了,发到这里来也只是怀旧一下吧,嘿嘿
下面的代码就是我学习这些技术的时候写的,本来是用 C 写的,写完了觉得 C 不够过瘾,于是用汇编重写了一个,大牛不要看了吧,很基础的东西....

代码:
#define nth 0x3c
#define exp 0x78
#define funname 0x20
#define funaddr 0x1c
#define expfunnum 0x18

#define kernelbase 0x00
#define gpa 0x04
#define expb 0x08
#define expnum 0x0c
#define expfunname 0x10
#define expfunaddr 0x14
#define user32h 0x18
#define msgboxf 0x1c
#define loadlib 0x20
//void dcores();

void __declspec(naked) dcores()
{
  __asm
  {
    jmp start;
user32table:
    __emit 'u';
    __emit 's';
    __emit 'e';
    __emit 'r';
    __emit '3';
    __emit '2';
    __emit '.';
    __emit 'd';
    __emit 'l';
    __emit 'l';
    __emit 0;
msgboxtable:
    __emit 'M';
    __emit 'e';
    __emit 's';
    __emit 's';
    __emit 'a';
    __emit 'g';
    __emit 'e';
    __emit 'B';
    __emit 'o';
    __emit 'x';
    __emit 'A';
    __emit 0;
loadlibrarytable:
    __emit 'L';
    __emit 'o';
    __emit 'a';
    __emit 'd';
    __emit 'L';
    __emit 'i';
    __emit 'b';
    __emit 'r';
    __emit 'a';
    __emit 'r';
    __emit 'y';
    __emit 'A';
    __emit 0;
start:
    push ebp;
    sub esp, kernelbase+gpa+expb+expnum+expfunname+expfunaddr+user32h+msgboxf;

    mov eax, fs:[0];
re1:
    mov ebx, [eax+4];
    cmp dword ptr [eax], 0xFFFFFFFF;
    je ok;
    mov eax, [eax];
    jmp re1;
ok:
    cmp dword ptr [ebx], 0x00905a4d;
    je ok1;
    dec ebx;
    jmp ok;
ok1:
    mov eax, ebx;
    add eax, [ebx+nth];
    cmp dword ptr [eax], 0x00004550;
    jne end;
    mov [esp+kernelbase], ebx;
    mov ebp, ebx;
    add ebx, [eax+exp];
    mov [esp+expb], ebx;
    mov eax, [ebx+expfunnum];
    mov [esp+expnum], eax;
    mov ecx, eax;
    mov eax, [ebx+funname];
    add eax, ebp;
    mov [esp+expfunname], eax;
    mov eax, [ebx+funaddr];
    add eax, ebp;
    mov [esp+expfunaddr], eax;
loopfindname:
    mov eax, [esp+expfunname];
    mov eax, [eax];
    add eax, ebp;
    cmp dword ptr [eax], 'PteG';
    jne notf;
    cmp dword ptr [eax+4], 'Acor';
    jne notf;
    cmp dword ptr [eax+8], 'erdd';
    jne notf;
    cmp word ptr [eax+12], 'ss';
    jne notf;
    mov eax, [esp+expfunaddr];
    mov eax, [eax];
    add eax, ebp;
    jmp end;
notf:
    add dword ptr [esp+expfunname], 4;
    add dword ptr [esp+expfunaddr], 4;
    loop loopfindname;


end:
    mov [esp+gpa], eax;
    mov eax, loadlibrarytable;
    push eax;
    mov ebx, [esp+kernelbase+4];
    push ebx;
    mov eax, [esp+gpa+4+4];
    call eax;
    mov [esp+loadlib], eax;
    push user32table;
    mov ebx, [esp+loadlib+4];
    call ebx;
    mov [esp+user32h], eax;
    mov ecx, [esp+gpa];
    mov ebx, msgboxtable;
    push ebx;
    push eax;
    call ecx;
    mov [esp+msgboxf], eax;
    push 0;
    push msgboxtable;
    push msgboxtable;
    push 0;
    call eax;
    add esp, kernelbase+gpa+expb+expnum+expfunname+expfunaddr+user32h+msgboxf;
    pop ebp;
    ret;
  }

}