如何获取应用程序的数字签名

xjf_play 2011-02-17 10:32:14
公司最近在做进程检查的项目,已获取进程的用户名同时也能获取隐藏进程,但不知道如何获取进程是否被签过名,请各位高手支招!小的多谢了!
...全文
290 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjf_play 2011-02-18
  • 打赏
  • 举报
回复
多谢楼上,我试试看
xiaopoy 2011-02-18
  • 打赏
  • 举报
回复
转一段代码,看了就有用


void CMyDlg::OnAddSign() 
{
UpdateData();

CreateSign();

DWORD dwSingSize=0;
DWORD dwSingOffe=0;
TCHAR szText[MAX_PATH]={0};

GetFileSizeAndName(m_path.LockBuffer(),NULL,&dwSingOffe);
GetFileSizeAndName("C:\\SIGN",NULL,&dwSingSize);

sprintf(szText,"宿主文件偏移:0x%d...",dwSingOffe);
AddText(szText);
sprintf(szText,"签名文件大小:0x%d...",dwSingSize);
AddText(szText);

CopyFile(m_path.LockBuffer(),"C:\\TEMP",TRUE);


AttachFile("C:\\TEMP","C:\\SIGN");


void * pFile=GetMemoryFilePoint("C:\\TEMP");

if (pFile==NULL)
{
return;
}

PIMAGE_DOS_HEADER pImageDosHeader ;
PIMAGE_NT_HEADERS pImageNtHeaders ;

pImageDosHeader = (PIMAGE_DOS_HEADER)pFile ;

AddText("开始检测文件的有效性");

if (pImageDosHeader->e_magic!=IMAGE_DOS_SIGNATURE)
{
UnmapViewOfFile(pFile);
AddText("您选择的文件是无效的");
DeleteFile("C:\\TEMP");
DeleteFile("C:\\SIGN");
return ;
}

pImageNtHeaders = (PIMAGE_NT_HEADERS)((DWORD)pFile+pImageDosHeader->e_lfanew) ;

if (pImageNtHeaders->Signature!=IMAGE_NT_SIGNATURE)
{
UnmapViewOfFile(pFile);
AddText("您选择的文件是无效的");
DeleteFile("C:\\TEMP");
DeleteFile("C:\\SIGN");
return ;
}
if (pImageNtHeaders->OptionalHeader.DataDirectory[4].Size!=0 || pImageNtHeaders->OptionalHeader.DataDirectory[4].VirtualAddress!=0 )
{
if(MessageBox(_TEXT("这个文件以经有了数字签名 要继续添加吗?"),_TEXT("提示"),MB_YESNO|MB_ICONQUESTION)!=IDYES)
{
UnmapViewOfFile(pFile);
AddText("这个文件以经有了数字签名");
DeleteFile("C:\\TEMP");
DeleteFile("C:\\SIGN");
return ;
}
}

AddText("开始写入偏移位置和大小");
pImageNtHeaders->OptionalHeader.DataDirectory[4].Size=dwSingSize; //数字签名的大小
pImageNtHeaders->OptionalHeader.DataDirectory[4].VirtualAddress=dwSingOffe; //数字签名的位置

TCHAR szNewFile[MAX_PATH]={0};
lstrcpy(szNewFile,m_path.LockBuffer());
lstrcat(szNewFile,"New.exe");

AddText("创建新的文件");
CreateSingedFile(szNewFile,pFile,dwSingOffe+dwSingSize);
AddText("添加数字签名成功");
UnmapViewOfFile(pFile);

DeleteFile("C:\\TEMP");
DeleteFile("C:\\SIGN");
}


3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