日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于从WEB服务器自动下载安装可执行性文件的方法

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于从WEB服务器自动下载安装可执行性文件的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在介紹方法之前,首先聲明我是個純粹地、不折不扣地、完完全全地ASP菜鳥,如不是客戶所迫,我不會有興趣去折騰這些對我來說毫無意義的東西(或許某些人對這些很感興趣,那就另當別論了)。當客戶要求我做一個從WEB服務器自動下載安裝可執行性文件的頁面的時候,我第一感覺這不就是個“木馬”嗎,我立刻居喪到了極點,玩“木馬”的都是高手,我這ASP的小菜鳥能搞定嗎?抱著試試看的心態,我首先想到的是趕緊的去黑客網站上溜達溜達,找了一大堆網頁上的攻擊代碼,“擋”下來認真地研究了一番(實踐證明,我這項“舉措”是得當滴),可研究過后雖然對木馬攻擊原理有了一個大概的了解,可依然不知道該從何處下手。在各大網站上搜索技術文檔,詢問了身邊所有的ASP高手(所謂的),各大王牌網站ASP論壇的斑竹我基本上也騷擾了一遍,最后,打開QQ,但凡是能跟編程扯上關系的,不管熟悉不熟悉也都OUT過去了信息。一天之后,毫無進展,繼續居喪。難道哥們兒這次就栽了?難道哥們兒這次陰溝翻船了?難道要遭客戶鄙視了?難道老板又要扣獎金了?難道......他奶奶滴!抱著必死的信心在CSDN上發了個貼,上午回帖的基本上跟我一樣都是小鳥,下午有個老兄(此人最終成為救命稻草,正所謂,草不在多,一根就行!)回帖說,論壇曾經有人問過這樣的問題,也有的解決了,他讓我找找,如果找不到了,他再幫我找(好心人哪啊!感動的我眼淚鼻涕差點沒滴到鍵盤上),我找了一遍,這版面里的貼子烏泱烏泱的,找的我眼直花(或許也是我對論壇不熟悉,以前上大學那會,上CSDN論壇也就是逛逛程序人生、灌水版什么的,看看程序員們討論一下美女,討論一下工資、發發牢騷什么的)。這不行,把我累死也找不到呀,我又一次厚顏無恥地以跳樓相威脅,懇求那個老兄幫我找。最終,那個如觀世音在世般老兄(觀世音!男的?女的?郁悶)貼了個地址(救命的仙丹啊!一想到這,我鼻子就發酸)。我前前后后地把帖子看了八遍。得!有門了。經過我不懈的努力,頑強的意志,整合了此前的一些相關資料,揚棄了一些糟粕,萃取了一些木馬程序,最終把這玩意兒搞出來了,一盆美味的“蘿卜開會”啊。
這會兒底下肯定有人看煩了,有人或許會大喝:孫子,這是哪跟哪呀,你丫跟這扯什么閑淡呢?倒是說不說呀,怎么招,找抽呢?得得得!您息怒!我說還不成嗎?人家奧斯卡領獎不也得扯兩句閑淡嗎,人家那叫“拔份”,小的我不也想拔這個份嗎?

