标签:proc add isp src efi 调试 deb nbsp highlight
一、什么是shellcode
shellcode就是一段可执行代码,shellcode代码可以独立存在,无需任何格式得包装,内存中运行无需固定指定得宿主进程,shellcode优点短小精悍,灵活多变。
二、减少文件体积
默认ide生成出来的体积偏大即使里面什么也没有写体积8KB,优化第一步修改函数入口点,属性->链接器->高级->程序入口点修改成任意名称需和代码对应。

第二步关闭程序安全检查属性->c++->代码生成->安全检查进行禁用

第三步设置工程兼容Windows XP,步骤属性->c++->代码生成->运行库Release版本需要修改为多线程(/MT) Debug需要修改为,多线程调试(/MTd),关闭生成清单,步骤属性->链接器->清单文件->生成清单 选择否就可以实现清除资源段的效果,关闭调试信息属性->链接器->调试去掉rdata数据段。
三、shellcode的编写原则函数动态调用
<1>.IDE生成执行文件编译器将MessageBox转换成系统中真正执行弹窗函数地址, 执行完毕后再跳转回去。
//使用内联汇编的方式进行调用
#include <windows.h> int EntryMain() { LPVOID lp = GetProcAddress(LoadLibraryA("user32.dll"), "MessageBoxA"); const char* pszData = "Hello world"; __asm { push 0; push 0; push pszData; push 0; call lp; } return 0; }
说明:LPVOID是一个没有类型的指针,也就是说可以将任意类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候在转换回来
#include <windows.h>
int EntryMain() {
//CreateFileA("1.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
//转到CreaFifleA函数定义将代码扣出来
typedef HANDLE(WINAPI* FN_CreateFileA)( //使用typedef做一个该类型的函数指针声明
_In_ LPCSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
);
FN_CreateFileA fn_CreateFileA;
fn_CreateFileA =(FN_CreateFileA) GetProcAddress(LoadLibraryA("kernel32.dll"), "CreateFileA");
fn_CreateFileA("1.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
return 0;
}
标签:proc add isp src efi 调试 deb nbsp highlight
原文地址:https://www.cnblogs.com/websecyw/p/13199522.html