方法一:通过API编程实现:
这个问题以前在优快云上解答过,但是当时只是提了提几个要用到的函数,自己并没有去动手写实现。前几天和某人讨论这个问题,他认为只有通过PE内部的资源偏移才好改,熊猫烧香就是这么搞的,而我坚持API也可以的观点。后来我想了想觉得这个问题值得记住,并自己亲手把它写出来并试验成功。贴出代码来给大家分享:
EnableDebugPrivilge(SE_DEBUG_NAME,TRUE);
HGLOBAL hResLoad(NULL);
HANDLE hExe(NULL);
HRSRC hRes(NULL);
HANDLE hUpdateRes(NULL);
char * lpResLock;
BOOL result;
hExe = LoadLibrary(_TEXT("D:\\Src.exe"));
if (hExe == NULL)
{
AfxMessageBox("加载Src.exe失败.",0,0);
}
hRes = FindResource((HMODULE)hExe, (LPCSTR)1, RT_ICON);
if (hRes == NULL)
{
AfxMessageBox("不能定位Src.exe中的第一个图标");
}
hResLoad = LoadResource((HMODULE)hExe, hRes);
if (hResLoad == NULL)
{
AfxMessageBox("不能加载该图标资源");
}
lpResLock =(char *)LockResource(hResLoad);
if (lpResLock == NULL)
{
AfxMessageBox("不能锁定该资源.");
}
hUpdateRes = BeginUpdateResource("G:\\Target.exe", FALSE);
if (hUpdateRes == NULL)
{
AfxMessageBox("不能打开Target