從哪開始說呢?得!我說哪兒,您看哪兒吧,最后您再勞神,把他們整合到一起。畢竟小的是個菜鳥,有說的不對的地方,還得請您及時指正,咱謀求共同進步。
首先,想要在客戶端直接執行服務器端的程序,必須做一個ActiveX控件(或者有個打包好的CAB文件也行),為的是能夠用網頁object。看到以前有高手說過,可以寫一個沒有任何功能的ActiveX控件,小的認為,如果這樣的話,客戶機的IE安全設置級別高的話,這個ActiveX控件就很難運行。如果想突破安全級別的限制的話,就必須在控件上下功夫。至于能突破安全級別的控件如何編寫,小的在后面再介紹。
其實想直接運行安裝程序,也可以不要ActiveX控件,只要一個安裝文件就行(和匹配的INF文件),但是,如果這樣,就必須使客戶機的安全級別降到最低,或者把IE中安全選項:下載未簽名的ActiveX,改成啟用/提示。
假設現在我們有一個控件了(DLoad.ocx),除了你想在客戶機上運行的Setup.exe文件我們還需要一個Setup.inf文件。這個inf文件如何編寫,請看下面的例子:
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
DLoad.ocx=DLoad.ocx
mfc42.dll=mfc42.dll
msvcrt.dll=msvcrt.dll
olepro32.dll=olepro32.dll
setup.exe=setup.exe
[DLoad.ocx]
file-win32-x86=thiscab
clsid={68ADAF59-76C1-4561-A45A-867F43545237}
FileVersion=1,0,0,1
RegisterServer=yes
[msvcrt.dll]
FileVersion=6,0,8168,0
hook=mfc42installer
[mfc42.dll]
FileVersion=6,0,8168,0
hook=mfc42installer
[olepro32.dll]
FileVersion=5,0,4261,0
hook=mfc42installer
[mfc42installer]
file-win32-x86=VALUE=mfc42.cab
run= %EXTRACT_DIR% \mfc42.exe
[dotnetfx.exe]
file=thiscab
RegisterServer=yes
[Setup Hooks]
hook=setup
[setup]
run=%EXTRACT_DIR%\setup.exe
以上控件是使用Visual C++6.0編寫的
這里需要說明的是上述msvcrt.dll、mfc42.dll、olepro32.dll的FileVersion是根
據VC不同的版本而異的,例如在VC5.0sp3中就應該如下
olepro32.dll 5,0,4230,1
mfc42.dll 4,21,0,7303
msvcrt.dll 5,0,0,7303
每個VC版本都有不同的版本號,這里只介紹常見的兩種。
這里的clsid是從那得到的呢?是在你生成OCX的目錄中.odl文件中得到的,注意,
打開這個文件后,我們可以看到四個clsid,最上面那個帶有Version值的才是我們
需要的。這個clsid非常重要,它最終會注冊到注冊表里,提供版本的驗證功能。只
有當程序發現你的注冊表里沒有這個clsid的時候,它才會自動安裝。如果你安裝了
一次,再安裝一次的話,安裝包(CAB)會發現注冊表里有了這個clsid,它就不會
重復安裝了。在mfc42installer里的mfc42.cab文件是需要下載的,下載地址:
http://activex.microsoft.com/controls/vc/mfc42.cab
另外mfc42installer的下載路徑除了VC4.1和更早版本使用
http://activex.microsoft.com/controls/vc/mfc40.cab外,其他版本都使用
http://activex.microsoft.com/controls/vc/mfc42.cab。
下載完之后,把這個文件放在你的執行目錄下就行了。
在這個inf例子中,包含了DLoad.ocx和setup.exe兩個文件的信息。如果只單純
執行OCX文件,他有關setup.exe的信息剔除就行了。
我們的inf文件編寫完成,下面我們就要進行最重要的一步工作,把這些文件打
包成一個CAB文件。可以用VB和VS7.0自帶的打包工具。不過我推薦使用WinCAB。這
個工具網上到處都有下載,不過下載安裝完成之后,必須把Makecab.exe拷貝到
WinCAB的安裝目錄下才可運行,Makecab.exe文件在C:\WINNT\system32里。
CAB工具的使用方法:
(1)啟動WinCAB,然后執行“Cabinet”菜單的“New”命令或單擊快捷工具欄上的
“New cabinet”按鈕,準備制作新的CAB壓縮包。
(2)單擊快捷工具欄上的“Add file(s) to cabinet”按鈕,打開“Add file(s)
to cabinet”對話框。
(3)選擇欲添加到CAB壓縮包中的文件后單擊“打開”按鈕,將它們添加到WinCAB
的文件列表中。這里只需要添加YourCtl.ocx和YourCtl.inf兩個文件。
(4)在WinCAB快捷工具欄的“Cabinet path and name”框中輸入或利用“Browse
for path and name”按鈕指定CAB壓縮包的路徑及文件名。
(5)在“Cabinet size”欄中指定CAB壓縮包的尺寸。
(6)在“Compression method”框中選擇合適的壓縮方式。
(7)單擊“Save cabinet”按鈕,WinCAB即會按照用戶的要求進行壓縮。
(8)壓縮完成后,WinCAB會給出一個“WinCAB Report”的報告框,向廣大用戶報
告有關文件個數、壓縮前后的文件尺寸、壓縮率、壓縮時間等情況。至此,一個CAB
文件就生成了。

