分享
 
 
 

如何得到其它进程的启动命令行参数

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

如何得到其它进程的启动命令行参数

ILSY:

这个程序可以得到其他进程的命令行参数。

// procmdline.cpp (Windows NT/2000)

//

// This example shows how to get the command line for almost any process

// on the system for Windows NT/2000

//

//

// (c)1999 Ashot Oganesyan K, SmartLine, Inc

// mailto:ashot@aha.ru, http://www.protect-me.com, http://www.codepile.com

#include <windows.h>

#include <stdio.h>

#define ProcessBasicInformation 0

typedef struct

{

USHORT Length;

USHORT MaximumLength;

PWSTR Buffer;

} UNICODE_STRING, *PUNICODE_STRING;

typedef struct

{

ULONG AllocationSize;

ULONG ActualSize;

ULONG Flags;

ULONG Unknown1;

UNICODE_STRING Unknown2;

HANDLE InputHandle;

HANDLE OutputHandle;

HANDLE ErrorHandle;

UNICODE_STRING CurrentDirectory;

HANDLE CurrentDirectoryHandle;

UNICODE_STRING SearchPaths;

UNICODE_STRING ApplicationName;

UNICODE_STRING CommandLine;

PVOID EnvironmentBlock;

ULONG Unknown[9];

UNICODE_STRING Unknown3;

UNICODE_STRING Unknown4;

UNICODE_STRING Unknown5;

UNICODE_STRING Unknown6;

} PROCESS_PARAMETERS, *PPROCESS_PARAMETERS;

typedef struct

{

ULONG AllocationSize;

ULONG Unknown1;

HINSTANCE ProcessHinstance;

PVOID ListDlls;

PPROCESS_PARAMETERS ProcessParameters;

ULONG Unknown2;

HANDLE Heap;

} PEB, *PPEB;

typedef struct

{

DWORD ExitStatus;

PPEB PebBaseAddress;

DWORD AffinityMask;

DWORD BasePriority;

ULONG UniqueProcessId;

ULONG InheritedFromUniqueProcessId;

} PROCESS_BASIC_INFORMATION;

// ntdll!NtQueryInformationProcess (NT specific!)

//

// The function copies the process information of the

// specified type into a buffer

//

// NTSYSAPI

// NTSTATUS

// NTAPI

// NtQueryInformationProcess(

// IN HANDLE ProcessHandle, // handle to process

// IN PROCESSINFOCLASS InformationClass, // information type

// OUT PVOID ProcessInformation, // pointer to buffer

// IN ULONG ProcessInformationLength, // buffer size in bytes

// OUT PULONG ReturnLength OPTIONAL // pointer to a 32-bit

// // variable that receives

// // the number of bytes

// // written to the buffer

// );

typedef LONG (WINAPI *PROCNTQSIP)(HANDLE,UINT,PVOID,ULONG,PULONG);

PROCNTQSIP NtQueryInformationProcess;

BOOL GetProcessCmdLine(DWORD dwId,LPWSTR wBuf,DWORD dwBufLen);

void main(int argc, char* argv[])

{

if (argc<2)

{

printf("Usage:\n\ncmdline.exe ProcId\n");

return;

}

NtQueryInformationProcess = (PROCNTQSIP)GetProcAddress(

GetModuleHandle("ntdll"),

"NtQueryInformationProcess"

);

if (!NtQueryInformationProcess)

return;

DWORD dwId;

sscanf(argv[1],"%lu",&dwId);

WCHAR wstr[255];

if (GetProcessCmdLine(dwId,wstr,sizeof(wstr)))

wprintf(L"Command line for process %lu is:\n%s\n",dwId,wstr);

else

wprintf(L"Could not get command line!");

}

BOOL GetProcessCmdLine(DWORD dwId,LPWSTR wBuf,DWORD dwBufLen)

{

LONG status;

HANDLE hProcess;

PROCESS_BASIC_INFORMATION pbi;

PEB Peb;

PROCESS_PARAMETERS ProcParam;

DWORD dwDummy;

DWORD dwSize;

LPVOID lpAddress;

BOOL bRet = FALSE;

// Get process handle

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,dwId);

if (!hProcess)

return FALSE;

// Retrieve information

status = NtQueryInformationProcess( hProcess,

ProcessBasicInformation,

(PVOID)&pbi,

sizeof(PROCESS_BASIC_INFORMATION),

NULL

);

if (status)

goto cleanup;

if (!ReadProcessMemory( hProcess,

pbi.PebBaseAddress,

&Peb,

sizeof(PEB),

&dwDummy

)

)

goto cleanup;

if (!ReadProcessMemory( hProcess,

Peb.ProcessParameters,

&ProcParam,

sizeof(PROCESS_PARAMETERS),

&dwDummy

)

)

goto cleanup;

lpAddress = ProcParam.CommandLine.Buffer;

dwSize = ProcParam.CommandLine.Length;

if (dwBufLen<dwSize)

goto cleanup;

if (!ReadProcessMemory( hProcess,

lpAddress,

wBuf,

dwSize,

&dwDummy

)

)

goto cleanup;

bRet = TRUE;

cleanup:

CloseHandle (hProcess);

return bRet;

}

---

tombkeeper:

PEB结构中的ProcessParameters->CommandLine是个UNICODE_STRING,就是命令行。用ReadProcessMemory()读取就可以了。

1、从 fs:0定位PEB

2、PEB偏移0x10是ProcessParameters

3、ProcessParameters偏移0x40是CommandLine

tombkeeper:

不同版本的NT,PEB结构未必相同,可能需要区别对待。

还是ILSY的办法比较堂堂正正一点。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有