首页 > 系统相关 >shellcode获取MessageBoxA的地址

shellcode获取MessageBoxA的地址

时间:2023-04-03 17:36:45浏览次数:36  
标签:ebx Flink 地址 mov eax MessageBoxA ebp shellcode ecx

_asm

     {

         push ebp

         mov eax,fs:[30h];获得PEB地址

         mov eax,[eax+0ch];获得LDR地址

         mov eax,[eax+14h];获得PEB_LDR_DATA中InMemoryOrderModuleList的


 Flink

         mov ecx,eax;因为eax中的Flink也就是等于LDR_DATA_TABLE_ENTRY中


 InMemoryOrderLinks的Flink

         sub eax,8;获得LDR_DATA_TABLE_ENTRY地址

         ;查看第一个入口点

         mov eax,[eax+1ch];成功        

         ;恢复eax中的Flink获得下一个Flink

         mov eax,ecx

         ;获得下一个Flink

         mov eax,[eax]

         ;保存Flink

         mov ecx,eax

         ;获得第二个模块的入口点

         sub eax,8

         mov eax,[eax+1ch]

         ;恢复eax的Flink

         mov EAX,ECX

         ;获得下一个Flink

         mov eax,[eax]

         ;保存Flink

         mov ecx,eax

         ;获得第三个模块的入口点,即kernel32

         sub eax,8h

         mov eax,[eax+1Ch]    

         ;恢复eax的Flink

         mov eax,ecx

         ;获得下一个Flink

         mov eax,[eax]

         ;保存Flink

         mov ecx,eax

         ;获得第四个模块的入口点

         sub eax,8

         mov eax,[eax+1ch]

         ;恢复eax的Flink

         mov eax,ecx

         ;获得下一个Flink

         mov eax,[eax]

         ;保存Flink

         mov ecx,eax

         ;获得第五个模块的基地址,即user32.dll

         sub eax,8

         mov eax,[eax+18h]

         ;保存user32的基址

         mov ebp,eax

         ;PE头部

         mov eax,[ebp+3ch]

         ;输出表偏移

         mov edx,[ebp+eax+78h]

         ;输出表地址

         add edx,ebp

         ;输出函数个数

         mov ecx,[edx+18h];正确

         ;获得AddressOfNamesRVA

         mov ebx,[edx+20h]

         ;获得AddressOfNames地址

         add ebx,ebp

         

 search:

         dec ecx

         mov esi,[ebx+ecx*4]

         ;获得函数名称

         add esi,ebp

         mov eax,0x7373654D;'sseM'

         cmp [esi],eax

         jne search;

         mov eax,0x42656761;'Bega'

         cmp [esi+4],eax

         jne search

         mov eax,0x0041786F;'_Axo'

         cmp [esi+8],eax

         jne search

         ;找到MessageBoxA,获取函数需要偏移地址

         ;函数序号数组偏移地址

         mov ebx,[edx+24h]

         add ebx,ebp

         ;计算出序号值

         mov cx,[ebx+ecx*2]

         

         ;获得函数地址数组指针

         mov ebx,[edx+1ch]

         add ebx,ebp

         ;获得函数偏移量

         mov eax,[ebx+ecx*4]

         add eax,ebp;//得到MessageBoxA的地址

         ;数据定义

 data:

         ;显示的数据在新加段中显示        

         lea ebx,data        

         PUSH 0

         PUSH 0

         PUSH 0

         PUSH 0

         call eax        

         pop ebp
}
获取LoadLibrary的地址
// tmp.cpp : 定义控制台应用程序的入口点。
 //

 #include "stdafx.h"
 #include <windows.h>
 #include <iostream>
 #include<ImageHlp.h>
 #pragma comment(lib,"imagehlp.lib")
 using namespace std;
 int main()
 {
     //;关于IMAGE_EXPORT_DIRECTORY中的地址变量在使用时都要加上IMAGE_EXPORT_DIRECTORY的基地址
     _asm
     {
         push ebp;暂存基址
         mov eax,fs:[30h];获取PEB地址
         mov eax,[eax+0ch];获取LDR地址
         mov  eax,[eax+14h];获得PEB_LDR_DATA中InMemoryOrderModuleListFlink的地址,该地址和LDR_DATA_TABLE_ENTRY中的Flink相同
         ;保存Flink
         mov ecx,eax
         ;获取LDR_DATA_TABLE_ENTRY的基址
         sub  eax,8
         ;获得该模块的基址,第一个模块应该是其自身
         mov eax,[eax+18h];成功
         ;恢复eax中的Flink
         mov eax,ecx
         ;获取下一个Flink
         mov  eax,[eax]
         ;保存该Flink
         mov ecx,eax
         ;获取第二个模块的基址一般是ntdll
         sub eax,8
         mov eax,[eax+18h]
         ;恢复eax中的Flink
         mov eax,ecx
         ;获取第三个模块的Flink,一般是kernel32.dll
         mov eax,[eax]
         ;保存当前Flink
         mov ecx,eax
         ;获取该模块的基址
         sub eax,8
         mov eax,[eax+18h];到此已经得到了我们需要的kernel32.dll的基址
         ;ebp保存dll的基址
         mov ebp,eax
         ;获取PE头部
         mov eax,[ebp+3Ch]
         ;获取导出表头部偏移量
         mov edx,[ebp+eax+78h]
         ;获取输出表地址edx
         add edx,ebp
         ;获得输出函数个数
         mov ecx,[edx+18h];正确
         ;获取输出函数名称数组地址,放在ebx当中
         mov ebx,[edx+20h]
         add ebx,ebp
 search:
         dec ecx;
         mov esi,[ebx+ecx*4]
         add esi,ebp;
         mov eax,64616f4ch;'daoL'
         cmp eax,[esi]
         jnz search
         mov eax,7262694ch;'rbiL'
         ;mov eax,49707071h
         cmp eax,[esi+4]
         jnz search
         mov eax,41797261h;'Ayra'
         cmp eax,[esi+8]
         jnz search
         ;找到了函数名也就是,有了序号
         ;再获取函数序号数组地址
         mov ebx,[edx+24h]
         add ebx,ebp
         ;得出函数序号注意:函数序号是一个字变量
         mov cx,[ebx+ecx*2]
         ;获取函数地址数组地址
         mov ebx,[edx+1ch]
         add ebx,ebp
         ;根据序号取出函数地址
         mov eax,[ebx+ecx*4]
         add eax,ebp
         push 0
         call eax;
         pop ebp

     }
     return 0;
 }