打包完成之后,我們要在網頁中調用它了。
<OBJECT classid=clsid:68ADAF59-76C1-4561-A45A-867F43545237
codeBase=http://127.0.0.1/web/setup.cab#version=1,0,0,0>
<PARAM NAME="Setup" VALUE="http://127.0.0.1/web/DLoad.ocx">
</OBJECT>
現在可以馬上進行測試,不過要把IE中的安全選項:下載未簽名的ActiveX,改成啟
用/提示。最好找臺沒有裝3721上網助手(類似軟件)的機器上測試。
以上控件的執行有很大局限性,如果安全級別高的話,就很難通過。所以現在介紹
如何突破IE安全級別限制的控件編寫。

要包括兩個文件

#include "comcat.h"
#include "Objsafe.h"
// 本控件的CLSID,注冊表用
const GUID CDECL CLSID_SafeItem =
{ 0x7AE7497B, 0xCAD8, 0x4E66, {

0xA5,0x8B,0xDD,0xE9,0xBC,0xAF,0x6B,0x61 } };
// 創建組件種類
HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (FAILED(hr))
return hr;

// Make sure the HKCR\Component Categories\{..catid...}
// key is registered.
CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409 ; // english

// Make sure the provided description is not too long.
// Only copy the first 127 characters if it is.
int len = wcslen(catDescription);
if (len>127)
len = 127;
wcsncpy(catinfo.szDescription, catDescription, len);
// Make sure the description is null terminated.
catinfo.szDescription[len] = ''\0'';

hr = pcr->RegisterCategories(1, &catinfo);
pcr->Release();

return hr;
}
// 注冊組件種類
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
// Register your component categories information.
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister,

(void**)&pcr);
if (SUCCEEDED(hr))
{
// Register this category as being "implemented" by the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
}
if (pcr != NULL)
pcr->Release();
return hr;
}
// 卸載組件種類
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
{
// Unregister this category as being "implemented" by the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
}

if (pcr != NULL)
pcr->Release();

return hr;
}
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
HRESULT hr;

AFX_MANAGE_STATE(_afxModuleAddrThis);

if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);

if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);

// 標記控件初始化安全.
// 創建初始化安全組件種類
hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls

safely initializable from persistent data!";
if (FAILED(hr))
return hr;
// 注冊初始化安全
hr = RegisterCLSIDInCategory(CLSID_SafeItem,

CATID_SafeForInitializing);
if (FAILED(hr))
return hr;

// 標記控件腳本安全
// 創建腳本安全組件種類
hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls

safely scriptable!";
if (FAILED(hr))
return hr;
// 注冊腳本安全組件種類
hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
return hr;

return NOERROR;
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr;

AFX_MANAGE_STATE(_afxModuleAddrThis);

if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
return ResultFromScode(SELFREG_E_TYPELIB);

if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);

// 刪除控件初始化安全入口.
hr=UnRegisterCLSIDInCategory(CLSID_SafeItem,

CATID_SafeForInitializing);
if (FAILED(hr))
return hr;
// 刪除控件腳本安全入口
hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
return hr;

//
return NOERROR;
}

我知道,一旦突破了IE的安全級別設置,也就變成了一個真正的準木馬程序了,請
各位在使用的時候,遵守相關法律,遵守職業道德。我們本著學習的態度去鉆研這
些,我不希望看到有些人為非作歹,請各位自重!
特此聲明:由該所文引發的一切后果,由閱讀者承擔,本人不承擔一切責任。

總結

以上是生活随笔為你收集整理的关于从WEB服务器自动下载安装可执行性文件的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。