通用ShellCode學習筆記 2003/XP/Win7/Vista/Win8 通用

1、ShellCode的編寫shell

  1. Kernel32地址的獲取函數

因爲win7的_PEB_LDR_DATA表和之前的系統有了改變,直接查詢0x08方式在win7下失效,爲了保證shellcode的通用性(主要是增長對win7的支持),採用遍歷查詢的方式定位kernel32的位置spa

esi=fs:0->TEBcode

esi=TEB:30h->PEBorm

esi=PEB:0ch->_PEB_LDR_DATA內存

esi=_PEB_LDR_DATA:1ch->內存中的dll的地址字符串

[esi]-> 內存中的下一個dll的地址(00h指向下一個Ldr_Module)it

[esi+08h]->esi指向的地方的下一個dll的地址io

edi->esi指向的地址的尾部function

示意圖:


 

 

 

咱們須要找的kernel32.dll長度爲12,用od跟蹤發現kernel32.dll的函數名在內存中爲「kernel32.dll」,便是說,咱們查找到某個函數第24(12×2)的位置爲空(字符串結尾),便是咱們要找的kernel32.dll

複製代碼

     push ebp
           xor ecx,ecx
           mov esi,fs:0x30
           mov esi, [esi + 0x0C];
           mov esi, [esi + 0x1C];
next_module:

           mov ebp, [esi + 0x08];
           mov edi, [esi + 0x20];
           mov esi, [esi];
           cmp [edi + 12*2],cl  

           jne next_module
           mov edi,ebp;BaseAddr of Kernel32.dll

複製代碼

  1. GetProcAddress地址的獲取

有了kernel32的地址之後,咱們就能夠方便的經過遍歷的方式查詢到GetProcAddress的地址

複製代碼

sub esp,100
          mov ebp,esp;
          mov eax,[edi+3ch];pe header
          mov edx,[edi+eax+78h]

          add edx,edi
          mov ecx,[edx+18h];number of functions
          mov ebx,[edx+20h]

          add ebx,edi;AddressOfName
search:

          dec ecx
          mov esi,[ebx+ecx*4]
          add esi,edi;
          mov eax,0x50746547;PteG("GetP")
          cmp [esi],eax

          jne search
          mov eax,0x41636f72;Acor("rocA")
          cmp [esi+4],eax

          jne search
          mov ebx,[edx+24h]
          add ebx,edi;indexaddress
          mov cx,[ebx+ecx*2]

          mov ebx,[edx+1ch]
          add ebx,edi
          mov eax,[ebx+ecx*4]
          add eax,edi
          mov [ebp+76],eax;將GetProcAddress地址存在ebp+76中

複製代碼

  1. LoadLibraryA地址的獲取

經過調用API函數GetProcAddress獲取LoadLibraryA的地址

 

複製代碼

   push 0;
          push DWORD PTR0x41797261;Ayra("aryA")
          push DWORD PTR0x7262694c;rbiL("Libr")
          push DWORD PTR0x64616f4c;daoL("Load")
          push esp

          push edi
          call [ebp+76]
          mov[ebp+80],eax;將LoadLibraryA地址存在ebp+80中

複製代碼

相關文章
相關標籤/搜索