黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客编程 >> 文章正文
[推荐]在Win2000/XP上安静地替换正在使用的系统文件
        ★★★★★
在Win2000/XP上安静地替换正在使用的系统文件
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-12-12
总是索而不敷总有些过意不去.另外在安焦上灌了两年水竟然安焦文档还找不到一个我的名字. 灌不出篇精华帖子还回复不到别人灌的精华贴. 也算得上是个奇迹了.

  要安静地替换正在使用的系统文件要解决两个问题:
  1. 替换正在使用的文件.
  2. 在替换系统文件时不显示插CD的对话框.

  微软有两个工具可以替换正在使用的文件,zap和inuse. 不过都没有源代码, 只好逆向分析了. inuse比较大40K, zap很小7K. 就分析zap了.

  用ida打开zap. 就有一个核心函数, 原来它的工作原理是把这个文件移了下位置, 因为比较简单就直接贴上代码.
-------------------cut zap.c---------
#include <Windows.h>

BOOL ZapDelFile(char *szFileToDel)
{
char cTempFileName[0x80];
char cTempPathName[0x100];
char cFileName[0x100];

if(szFileToDel[1] == ':'){
 sprintf(cTempPathName, "%c:\\", szFileToDel[0]);
}
else{
 GetModuleFileName(NULL, cFileName, 0x100);
 sprintf(cTempPathName, "%c:\\", cFileName[0]);
}

if(GetTempFileName(cTempPathName, "_@", 0, cTempFileName) == 0){
 return FALSE;
}

if(MoveFileEx(szFileToDel, cTempFileName, 1) == 0){
 return FALSE;
}

if(MoveFileEx(cTempFileName, NULL, 4) == 0){
 return FALSE;
}

return TRUE;
}

void usage(char *n) {
printf("usage: %s fileNeedToDel\n", n);
exit(0);
}

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

printf("Zap programed by bgate. :) *\n\n");

if (argc != 2)
 usage(argv[0]);

if(ZapDelFile(argv[1]) == TRUE){
 printf("OK");
}
else{
 printf("error %d", GetLastError());
}
return 0;
}

-------------------end cat-----------

  现在你已经可以用它去删除正在使用的系统文件了, 不过删除之后会弹出让你插入Windows CD对话框.
  注意: 删系统文件前做好备份, 在重启前恢复, 另外删系统文件前还需要把dllcache中相应的备份删除. 否则系统会自动恢复.

[1] [2] [3] 下一页  

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886