标签:ebx,Flink,地址,mov,eax,MessageBoxA,ebp,shellcode,ecx
From: https://blog.51cto.com/u_15995156/6166924

相关文章

  • LiveQing流媒体RTMP推流服务-如何获直播流地址 HLS/HTTP-FLV/WS-FLV/WebRTC/RTMP视频
    @目录1、服务说明2、如何一步一步搭建视频直播3、配置鉴权直播间3.1直播间创建3.2获取RTMP推流地址3.3播放流地址4、视频集成方式5、分享页面集成6、视频流地址集成6.1、直播流地址(页面查看获取)6.2、直播流地址(接口调用获取)6.2.1、接口服务地址说明6.2.2、获取直播列表7、RTMP......
  • Maven 指定仓库和插件地址
    <repositories><repository><id>public</id><name>aliyunnexus</name><url>https://maven.aliyun.com/repository/public/</url><releases>......
  • 逆向——从一个实际例子看EBP+4为何是函数的返回地址
    第六节1、逆向CRACKME1、OD加载CRACKME后,为啥地址停在0x00401000?--需要知道什么是PE结构。  ——————2、出现这个框,表示程序已经执行完判断。3、弹出窗口是WIN32API的知识,它是API的MessageBoxA函数实现的功能。  ——————4、如何正确的下断点?(1)在OD......
  • 获取用户所有仓库地址
    importrequestsimportjsonuser_name="USERNAME"write2file=Trueapi_url=f"https://api.github.com/users/{user_name}/repos"repositories=[]page_number=1whileTrue:#发送API请求并检查响应状态码response=requests.get(api_u......
  • 由于链接地址长度过长引起的”HTTP Error 400. The request URL is invalid”错误解决
    网站中,设计了一个批量搜索的功能,用户可以输入多个关键词进行批量查询搜索,但不出意外的话还是出意外了,有些用户可能会输入N多个关键词,我为了性能等考虑,会限制个数,比如每次批量查询仅限50个以内,但还是有意外发生,有些关键词可能会很长,即会引发”HTTPError400.TherequestURLisi......
  • Location地址栏对象
         ......
  • 更改MAC地址
    第一步左下角开始点击 设置   第二步打开网络和Internet     第三步点击高级网络设置中的更改适配器选项 第四步右键你现在连接的网络,再点击属性   第五步点击配置->高级 找到 网络地址 勾选这个 值 ,填上自己想要改的地址......
  • 局域网主机共享单个公网IP地址接入Internet(SNAT)
    SNAT策略的原理   源地址转换,SourceNetworkAddressTranslation   修改数据包的源IP地址1.准备一台局域网里的主机做客户机,配置好ip、子网掩码,网关,dns服务器地址 局域网各主机正确设置IP地址/子网掩码 局域网各主机正确设置默认网关地址/dns服务器地址 内网的虚拟机......
  • centos7获取IP地址的两种方法
    一、centos7获取IP地址的两种方法动态获取IP设置静态IP地址二、动态获取IP(不推荐使用)1、使用ipaddr命令查看查看网卡名和是否有网络,获知网卡名为ens33。2、输入vi/etc/sysconfig/network-scripts/ifcfg-ens33,修改ifcfg-ens33配置文件。BOOTPROTO=dhcpONBOOT=yes3......
  • 2023-03-21-将指针所在地址传入函数来创建链表的一种写法
    如下,通过将指针所在的地址传入函数中即**p的形式,来保证直接对地址进行运算,而不需要再返回一个链表//双链表#include<stdio.h>#include<stdbool.h>#include<malloc.h>typedefstructDNode{intdata;structDNode*prior,*next;//prior指向上一个结点,next指......