白程序如何传参?

文摘   2024-10-23 16:13   中国香港  

欢迎加入我的知识星球,目前正在更新免杀相关的东西,129/永久,每100人加29。

加好友备注星球!!!

一些资源的截图:

比如说我们想做打开这个白程序,然后注入到某个进程中。其实就是shellcode注入。

我们需要提供一个进程的名称对吧。

我们可以使用环境变量的方式来进行传参。

这里需要介绍一个API函数。

GetEnvironmentVariableA函数。

GetEnvironmentVariableA函数是用于从当前进程的环境块中检索指定环境变量的值。

函数原型如下:

DWORD GetEnvironmentVariableA(  LPCSTR lpName,  LPSTR  lpBuffer,  DWORD  nSize);

lpName (LPCSTR):指向一个以空字符结尾的字符串,指定环境变量的名称。

lpBuffer (LPSTR):指向一个接收指定环境变量内容的缓冲区,以空字符结尾的字符串形式。如果该参数为 NULL,函数将返回保存值和终止空字符所需的缓冲区大小。

nSize (DWORD):由 lpBuffer 参数指向的缓冲区的大小,以字符为单位。

如果函数成功,返回值是存储在 lpBuffer 指向的缓冲区中的字符数量,不包括终止的空字符。

那么我们就可以利用这个函数来进行传参。

比如如下代码:

#include <Windows.h>#include <iostream>
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注入的操作了。

这个具体自己发挥吧,这里我就不多说什么了。

Relay学安全
这是一个纯分享技术的公众号,只想做安全圈的一股清流,不会发任何广告,不会接受任何广告,只会分享纯技术文章,欢迎各行各业的小伙伴关注。让我们一起提升技术。
 最新文章