当前位置: 首页 > news >正文

加载shellcode

​​​​​​

#include <stdio.h>#include <windows.h>DWORD GetHash(const char* fun_name){    DWORD digest = 0;    while (*fun_name)    {        digest = ((digest << 25) | (digest >> 7)); //循环右移 7 位        digest += *fun_name; //累加        fun_name++;    }    return digest;}void main(){    DWORD hash;     hash = GetHash("GetProcAddress");    printf("result of hash is 0x%.8x\n", hash);}
提取shellcode

源码

#pragma code_seg("shellcode")
#include <windows.h>
#pragma comment(linker,"/entry:main")void main()
{//the pointer of kernel32.dll base addressDWORD dwKernel32Addr = 0;_asm {push eaxmov eax, dword ptr fs:[0x30]mov eax, [eax + 0x0C]mov eax,[eax + 0x1C]mov eax, [eax]mov eax, [eax + 0x08]mov dwKernel32Addr, eaxpop eax}PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)dwKernel32Addr;PIMAGE_NT_HEADERS32 pNtHeader = (PIMAGE_NT_HEADERS32)(dwKernel32Addr + pDosHeader->e_lfanew);PIMAGE_DATA_DIRECTORY pDataDirectory = pNtHeader->OptionalHeader.DataDirectory + IMAGE_DIRECTORY_ENTRY_EXPORT;PIMAGE_EXPORT_DIRECTORY pExportFuncTable = (PIMAGE_EXPORT_DIRECTORY)(dwKernel32Addr + pDataDirectory->VirtualAddress);PDWORD pAddrOfFunc = (PDWORD)(pExportFuncTable->AddressOfFunctions + dwKernel32Addr);PDWORD pAddrOfFuncNames = (PDWORD)(pExportFuncTable->AddressOfNames + dwKernel32Addr);PWORD  pAddrOfOrdinals = (PWORD)(pExportFuncTable->AddressOfNameOrdinals + dwKernel32Addr);DWORD dwFuncGetProcAddress = 0;for (size_t i = 0; i < pExportFuncTable->NumberOfNames; i++){PCHAR lpFuncName = (PCHAR)(pAddrOfFuncNames[i] + dwKernel32Addr);DWORD digest = 0;while (*lpFuncName){digest = ((digest << 25) | (digest >> 7));digest += *lpFuncName;lpFuncName++;}if (digest == 0xbbafdf85)//0xbbafdf85是经过自定义hash算法得到GetProcAddress函数的摘要{dwFuncGetProcAddress = pAddrOfFunc[pAddrOfOrdinals[i]] + dwKernel32Addr;break;}}/*如果是弹窗弹窗,这里我们需要 : LoadLibraryExA、MessageBoxA、ExitProcess、user32.dll*//*定义函数指针GetProcAddress*/typedef    FARPROC (WINAPI *funcGetProcAddress)(HMODULE hModule,LPCSTR lpProcName);funcGetProcAddress pfuncGetProcAddress = (funcGetProcAddress)dwFuncGetProcAddress;/*LoadLibraryExA 函数指针获取*/typedef HMODULE (WINAPI *funcLoadLibraryExA)(LPCSTR lpLibFileName,HANDLE hFile,DWORD dwFlags);//如果采用字符串模式,其字符串会被放入数据段,使用的每次加载地址都不一样,char szLoadLibraryExA[] = { 'L','o','a','d','L','i','b','r','a','r','y','E','x','A','\0' };char szUser32[] = { 'u','s','e','r','3','2','.','d','l','l','\0' };char szMessageBoxA[] = { 'M','e','s','s','a','g','e','B','o','x','A','\0' };char szExitProcess[] = { 'E','x','i','t','P','r','o','c','e','s','s','\0' };funcLoadLibraryExA pfuncLoadLibraryExA = (funcLoadLibraryExA)(pfuncGetProcAddress((HMODULE)dwKernel32Addr,szLoadLibraryExA));/*ExitProcess函数指针*/typedef    VOID(WINAPI *funcExitProcess)(_In_ UINT uExitCode);funcExitProcess pfuncExitProcess = (funcExitProcess)(pfuncGetProcAddress((HMODULE)dwKernel32Addr, szExitProcess));/** 加载user32.dll 和messagebox*/typedef int    (WINAPI    *funcMessageBoxA)(_In_opt_ HWND hWnd,_In_opt_ LPCSTR lpText,_In_opt_ LPCSTR lpCaption,_In_ UINT uType);funcMessageBoxA pfuncMessageBoxA = (funcMessageBoxA)(pfuncGetProcAddress((HMODULE)(pfuncLoadLibraryExA(szUser32, NULL, NULL)), szMessageBoxA));char szContext[] = {'t','h','i','s',' ','i','s',' ','a',' ','t','e','s','t','\0' };char szTitle[] = { 't','e','s','t','\0' };pfuncMessageBoxA(NULL, szContext, szTitle, MB_OK);pfuncExitProcess(0);
}

http://www.lryc.cn/news/484695.html

相关文章:

  • K8S如何基于Istio实现全链路HTTPS
  • React Query在现代前端开发中的应用
  • 【HAProxy09】企业级反向代理HAProxy高级功能之压缩功能与后端服务器健康性监测
  • PostgreSQL中表的数据量很大且索引过大时怎么办
  • 【QML】QML多线程应用(WorkerScript)
  • 认证鉴权框架SpringSecurity-1--概念和原理篇
  • 计算器上的MC、MR、M+、M—、CE是什么意思?
  • 无人机飞手执照处处需要,森林、石油管道、电力巡检等各行业都需要
  • 计算机网络——路由选择算法
  • 【前端】技术演进发展简史
  • 深入解析贪心算法及其应用实例
  • 电子工牌独立双通道定向拾音方案(有视频演示)
  • 举例理解LSM-Tree,LSM-Tree和B+Tree的比较
  • React Native 全栈开发实战班 - 核心组件与导航
  • Leecode热题100-35.搜索插入位置
  • 密码学知识点整理二:常见的加密算法
  • Linux如何将文件或目录打成rpm包?-- rpmbuild打包详解
  • RabbitMQ-死信队列(golang)
  • 爬虫开发工具与环境搭建——环境配置
  • 15.UE5等级、经验、血条,魔法恢复和消耗制作
  • 【Homework】【5】Learning resources for DQ Robotics in MATLAB
  • vue3中 ref和reactive的区别
  • 第十四章 Spring之假如让你来写AOP——雏形篇
  • 群控系统服务端开发模式-应用开发-前端个人资料开发
  • 动态规划技巧点
  • 深度学习之pytorch常见的学习率绘制
  • Spring Boot集成SQL Server快速入门Demo
  • 低代码牵手 AI 接口:开启智能化开发新征程
  • 【已解决】git push一直提示输入用户名及密码、fatal: Could not read from remote repository的问题
  • python语言基础-4 常用模块-4.13 其他模块