linux获取模块基址,shellcode基础 动态获取DLL内的函数基址

mov ecx,eax

.endif

mov esi,pStr1

mov edi,pStr2

LOOP2:

mov al,byte ptr[esi]

mov ah,byte ptr[edi]

cmp al,ah

jne NQ

inc esi

inc edi

loop LOOP2

mov eax,1

ret

NQ: xor eax,eax

ret

_StrEqualA endp

_GetKernel32Base proc uses ecx ;根据FS:0处的TEB结构找到UnhandledExceptionFilter函数的地址,UnhandledExceptionFilter函数位于kernerl32.dll中,因此可由此查询得到kernel32.dll的基地址。

assume fs:nothing

mov eax,fs:[0]

FindUEF:;通过TEB查找kernel32.dll中的UnhandledExceptionFilter函数的地址

cmp dword ptr[eax],0ffffffffh

je FoundUEF

mov eax,[eax]

jmp FindUEF

FoundUEF:

mov eax,[eax+4];获得UnhandledExceptionFilter函数的地址

FindPeTag:;循环查找kernel32.dll的PE标志

and eax,0ffff0000h

cmp word ptr[eax],05A4Dh;'MZ'标志

jne RollUp

mov ecx,[eax+03ch]

add ecx,eax

cmp word ptr[ecx],4550h;'PE'标志

je FoundPeTag

RollUp:

sub eax,0ffffh

jmp FindPeTag

FoundPeTag:

ret

_GetKernel32Base endp

_GetCallBaseByName proc ImageBase:DWORD,pCallName:DWORD

LOCAL ExportEntryAddr:DWORD

;LOCAL hList:DWORD

LOCAL pName:DWORD

LOCAL index:DWORD

;invoke GetDlgItem,hWnd,IDC_LIST

;mov hList,eax

mov eax,ImageBase

add eax,03ch

mov eax,[eax]

add eax,ImageBase

mov ebx,[eax]

cmp ebx,00004550h

jne NotPe;'MZ'验证出错,ImageBase出错引起

mov eax,[eax+078h]

add eax,ImageBase

;mov eax,[eax]

;add eax,ImageBase

mov ExportEntryAddr,eax

mov eax,[eax+020h]

add eax,ImageBase;eax为函数名所在数组的首地址

mov ecx,ExportEntryAddr

mov ecx,[ecx+018h];funcs个数

dec ecx

mov esi,ecx

xor ecx,ecx

.while(ecx<=esi)

push eax

push ecx

mov eax,[eax+4*ecx]

add eax,ImageBase

mov index,ecx

mov pName,eax

;函数名处理

;invoke SendMessage,hList,LB_ADDSTRING,0,pName

invoke _StrEqualA,pName,pCallName

.if(eax==1)

mov eax,ExportEntryAddr

mov eax,[eax+01ch]

mov ecx,index

shl ecx,2

add eax,ecx

add eax,ImageBase

mov eax,[eax]

add eax,ImageBase

pop ecx

pop ecx

ret

.endif

pop ecx

inc ecx

pop eax

.endw

xor eax,eax

ret

NotPe:

xor eax,eax

ret

_GetCallBaseByName endp

start:

invoke _GetKernel32Base

invoke _GetCallBaseByName,eax,offset SZ_LoadLibraryA;eax=07c800000h

.if(eax!=0)

mov API_LoadLibraryA,eax

push offset user32

call API_LoadLibraryA

push offset SZ_MessageBoxA

push eax

call _GetCallBaseByName

.if(eax!=0)

mov API_MessageBoxA,eax

push 0

push offset AppName

push offset AppName

push 0

call API_MessageBoxA

;invoke MessageBox,0,offset buffer,offset AppName,MB_OK

.endif

.endif

invoke _GetCallBaseByName,07c800000h,offset SZ_ExitProcess

push 0

call eax

end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值