在 Windows 劫持 NSIS 的下载文件
Hijacking NSIS's download file on Windows
我知道有一个文件包含 NSIS,下载文件的逻辑和 Exec 极有可能使用 NSIS 中的 ExecWait 等 NSIS 函数,
问题是:
我尝试替换 NSIS 从网上下载的文件,这样我就可以做一些测试,首先我更改了主机并使用 web.py 创建了一个 http 服务器,所以原来的 url劫持到我自己的服务器,我放了一个重定向下载文件 link,在服务器上我看到 200,但在客户端我使用一些工具发现它返回 400。(我直接打印 url浏览器,它可以很好地下载被劫持的文件)我不知道出了什么问题。
web.py 代码
def GET(self, name):
raise web.redirect('/static/test.exe')
记录 4 个文件下载
GET 302 240 Redirect url1,url2
GET 302 300 Redirec url2,url3
GET 200 1.27 M application/octet-stream url3
所以我想知道
什么可能导致 400 代码的问题,即使在我的 python webpy 服务器中它显示 200? (对不起,我对 http 不熟悉)
任何熟悉 NSIS 的人,是否有其他解决方案可以实现此劫持?我试过使用 R3 钩子,但似乎失败了,因为我不知道用 API 来钩子。
以前听说Fiddler可以帮我完成任务,但是Fiddler就是不显示流量,可能NSis下载Fiddler抓不到?使用 HttpAnalyze 我可以看到流量(登录),但我不能做我想做的事,所以有没有其他工具可以满足我的需求(也许用 xxurl 制定规则然后替换它我的url)?
NSIS 有不同的下载插件,有些是自定义 HTTP 客户端,有些使用 WinINet。
两个最流行的插件是 NSISdl 和 INetC。 NSISdl 是一个自定义的 HTTP 客户端,但它应该支持 301 和 302 重定向,INetC 使用 WinINet,如果 Internet Explorer 可以工作,它应该可以工作。
我建议您在 hosts file and run a simple HTTP file server locally without any kind of redirection, just recreate the required folder structure and use the filename requested by the installer. If that works then you might have to use WireShark 中将域名重定向到 127.0.0.1 以找出重定向失败的原因...
@Anders 给我一些好的 advices.But 因为 url 不是静态的(\xx.exe xx 是随机的),所以我不能创建与Url 文件夹结构:(
最后我发现这可能是由于过去 web.py 响应中的 Http header。
我错误地直接重定向到 webpy 服务器上的静态文件
web.redirect('/static/test.exe')
,即使在过去我可以在 browser.but 下载它,但 header 可能无法满足原始 exe 的需求。
这是我的解决方案
在主机文件中将域名重定向到 127.0.0.1 和 运行 一个简单的 HTTP 文件服务器 locally.Then 仍然使用 web.py 但将重定向更改为
web.HTTPError('301', {'Location': 'http://myfileurl'})
它奏效了:)
我知道有一个文件包含 NSIS,下载文件的逻辑和 Exec 极有可能使用 NSIS 中的 ExecWait 等 NSIS 函数,
问题是:
我尝试替换 NSIS 从网上下载的文件,这样我就可以做一些测试,首先我更改了主机并使用 web.py 创建了一个 http 服务器,所以原来的 url劫持到我自己的服务器,我放了一个重定向下载文件 link,在服务器上我看到 200,但在客户端我使用一些工具发现它返回 400。(我直接打印 url浏览器,它可以很好地下载被劫持的文件)我不知道出了什么问题。
web.py 代码
def GET(self, name):
raise web.redirect('/static/test.exe')
记录 4 个文件下载
GET 302 240 Redirect url1,url2
GET 302 300 Redirec url2,url3
GET 200 1.27 M application/octet-stream url3
所以我想知道
什么可能导致 400 代码的问题,即使在我的 python webpy 服务器中它显示 200? (对不起,我对 http 不熟悉)
任何熟悉 NSIS 的人,是否有其他解决方案可以实现此劫持?我试过使用 R3 钩子,但似乎失败了,因为我不知道用 API 来钩子。
以前听说Fiddler可以帮我完成任务,但是Fiddler就是不显示流量,可能NSis下载Fiddler抓不到?使用 HttpAnalyze 我可以看到流量(登录),但我不能做我想做的事,所以有没有其他工具可以满足我的需求(也许用 xxurl 制定规则然后替换它我的url)?
NSIS 有不同的下载插件,有些是自定义 HTTP 客户端,有些使用 WinINet。
两个最流行的插件是 NSISdl 和 INetC。 NSISdl 是一个自定义的 HTTP 客户端,但它应该支持 301 和 302 重定向,INetC 使用 WinINet,如果 Internet Explorer 可以工作,它应该可以工作。
我建议您在 hosts file and run a simple HTTP file server locally without any kind of redirection, just recreate the required folder structure and use the filename requested by the installer. If that works then you might have to use WireShark 中将域名重定向到 127.0.0.1 以找出重定向失败的原因...
@Anders 给我一些好的 advices.But 因为 url 不是静态的(\xx.exe xx 是随机的),所以我不能创建与Url 文件夹结构:(
最后我发现这可能是由于过去 web.py 响应中的 Http header。
我错误地直接重定向到 webpy 服务器上的静态文件
web.redirect('/static/test.exe')
,即使在过去我可以在 browser.but 下载它,但 header 可能无法满足原始 exe 的需求。
这是我的解决方案
在主机文件中将域名重定向到 127.0.0.1 和 运行 一个简单的 HTTP 文件服务器 locally.Then 仍然使用 web.py 但将重定向更改为
web.HTTPError('301', {'Location': 'http://myfileurl'})
它奏效了:)