探索黑客技术攻防,实战研究与安全创新

导航菜单

VB编写DrWeb扫描器更新程序

一、起因

近日在网上淘到了一款名为DrWeb的扫描器,该程序只有扫描功能并已经制作成了自解压格式,这样我们就可以把它安装到U盘里随时使用了。可是在使用了一段时间后我发现很不方便,首先是它每次使用完都会有个广告,而且程序启动后还会自动扫描,这让人很是不爽。

QQ截图20170118164506.png

二、分析

我把压缩包解压后看到了两个可执行文件,文件名是随机的,其中一个是扫描程序,另一个就是启动扫描程序并且弹出广告的程序(后文简称为广告程序),如果我们直接运行扫描程序的话会弹出错误提示。

我运行Process Viewer查看了一下启动信息,才发现原来它是带参数运行的,这样我们就可以去掉这个广告程序了。在VB中可以这样写Shell "DrWeb.exe" &"/log:cn-cureit.dwl/ini:setup xp.ini",vbNormalFocus(DrWeb.exe为扫描器的文件名)。大家注意一下,参数中出现了两个文件名,前一个是语言包(简体中文),后一个是程序的配置文件。我们找到并打开setupxp.ini,把里面的“Yes”更改成“No”,再运行扫描器的时候就不会自动扫描了。别忘了把修改后的setup_xp.ini文件保存到UpData文件夹下,在VB中使用FileCopy命令把修改后的文件复制并覆盖解压后的文件就可以了。

还有一个问题就是如何解压文件,单用VB当然不行,还得使用WINRAR。使用WINRAR随便解压一个文件(右键解压),中途点暂停,然后使用Process Vicwer查看Winrar的启动信息,得到命令行“WinRAR.exe x-iext-ow-ver-要解压的文件  解压路径”,在该命令里添加上“-y”参数,让它在解压时遇到同名文件直接覆盖,解压的问题就搞定了,下面我们就可以编写程序了。

三、编写

首先我们要连接网络并判断是否有可用的更新,然后下载DrWeb程序再解压缩,最后则是把不必要的文件删除掉并复制文件等。首先用到的是INET控件,用来连接网络,在指定网络后可以使用Inetl.GetHeader("Content-Length")返回请求页面的大小,单位是字节。然后就是进度条和一个显示状态的label控件,Label控件的名称改成了“lblProgressInfo”,另外还有两个Command控件。

程序具体代码如下,首先是一些变量、常量和API的声明:



我们可以通过返回的文件大小和上次更新的大小进行对比来判断文件是否有可用的更新。


如果程序已经完成了下载任务,那么如何对文件进行处理呢?先是解压,然后删除更新文件,再寻找那两个可执行程序,将其中的扫描程序重命名,广告程序则删除。实现的代码如下:


最关键的下载部分放在最后.:



这段代码需要写到Inetl_StateChanged事件里,这样就能保证每次收到数据都能执行一次了。同时写进这个事件里的还有判断更新的那一段代码,为了合理安排它们的关系,我使用了一个变量来记录当前的任务,以便止程序区分要开始下载还是只返回文件大小。我在FormLoad事件中写了如下的代码:

可能有读者会认为这是多余的,直接使用App.Path就可以了,还要专门设一个变量干什么?其实这并不多余。如果程序放在某个文件夹中,使用App.Path返回的数据是“X:\\xxxx\xxx”的形式,如果程序是在磁盘根目录下,返回的就是“X:\”,如果象一般的程序那样直接使用“APP.PAth & "\" & App.EXEName & ".EXE"”必然就会出错。

代码编写好后,我们在更新程序所在的文件夹里新建一个名为UpData的文件夹,把WinRAR和两个INI配置文件复制进去就ok了。

本文的技术含量并不高,都是一些简单语句的组合,主要是想让大家了解程序的逻辑性(同学们要好好学数学啊,要不然是编写不出好程序的)和分析问题的一种思路,有兴趣的读者可以参照慢慢研究。