欢迎加入我的知识星球,目前正在更新免杀相关的东西,129/永久,每100人加29。
加好友备注星球!!!
一些资源的截图:
比如说我们想做打开这个白程序,然后注入到某个进程中。其实就是shellcode注入。
我们需要提供一个进程的名称对吧。
我们可以使用环境变量的方式来进行传参。
这里需要介绍一个API函数。
GetEnvironmentVariableA函数。
GetEnvironmentVariableA函数是用于从当前进程的环境块中检索指定环境变量的值。
函数原型如下:
DWORD GetEnvironmentVariableA(
LPCSTR lpName,
LPSTR lpBuffer,
DWORD nSize
);
lpName
(LPCSTR):指向一个以空字符结尾的字符串,指定环境变量的名称。
lpBuffer
(LPSTR):指向一个接收指定环境变量内容的缓冲区,以空字符结尾的字符串形式。如果该参数为 NULL
,函数将返回保存值和终止空字符所需的缓冲区大小。
nSize
(DWORD):由 lpBuffer
参数指向的缓冲区的大小,以字符为单位。
如果函数成功,返回值是存储在 lpBuffer
指向的缓冲区中的字符数量,不包括终止的空字符。
那么我们就可以利用这个函数来进行传参。
比如如下代码:
extern "C" __declspec(dllexport) int DtcMainExt() {
char param[256];
if (GetEnvironmentVariableA("RELAYSEC", param, sizeof(param))) {
MessageBoxA(NULL, param, "relaysec", MB_OK);
} else {
MessageBoxA(NULL, "Not Relaysec", "Not Relaysec", MB_OK);
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
如上代码其实就是判断当前是否有RELAYSEC这个环境变量,如果没有的话执行else中的内容,如果有的话,将当前进程中环境变量中的值存储到param变量中。然后传递给MessageBoxA函数即可。
那么我们传参的话就可以设置RELAYSEC环境变量了。
set RELAYSEC=relay学安全
这样的话当你去执行白程序的时候就可以正常传参了。
如下图:
如果我们不给他传参,那么就会执行到else这里。
那么这样的话我们就可以尝试去做一些比如shellcode注入的操作了。
这个具体自己发挥吧,这里我就不多说什么了。