rt;
有一个办法是通过进程ID,取得文件,分析文件PE格式,取得其唯一性! 但由于本程序由sytem调起来的,没有权限去读取文件(这个文件对该用户没有设置访问权),所以这个方法基本通不过!
只能通过PID,读取内存,然后取得一些相对唯一性标志,然后在各个OS上识别出相应的程序软件;
不知如何通过内存来实现!
高分!....
有一个办法是通过进程ID,取得文件,分析文件PE格式,取得其唯一性! 但由于本程序由sytem调起来的,没有权限去读取文件(这个文件对该用户没有设置访问权),所以这个方法基本通不过!
只能通过PID,读取内存,然后取得一些相对唯一性标志,然后在各个OS上识别出相应的程序软件;
不知如何通过内存来实现!
高分!....
{
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
if (!OpenProcessToken(handle,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) //打开当前进程失败
return FALSE;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid); //查看当前权限
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); //调整权限,如上设置
return TRUE;
} DWORD ProcesstoPid(char *pid) //查找指定进程的PID(Process ID)
{
HANDLE hProcessSnap=NULL;
char buffer[MAX_PATH];
HANDLE cunterprocess=NULL;
PROCESSENTRY32 pe32={0};
int i;
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //打开进程快照
if(hProcessSnap==(HANDLE)-1)
{
return 0;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe32)) //开始枚举进程
{
do
{
strcpy(buffer,pe32.szExeFile);
for(i=strlen(buffer);i>0;i--) //截取进程名
if(buffer[i]=='\\')
break;
if(!stricmp(pid,&buffer[i])) //判断是否和提供的进程名相等,是,返回进程的ID
{
cunterprocess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,pe32.th32ProcessID);
SetPrivilege(cunterprocess);
return pe32.th32ProcessID;
}
}
while(Process32Next(hProcessSnap,&pe32)); //继续枚举进程
}
else
{
return 0;
}
CloseHandle(hProcessSnap); //关闭系统进程快照的句柄
return 0;
}
读内存代码(.text)段? 不知道如何读取?to jacklzw88(不可爱咯) :
ReadProcessMemory(), 不知道从何读取?读多少才能唯一性识别!
我现在是这样做:
MODULEINFO tmodinfo;
if( GetModuleInformation(hProcess, hModule, &tmodinfo, sizeof(tmodinfo)) )
{
DWORD dwSize = 0;
long tmpchar[4096/sizeof(long)];
ReadProcessMemory(hProcess, tmodinfo.EntryPoint, tmpchar, sizeof(tmpchar), &dwSize);
.....
}读取前面4k,的内容,读取太多了,不知道有没有更好的办法? 我从tmodinfo.EntryPoint开始读取应该没有问题吧?
{
//在这里提升权限, //在这里读去, }
while(Process32Next(hProcessSnap,&pe32)); //继续枚举进程
读多少你就自己先输出看一下,多少能识别了就读多少
我用GetModuleInformation(hProcess, hModule, &tmodinfo, sizeof(tmodinfo))取得,但这个API在98中不支持的!