#include <windows.h>
#include <stdio.h>
void main()
{
HMODULE hInstance = LoadLibrary("c:\\netbox.exe");//被截取图标资源的程序
HRSRC hRsrcBig=FindResource(hInstance,(LPCTSTR)1,RT_ICON);
//第二个参数说是资源的名字,但是我的确不知道咋个表示,看别人是直接从偏移地址1开始读取
HGLOBAL b =LoadResource(hInstance,hRsrcBig);
LPVOID lpResBig=LockResource(b); HANDLE hUpdateRes=BeginUpdateResource("c:\\magicdog.exe",0);//被替换的
UpdateResource(hUpdateRes,
RT_ICON,
(LPCTSTR)1, //这里也是,虽然我可以自己写截取图标的程序,也知道了资源名字,但是不知道怎么表示
MAKELANGID(LANG_CHINESE, SUBLANG_DEFAULT),
lpResBig,SizeofResource(hInstance,hRsrcBig));
EndUpdateResource(hUpdateRes,FALSE);
} 问题:图标能替换成功,但是所有大于20kb的程序被替换图标后,统统会变成20kb,且不能正常运行,小于的则可以。16进制方式查看被替换的exe,发现程序尾部被很多“PADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDING
PADDINGXXPADDINGPADDINGXXPADDING
PADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDIN.....”字符填充。
程序变小的原因,个人估计是破坏了pe文件解构,所以开始考虑在拷贝资源时是不是复制过头了,但是UpdateResource()最后一个参数我设置得再小,程序被执行替换操作后都会变成20KB
#include <stdio.h>
void main()
{
HMODULE hInstance = LoadLibrary("c:\\netbox.exe");//被截取图标资源的程序
HRSRC hRsrcBig=FindResource(hInstance,(LPCTSTR)1,RT_ICON);
//第二个参数说是资源的名字,但是我的确不知道咋个表示,看别人是直接从偏移地址1开始读取
HGLOBAL b =LoadResource(hInstance,hRsrcBig);
LPVOID lpResBig=LockResource(b); HANDLE hUpdateRes=BeginUpdateResource("c:\\magicdog.exe",0);//被替换的
UpdateResource(hUpdateRes,
RT_ICON,
(LPCTSTR)1, //这里也是,虽然我可以自己写截取图标的程序,也知道了资源名字,但是不知道怎么表示
MAKELANGID(LANG_CHINESE, SUBLANG_DEFAULT),
lpResBig,SizeofResource(hInstance,hRsrcBig));
EndUpdateResource(hUpdateRes,FALSE);
} 问题:图标能替换成功,但是所有大于20kb的程序被替换图标后,统统会变成20kb,且不能正常运行,小于的则可以。16进制方式查看被替换的exe,发现程序尾部被很多“PADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDING
PADDINGXXPADDINGPADDINGXXPADDING
PADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDIN.....”字符填充。
程序变小的原因,个人估计是破坏了pe文件解构,所以开始考虑在拷贝资源时是不是复制过头了,但是UpdateResource()最后一个参数我设置得再小,程序被执行替换操作后都会变成20KB
这个工作需要批量做而特意来写代码?
否则的话找个工具不更好吗.....