Ich nehme an, Sie haben den RTL_USER_PROCESS_PARAMETERS Teil der PEB Ihren Prozesses zu modifizieren (siehe http://en.wikipedia.org/wiki/Process_Environment_Block zum Beispiel und http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/PEB.html). Sie können versuchen, NtQueryInformationProcess zu verwenden, um PEB zu erhalten. Dann können Sie ProcessParameters.CommandLine
ändern. Ich hoffe, dass es funktionieren wird.
AKTUALISIERT: Ich verifizierte meinen Vorschlag. Es klappt. Das folgende Testprogramm demonstrieren dies:
#include <Windows.h>
#include <Winternl.h> // for PROCESS_BASIC_INFORMATION and ProcessBasicInformation
#include <stdio.h>
#include <tchar.h>
typedef NTSTATUS (NTAPI *PFN_NT_QUERY_INFORMATION_PROCESS) (
IN HANDLE ProcessHandle,
IN PROCESSINFOCLASS ProcessInformationClass,
OUT PVOID ProcessInformation,
IN ULONG ProcessInformationLength,
OUT PULONG ReturnLength OPTIONAL);
int main()
{
HANDLE hProcess = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, GetCurrentProcessId());
PROCESS_BASIC_INFORMATION pbi;
ULONG ReturnLength;
PFN_NT_QUERY_INFORMATION_PROCESS pfnNtQueryInformationProcess =
(PFN_NT_QUERY_INFORMATION_PROCESS) GetProcAddress (
GetModuleHandle(TEXT("ntdll.dll")), "NtQueryInformationProcess");
NTSTATUS status = pfnNtQueryInformationProcess (
hProcess, ProcessBasicInformation,
(PVOID)&pbi, sizeof(pbi), &ReturnLength);
// remove full information about my command line
pbi.PebBaseAddress->ProcessParameters->CommandLine.Length = 0;
getchar(); // wait till we can verify the results
return 0;
}
Wenn wir das Programm mit einigen Parametern starten wir
statt der folgenden gesehen vor
Sie versuchen, etwas MALWARE zu machen? Schade, dass es schon plausible Antworten gibt. –
Nein, aber es ist eine Multi-Prozess-Lösung, die ich so sicher wie möglich machen möchte. Man startet ein anderes mit einem geheimen Schlüssel, der über die Befehlszeile übergeben wird. Ich versuche gerade, es zu entfernen, sobald es von der Startroutine verarbeitet wurde. –
@Alf: Was ist Malware-y über das Ändern der Befehlszeile des Prozesses? Es ist etwas, was ein Programm tun kann, da es sein eigenes Gedächtnis ist. Lesen Sie zum Beispiel http://blogs.msdn.com/b/oldnewthing/archive/2009/02/23/9440784.aspx. – Joey