導航:首頁 > 五金知識 > 工具箱API

工具箱API

發布時間:2022-04-23 06:29:38

① 打開戰網提示缺少「api-ms-win-crt-runtime-l1-1-0.dll」怎麼辦

打開戰網提示缺少「api-ms-win-crt-runtime-l1-1-0.dll」可以嘗試使用騰訊電腦管家來修復缺失DLL文件。具體方法如下:

1、打開騰訊電腦管家。

5、如果還是解決不了,去腳本之家下一個文件直接復制進去即可。

② 如何為自己的App搭建後台Api介面

如果你是使用的VC (Visual Studio C++)的話,也是有與VB類似的工具箱來拖放控制項的,對於一般的應用程序,推薦基於MFC來開發。--這意味著你需要再學習一些新的東西,如果你只是處於學習C語言的階段,這沒有必要這樣。 如果你是使用的Turbo C之類的,因為那個年代很多系統還是DOS的字元界面,所以基本上沒有好的工具來作GUI界面,需要自己編輯資源文件來創建Win32的界面,需要比較熟悉win32的api。對於簡易的界面而言,這是可行的,復雜點的,還是使用VC比較好。

③ VB.NET的API調用

現在我用我所知道的為樓主介紹VB.NET的API調用,請樓主瀏覽一下,看看行不行。
Windows API就是Windows系統的API函數簡稱(Application Program Interface,即:應用程序介面函數),它是Windows操作系統提供給各種開發基於Windows平台應用軟體的開發語言的一些公用的函數,這些函數一般都比較底層,所以當各種開發語言使用自帶的函數或類庫已無法解決問題時,調用Windows API函數往往是一種非常直接、有效的解決方法。但由於在程序中調用Windows API函數一般都很復雜,所以對於程序員來說,是否能夠靈活的使用Windows API函數,往往也是其水平高低的一個重要標志。但自從微軟推出.Net框架以後,各種開發基於.Net平台下的程序語言,如Visual Basic .Net、Visual C#等卻很少使用Windows API函數,並且微軟公司也不像以前那樣,提倡在這些.Net開發語言中使用Windows API函數,其主要的原因如下:

1. .Net框架所附帶的類庫.Net FrameWork SDK是一個內容豐富、功能強大的軟體開發包,各種Windows API函數所實現的各種功能幾乎都可以在這個軟體開發包中找到與之對應的部分。

2. 微軟Visual Basic .Net、Visual C#等目的是編寫跨平台的應用程序,如果在Visual Basic .Net、Visual C#等中使用Windows API函數,這也就註定了編寫出的程序只能運行於Windows平台之下,而弱化了.NET的跨平台能力。這也就是為什麼微軟不提倡在.Net平台調用Windows API函數的原因。

雖然微軟並不提倡在Visual Basic .Net、Visual C#中調用Windows API函數,但由於目前.Net 框架推出時間較短,.Net FrameWork SDK中提供的類庫還並不足以完全替換Windows API函數的所有功能,所以在某些時候,.Net開發語言還是必須要調用Windows API函數。

一.平台調用、託管DLL、非託管DLL簡介:

託管DLL就是能夠在公共語言運行庫(Common Language Runtime,簡稱CLR)中能夠直接引用的,並且擴展名為「DLL」的文件。具體所指就是封裝各種命名空間所在的DLL文件,如System.dll等。非託管DLL就是平常所的動態鏈接庫等,其中就包括了封裝所有Windows API函數的DLL文件。各種非託管DLL中的函數在公共語言運行庫中不能直接被調用,而需要經過.Net框架提供的「平台調用」服務後才可以。

「平台調用」是.Net框架為Visual Basic .Net、Visual C#等.Net開發語言提供的一種服務,用以在託管代碼中引入各種非託管DLL中封裝的函數(其中包括Windows API函數)。「平台調用」依賴於元數據在運行時查找導出函數並封裝其參數。圖01公共語言運行庫利用「平台服務」調用非託管DLL中的函數的流程圖:

圖01:「平台服務」的調用非託管函數的流程圖

在託管代碼中使用「平台調用」服務調用非託管DLL中封裝的函數時,「平台服務」將依次執行以下操作:

1. 查找包含該函數所在的DLL文件。

2. 如果找到,則將該DLL文件 載入到內存中。

3. 查找函數在內存中的地址並將其參數推到堆棧上,並封送所需的數據。

4. 將控制權轉移給非託管函數。 這樣整個函數調用完成。

在Visual Basic .Net中使用「平台調用」服務,申明Windows API函數主要有二種具體的實現方法:

1. 使用DllImport特徵類來申明Windows API函數。

2. 使用「Declare」語句來申明Windows API函數。

這二種方法雖有異曲同工之效,但在繁簡上卻有很大差異,第一種方法申明過程比較復雜,很容易在申明Windows API函數時出錯,所以並不提倡。而第二種方法相對簡單,並且又保存了以前Visual Basic中的很多語法,所以在平常時大都使用這種方法來申明Windows API函數。

二.VB.Net查看文件中圖標的函數及申明Windows API的方法:

Visual Basic .Net要實現查看文件中的圖標,目前只使用.Net FrameWork SDK是無法實現這種功能的,正如前面所說,主要是由於.Net FrameWork SDK推出的時間較短,其功能還不可能面面俱到。解決問題的關鍵是正確使用Windows API函數,其中所涉及到的Windows API函數主要有二個:其一是獲得指定文件中的圖標數目;其二是從指定文件的指定位置導出圖標的Windows句柄。這二個函數都位於「Shell32.dll」文件中,並且函數的入口點都為「ExtractIcon」。下面是在Visual Basic .Net中分別使用DllImport特徵類和「Declare」語句申明這二個Windows API函數的具體方法。

(1).使用DllImport特徵類來申明Windows API函數:

下面是在Visual Basic .Net中使用DllImport特徵類申明二個Windows API函數的具體示例:

'函數ExtractIcon,其功能是是從指定文件的指定位置導出圖標的Windows句柄。
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'函數Icon_Num,其功能是獲得指定文件中的圖標數目
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _
Public Function _
Icon_Num ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
End Function

在使用DllImport特徵類申明Windows API函數時,如果申明的函數名稱和函數的入口點相同,則可以在申明Windows API函數時,省略定義函數入口點對應的代碼,即EntryPoint對象欄位對應的代碼,這樣聲明ExtractIcon函數的代碼也可以簡化為如下所示:

< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function

(2).使用「Declare」語句來申明Windows API函數:

使用「Declare」語句的確比使用DllImport特徵類要簡單了許多,下面是在Visual Basic .Net中使用「Declare」語句來聲明上述二個Windows API函數的具體方法:

Declare Auto Function ExtractIcon Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
'聲明ExtractIcon函數
Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
'聲明Icon_Num函數

在Visual Basic .Net中聲明Windows API函數時,「Declare」語句中Alias關鍵字的作用相當於使用DllImport特徵類中的EntryPoint對象欄位。同樣在使用「Declare」語句聲明Windows API函數時,如果聲明的函數和函數的入口點相同,也可以省略Alias關鍵字對應的代碼,所以ExtractIcon函數也可以簡化為如下:

Declare Auto Function ExtractIcon Lib "Shell32.dll" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr

下面就結合一個示例的編寫過程來掌握的這二個Windows API函數的具體使用方法,這個示例的作用就是讀取指定文件中的圖標數目,並顯示文件中的圖標。

三.本文中程序的編寫、調試和運行環境:

(1).視窗2000高級伺服器版。

(2).Visual Studio .Net 2003企業結構設計版,.Net FrameWork SDK版本號4322。

四.Visual Basic .Net讀取文件中的圖標的實現步驟:

下面介紹的示例,其功能讀取指定文件中包含的圖標數目,並把這些圖標全部顯示出來。下面是這個示例的實現步驟:

1. 啟動Visual Studio .Net。

2. 選擇菜單【文件】|【新建】|【項目】後,彈出【新建項目】對話框。

3. 將【項目類型】設置為【Visual Basic項目】。

4. 將【模板】設置為【Windows應用程序】。

5. 在【名稱】文本框中輸入【Visual Basic .Net查看文件中的圖標】。

6. 在【位置】的文本框中輸入【E:\VS.NET項目】,然後單擊【確定】按鈕,這樣在【E:\VS.NET項目】目錄中就產生了名稱為【Visual Basic .Net查看文件中的圖標】文件夾,裡面存放著【Visual Basic .Net查看文件中的圖標】項目的所有文件。具體如圖02所示:

圖02:【Visual Basic .Net查看文件中的圖標】項目的【新建項目】對話框

7. 選擇菜單【項目】|【添加新項】,在彈出的對話框中的【模板】設置為【模塊】,【名稱】文本框設置為【Mole1.vb】後。單擊【打開】按鈕,則在項目中增加了一個模板文件,名稱為【Mole1.vb】。

8. 把Visual Stuido .Net的當前窗口切換到Mole1.vb的代碼編輯窗口,並在其Mole1的代碼區中添加下列代碼,下列代碼是用二種方式聲明二個Windows API函數:

< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'聲明ExtractIcon函數
Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As Integer ) As Integer

9. 把Visual Studio .Net的當前窗口切換到Form1窗體的設計查看,並從【工具箱】中的【Windows窗體】選項卡中拖入下列組件到Form1窗體:

四個Label組件,其中二個用以顯示提示信息,另外二個分別用以顯示選擇的文件名稱和這個文件中包含的圖標數目。

一個ListView組件,利用其顯示大圖標的屬性用以顯示選定文件中的圖標。

一個OpenFileDialog組件,用以選擇要查看圖標的文件名稱。

一個ImageList組件,它起的是橋梁的作用,首先把從文件中導出的圖標存放到這里,然後再提供ListView組件顯示出來。

一個Button組件。

10. 按照表01中數值來設定設定組件的主要屬性:

組件類型 組件名稱 屬性 設置結果
Form Form1 Text VB.NET查看文件中的圖標
Form1 MaximizeBox False
Form1 MinimizeBox False
Form1 FormBorderStyle FixedSingle
ListView ListView1 ImageList1 LargeImageList
ListView1 MultiSelect False
ListView1 Size Size ( 380 , 208 )
Button Button1 Text 選擇文件
Button1 FlatStyle Flat
ImageList ImageList1 Size Size ( 32 , 32 )
ImageList1 TransparentColor Color.Transparent
Label Label1 Text 文件名稱:
Label2 Text 圖標數目:
Label3 Text ""
Label4 Text "0"
表01:【Visual Basic .Net查看文件中的圖標】項目窗體中各組件的主要屬性設定數值表

並按照圖02中各組件的位置、大小和排列方式來調整窗體中各個組件:

圖02:【Visual Basic .Net查看文件中的圖標】項目的設計界面

11. 把Visual Studio .Net當前窗口切換到Form.vb的代碼編輯窗口,並用下列代碼替換Form1.vb中的Button1組件的Click事件的處理代碼,下列代碼是在Button1組件的Click事件中處理查看文件中圖標的功能,具體如下:

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
If OpenFileDialog1.ShowDialog ( ) = DialogResult.OK Then
'清除組件中的所有項目
ListView1.Items.Clear ( )
ImageList1.Images.Clear ( )
Dim sfName As String = OpenFileDialog1.FileName
Label3.Text = sfName
Dim iIcon_Num As Integer = Icon_Num ( IntPtr.Zero , sfName , -1 )
'顯示文件中的圖標數目
Label4.Text = iIcon_Num.ToString ( )
Dim i As Integer
For i = 0 To iIcon_Num - 1 Step 1
'強制實現int到uint類型轉換
Dim j As UInt32
j = System.Convert.ToUInt32 ( i )
Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , j )
'在imageList1組件中加入當然提取的圖標
ImageList1.Images.Add ( Icon.FromHandle ( hIcon ).ToBitmap ( ) )
'在ListView組件中加入一個項目
ListView1.Items.Add ( "第" + ( i + 1 ).ToString ( ) + "個圖標" )
'把加入項目的圖象索引指向剛才加入圖標在imagList1組件中的索引,從而顯示圖標
ListView1.Items ( i ).ImageIndex = i
Next i
End If
End Sub

12. 至此,在上述步驟都正確執行後,【Visual Basic .Net查看文件中的圖標】項目的全部工作就完成了。單擊快捷鍵F5就可以運行程序,此時單擊【選擇文件】按鈕選擇文件後,程序就能夠讀取這個文件中的圖標及其數目,並顯示出來了。具體如圖03所示:

圖03:【Visual Basic .Net查看文件中的圖標】項目的運行界面

五.總結:

解決Visual Basic .Net查看文件中的圖標的關鍵並非是使用.Net框架中提供的類庫,而是使用Windows的API函數。雖然這與利用Visual Basic .Net開發跨平台程序的初衷相違背,但的確不失為一種解決問題的方法。有些時候通過Windows API函數能夠快捷、方便的解決實際問題,而這往往是只使用.Net FrameWork SDK所望塵莫及的,但隨著.Net FrameWork SDK內容的不斷豐富,各種新的組成部分和新的功能不斷加入,可以預見的是,在未來的.Net FrameWork SDK中必將擁有可以替換本文中介紹的二個Windows API函數的組成部分。

④ 甩手掌櫃工具箱裡面的抓取商品,復制寶貝,數據包處理、轉換的工具教程在哪裡API介面老是失敗是怎麼回事

第1步:選擇商品

在網店節點,打開自定義分類,然後選中需要復制的商品。建議選擇商品的條數不超過50條,最好在20條左右。太多了不容易修改,查找。
選擇20條商品如下操作:1.選中第1條商品。2.向下拖動滾動條或者使用滑鼠滾輪至第20條商品。3.按住shift鍵同時左鍵點擊第20條商品,將第1條至20的中間的全部選中

第2步:復制到另外一個店鋪
1.右擊剛才選中的商品,使用"復制到—>拍拍網店",將商品復制拍拍網店:

2.選擇商品復制過去後所屬的分類:
點擊中間的復制的"方向"按鈕,會彈出一個選擇自定義分類窗口。這個窗口是復制過去後在拍拍中的分類。
如果中間不想要復制某些商品,可點擊中間的反向"方向"按鈕,可以將選中的商品剔除掉。

3.確認復制的商品

4.復制商品,自動轉換類目、屬性

第3步:啟動店鋪醫生可用性檢測

由於各個平台之間的差異巨大,經過甩手掌櫃的一輪轉換匹配之後,可能還是會有一些商品的屬性匹配不上。這時候我們需要將這些信息手工補全,才能夠上傳到對應的網店中。
所以,啟動店鋪醫生,找出還沒有完善的商品信息,如下圖:

1.啟動店鋪醫生,使用可用性檢測檢測商品的*號屬性是否完善
店鋪醫生將沒有晚上的商品屬性列出來,

甩手掌櫃能夠自動轉換匹配多個平台之間的商品數據,下圖的復制過程,如果數據量打,可能會持續一段時間,請耐心等待:

第4步:處理商品描述中的圖片
淘寶→拍拍:您需要先將商品全部上傳到拍拍網之後,進行圖片搬家,請查看:
http://www.sszgclub.com/Help.aspx?id=1461
淘寶→淘寶:例如淘寶A店復制到淘寶B店,您需要對圖片進行授權,否則將會出現"對不起,您不能使用他人圖片空間中的圖片",此時,您需要先對網店B進行圖片的使用授權。如果授權已滿,或者因為信譽度沒有達到一鑽,沒有授權的許可權,那麼您需要對商品進行圖片搬家,將圖片復制一份到甩手掌櫃的圖片空間中來。

⑤ android的sdk和api是什麼意思

SDK就是Kit,工具箱嘛,IOS平台上就是XCode,一系列的工具組合在一起,比如你在編輯器里敲代碼的時候它會自動補全代碼,自動錯誤檢查,你點一下Run,它會調用編譯器來自動編譯,編譯完它會調用iPhone的模擬器來運行,這就是SDK,提供整套的開發工具供開發者使用。
OpenAPI就是網站提供的介面,比如你想開發一個圍脖的手機客戶端,你從哪裡讀取數據寫入數據呢?總不能從Web版里調用吧?那裡是一堆一堆的html代碼啊,所以OpenAPI就是網站提供的介面,供開發者接入用的,比如聚合數據平台。

SDK (Software Development Kit)翻譯成中文就是"軟體開發工具組"
是用來幫一個 產品 或 平台 開發應用程式的工具組,由產品的廠商提供給開發者使用的。
通常是 某一家廠商 針對某一 平台 或 系統 或 硬體 所發布出來用以開發應用程式的工具組,
在這個工具包裡面,可能包含了各式各樣的開發工具,模擬器等。
例如:給 Android平台 使用的 Android SDK 就是用來開發 Android系統上面的應用程式。
API (Application Programming Interface)
翻譯成中文就是"應用程式介面",其實這樣翻譯不好,應該說是"程式溝通介面"。
翻譯為介面,顧名思義就要溝通兩個不同的東西用的,通常由一組函式庫所組成。
在一個 同一個平台 下的 兩個不同東西(程式 or 系統),為了能取用對方的功能等等,
所以一個 X程式 寫了一組函式,讓 同一平台的其他程式 取用 X程式 的功能,
那組函式就可以說是那個 X程式 對外開放的 API。
例如:我要在 自己的網頁 上加入 google map網頁的功能,就使用 "google map API"

有時候 SDK(開發者工具包) 里也會帶有些許 API 用來調用一些系統平台程式提供的功能
例如說:視窗顯示,圖形特效等等。
以下舉一個實際例子來說明,調用系統程式功能的API 是怎麽一回事
開發Windows應用程式的SDK(開發者工具包) 里就包含 Win32 API
說明: Win32 API 是一個函式庫,可以給Windows應用程式 調用 Windows系統的功能
在PTT看到有人問了差異性,我的看法是
SDK是用來開發某一個平台的程式的工具包,API 是讓同一平台下的程式取用它的功能的函式庫。
以及下面的評論
1.API 通常大家都不會弄錯,的確就是以功能為導向的"方法"或"函式"清單,
看程式語言或平台而定( Methods, Functions... ),
而每個 API 主要都是為了達成某特定功能所設計的。
開發商可以為了不同平台,設計相同的 API 讓開發者使用,
也可能會因應不同平台,製作不同的 API 讓開發者使用。
2.當 API 數量夠多功能夠繁復並且可交互為用的時候,
( 例如為了達成某些功能,常需要同時引用某些 APIs 來完成 )
開發商就會為了開發便利,而預先撰寫好一些組合好 APIs 的 API
供開發者使用,來統一有特定需求的開發者能有一致的開發與使用體驗,
( 例如讓使用"網路連線"的開發者不需自己處理網路的基礎溝通信息,
與錯誤處理方式,使 API 在應用的時候有一定程度的便利性等 )
然後,也陸續發展出測試、除錯工具,甚至是設計不同平台開發環境所需的套件,
尤其針對不同平台,更是設計了對應的工具來協助開發、除錯;
SDK 名詞之所以出現,儼然是為了匯整上述這些資源而誕生的,
我想也可以說成是 API 的包含者(直接使用)與應用者(以便加速開發),
也因此可以說這兩個是屬於不同層級的東西...

⑥ JAVA的JDK和API有什麼關系

第一、JDK是開發包,是應用程序的開發環境;API應用程序編程介面,是一些預先定義的類,我們寫程序的時候可以直接使用這些已經被打包的類來做具體的應用。我們在搭建jdk的時候就包含了API

第二、你這個問題問的有點問題,java分為javase、javaee、javame用的jdk是同一個,開發javaEE,javame的時候還需要導入其他外來包

第三、我用的是myEclipse2013,jdk是用的1.7做個示範,window—>preference —> java —> 點擊Installed JREs—>右邊點擊Add —>雙擊Standard VM—>點擊Directory—>找到你JDK安裝目錄—>finish 選擇你導入的JDK就行了

個人的理解,希望能幫到你

⑦ [VB]如何用api函數調用打開、保存對話框

VB提供了一通用對話框控制項方便了我們在程序中選擇特定文件的需要,不過通用對話框不是內部控制項,使用時要從「部件」中向控制項工具箱添加,程序發布時需要打包時必然增加「包」的「份量」,感覺十分不便,現用API函數來完成這一任務。
先將如下API函數聲明及常量聲明粘帖到一個模塊中。

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

在窗體上放置文本框和命令按鈕各一個,並粘帖如下代碼,啟動程序按下按鈕即會打開選擇文件對話框。
Private Sub FileOpen_Click()
Dim ofn As OPENFILENAME
Dim rtn As String
ofn.lStructSize = Len(ofn)
ofn.hwndOwner = Me.hWnd
ofn.hInstance = App.hInstance
ofn.lpstrFilter = "所有文件"
ofn.lpstrFile = Space(254)
ofn.nMaxFile = 255
ofn.lpstrFileTitle = Space(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = App.Path
ofn.lpstrTitle = "打開文件"
ofn.flags = 6148
rtn = GetOpenFileName(ofn)
If rtn >= 1 Then
Filename.Text = ofn.lpstrFile
Else
Filename.Text = "Cancel Was Pressed"
End If
End SuPrivate Sub FileOpen_Click()
Dim ofn As OPENFILENAME
Dim rtn As String
ofn.lStructSize = Len(ofn)
ofn.hwndOwner = Me.hWnd
ofn.hInstance = App.hInstance
ofn.lpstrFilter = "所有文件"
ofn.lpstrFile = Space(254)
ofn.nMaxFile = 255
ofn.lpstrFileTitle = Space(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = App.Path
ofn.lpstrTitle = "打開文件"
ofn.flags = 6148
rtn = GetOpenFileName(ofn)
If rtn >= 1 Then
Filename.Text = ofn.lpstrFile
Else
Filename.Text = "Cancel Was Pressed"
End If
End Sub------------------------------------------------------

⑧ 木馬什麼意思

它是一種基於遠程式控制制的黑客工具,具有隱蔽性和非授權性的特點。
所謂隱蔽性是指木馬的設計者為了防止木馬被發現,會採用多種手段隱藏木馬,這樣服務端即使發現感染了木馬,由於不能確定其具體位置,往往只能望「馬」興嘆。
所謂非授權性是指一旦控制端與服務端連接後,控制端將享有服務端的大部分操作許可權,包括修改文件,修改注冊表,控制滑鼠,鍵盤等等,而這些權力並不是服務端賦予的,而是通過木馬程序竊取的。

從木馬的發展來看,基本上可以分為兩個階段。
最初網路還處於以UNIX平台為主的時期,木馬就產生了,當時的木馬程序的功能相對簡單,往往是將一段程序嵌入到系統文件中,用跳轉指令來執行一些木馬的功能,在這個時期木馬的設計者和使用者大都是些技術人員,必須具備相當的網路和編程知識。
而後隨著WINDOWS平台的日益普及,一些基於圖形操作的木馬程序出現了,用戶界面的改善,使使用者不用懂太多的專業知識就可以熟練的操作木馬,相對的木馬入侵事件也頻繁出現,而且由於這個時期木馬的功能已日趨完善,因此對服務端的破壞也更大了。
所以所木馬發展到今天,已經無所不用其極,一旦被木馬控制,你的電腦將毫無秘密可言。
參考資料:http://bbs.51ww.com/365000/ShowPost.aspx

--------------------------------------------------------------------------------

DLL 木馬揭秘

相信經常玩木馬的朋友們都會知道一些木馬的特性,也會有自己最喜愛的木馬,不過,很多朋友依然不知道近年興起的「DLL木馬」為何物。什麼是「DLL木馬」呢?它與一般的木馬有什麼不同?

一、從DLL技術說起

要了解DLL木馬,就必須知道這個「DLL」是什麼意思,所以,讓我們追溯到幾年前,DOS系統大行其道的日子裡。在那時候,寫程序是一件繁瑣的事情,因為每個程序的代碼都是獨立的,有時候為了實現一個功能,就要為此寫很多代碼,後來隨著編程技術發展,程序員們把很多常用的代碼集合(通用代碼)放進一個獨立的文件里,並把這個文件稱為「庫」(Library),在寫程序的時候,把這個庫文件加入編譯器,就能使用這個庫包含的所有功能而不必自己再去寫一大堆代碼,這個技術被稱為「靜態鏈接」(Static Link)。靜態鏈接技術讓勞累的程序員鬆了口氣,一切似乎都很美好。可是事實證明,美好的事物不會存在太久,因為靜態鏈接就像一個粗魯的推銷員,不管你想不想要宣傳單,他都全部塞到你的手上來。寫一個程序只想用到一個庫文件包含的某個圖形效果,就因為這個,你不得不把這個庫文件攜帶的所有的圖形效果都加入程序,留著它們當花瓶擺設,這倒沒什麼重要,可是這些花瓶卻把道路都阻塞了——靜態鏈接技術讓最終的程序成了大塊頭,因為編譯器把整個庫文件也算進去了。

時代在發展,靜態鏈接技術由於天生的弊端,不能滿足程序員的願望,人們開始尋找一種更好的方法來解決代碼重復的難題。後來,Windows系統出現了,時代的分水嶺終於出現。Windows系統使用一種新的鏈接技術,這種被稱為「動態鏈接」(Dynamic Link)的新技術同樣也是使用庫文件,微軟稱它們為「動態鏈接庫」——Dynamic Link Library,DLL的名字就是這樣來的。動態鏈接本身和靜態鏈接沒什麼區別,也是把通用代碼寫進一些獨立文件里,但是在編譯方面,微軟繞了個圈子,並沒有採取把庫文件加進程序的方法,而是把庫文件做成已經編譯好的程序文件,給它們開個交換數據的介面,程序員寫程序的時候,一旦要使用某個庫文件的一個功能函數,系統就把這個庫文件調入內存,連接上這個程序佔有的任務進程,然後執行程序要用的功能函數,並把結果返回給程序顯示出來,在我們看來,就像是程序自己帶有的功能一樣。完成需要的功能後,這個DLL停止運行,整個調用過程結束。微軟讓這些庫文件能被多個程序調用,實現了比較完美的共享,程序員無論要寫什麼程序,只要在代碼里加入對相關DLL的調用聲明就能使用它的全部功能。最重要的是,DLL絕對不會讓你多拿一個花瓶,你要什麼它就給你什麼,你不要的東西它才不會給你。這樣,寫出來的程序就不能再攜帶一大堆垃圾了——絕對不會讓你把吃剩的東西帶回家,否則罰款,這是自助餐。

DLL技術的誕生,使編寫程序變成一件簡單的事情,Windows為我們提供了幾千個函數介面,足以滿足大多數程序員的需要。而且,Windows系統自身就是由幾千個DLL文件組成,這些DLL相互扶持,組成了強大的Windows系統。如果Windows使用靜態鏈接技術,它的體積會有多大?我不敢想。

二、應用程序介面API

上面我們對DLL技術做了個大概分析,在裡面我提到了「介面」,這又是什麼呢?因為DLL不能像靜態庫文件那樣塞進程序里,所以,如何讓程序知道實現功能的代碼和文件成了問題,微軟就為DLL技術做了標准規范,讓一個DLL文件像乳酪一樣開了許多小洞,每個洞口都註明裡面存放的功能的名字,程序只要根據標准規范找到相關洞口就可以取得它要的美味了,這個洞口就是「應用程序介面」(Application Programming Interface),每個DLL帶的介面都不相同,盡最大可能的減少了代碼的重復。用Steven的一句話:API就是一個工具箱,你根據需要取出螺絲刀、扳手,用完後再把它們放回原處。在Windows里,最基本的3個DLL文件是kernel32.dll、user32.dll、gdi32.dll。它們共同構成了基本的系統框架。

三、DLL與木馬

DLL是編譯好的代碼,與一般程序沒什麼大差別,只是它不能獨立運行,需要程序調用。那麼,DLL與木馬能扯上什麼關系呢?如果你學過編程並且寫過DLL,就會發現,其實DLL的代碼和其他程序幾乎沒什麼兩樣,僅僅是介面和啟動模式不同,只要改動一下代碼入口,DLL就變成一個獨立的程序了。當然,DLL文件是沒有程序邏輯的,這里並不是說DLL=EXE,不過,依然可以把DLL看做缺少了main入口的EXE,DLL帶的各個功能函數可以看作一個程序的幾個函數模塊。DLL木馬就是把一個實現了木馬功能的代碼,加上一些特殊代碼寫成DLL文件,導出相關的API,在別人看來,這只是一個普通的DLL,但是這個DLL卻攜帶了完整的木馬功能,這就是DLL木馬的概念。也許有人會問,既然同樣的代碼就可以實現木馬功能,那麼直接做程序就可以,為什麼還要多此一舉寫成DLL呢?這是為了隱藏,因為DLL運行時是直接掛在調用它的程序的進程里的,並不會另外產生進程,所以相對於傳統EXE木馬來說,它很難被查到。

四、DLL的運行

雖然DLL不能自己運行,可是Windows在載入DLL的時候,需要一個入口函數,就如同EXE的main一樣,否則系統無法引用DLL。所以根據編寫規范,Windows必須查找並執行DLL里的一個函數DllMain作為載入DLL的依據,這個函數不作為API導出,而是內部函數。DllMain函數使DLL得以保留在內存里,有的DLL裡面沒有DllMain函數,可是依然能使用,這是因為Windows在找不到DllMain的時候,會從其它運行庫中找一個不做任何操作的預設DllMain函數啟動這個DLL使它能被載入,並不是說DLL可以放棄DllMain函數。

五、DLL木馬技術分析

到了這里,您也許會想,既然DLL木馬有那麼多好處,以後寫木馬都採用DLL方式不就好了嗎?話雖然是這么說沒錯,但是DLL木馬並不是一些人想像的那麼容易寫的。要寫一個能用的DLL木馬,你需要了解更多知識。

1.木馬的主體

千萬別把木馬模塊寫得真的像個API庫一樣,這不是開發WINAPI。DLL木馬可以導出幾個輔助函數,但是必須有一個過程負責主要執行代碼,否則這個DLL只能是一堆零碎API函數,別提工作了。
如果涉及一些通用代碼,可以在DLL里寫一些內部函數,供自己的代碼使用,而不是把所有代碼都開放成介面,這樣它自己本身都難調用了,更不可能發揮作用。
DLL木馬的標准執行入口為DllMain,所以必須在DllMain里寫好DLL木馬運行的代碼,或者指向DLL木馬的執行模塊。

2.動態嵌入技術

Windows中,每個進程都有自己的私有內存空間,別的進程是不允許對這個私人領地進行操作的,但是,實際上我們仍然可以利用種種方法進入並操作進程的私有內存,這就是動態嵌入,它是將自己的代碼嵌入正在運行的進程中的技術。動態嵌入有很多種,最常見的是鉤子、API以及遠程線程技術,現在的大多數DLL木馬都採用遠程線程技術把自己掛在一個正常系統進程中。其實動態嵌入並不少見,羅技的MouseWare驅動就掛著每一個系統進程-_-

遠程線程技術就是通過在另一個進程中創建遠程線程(RemoteThread)的方法進入那個進程的內存地址空間。在DLL木馬的范疇里,這個技術也叫做「注入」,當載體在那個被注入的進程里創建了遠程線程並命令它載入DLL時,木馬就掛上去執行了,沒有新進程產生,要想讓木馬停止惟有讓掛接這個木馬DLL的進程退出運行。但是,很多時候我們只能束手無策——它和Explorer.exe掛在一起了,你確定要關閉Windows嗎?

3.木馬的啟動

有人也許會迫不及待的說,直接把這個DLL加入系統啟動項目不就可以了。答案是NO,前面說過,DLL不能獨立運行,所以無法在啟動項目里直接啟動它。要想讓木馬跑起來,就需要一個EXE使用動態嵌入技術讓DLL搭上其他正常進程的車,讓被嵌入的進程調用這個DLL的DllMain函數,激發木馬運行,最後啟動木馬的EXE結束運行,木馬啟動完畢。

啟動DLL木馬的EXE是個重要角色,它被稱為Loader,如果沒有Loader,DLL木馬就是破爛一堆,因此,一個算得上成熟的DLL木馬會想辦法保護它的Loader不會那麼容易被毀滅。記得狼狽為奸的故事嗎?DLL木馬就是爬在狼Loader上的狽。

Loader可以是多種多樣的,Windows的rundll32.exe也被一些DLL木馬用來做了Loader,這種木馬一般不帶動態嵌入技術,它直接掛著rundll32進程運行,用rundll32的方法(rundll32.exe [DLL名],[函數] [參數])像調用API一樣去引用這個DLL的啟動函數激發木馬模塊開始執行,即使你殺了rundll32,木馬本體還是在的,一個最常見的例子就是3721中文實名,雖然它不是木馬。

注冊表的AppInit_DLLs鍵也被一些木馬用來啟動自己,如求職信病毒。利用注冊表啟動,就是讓系統執行DllMain來達到啟動木馬的目的。因為它是kernel調入的,對這個DLL的穩定性有很大要求,稍有錯誤就會導致系統崩潰,所以很少看到這種木馬。

有一些更復雜點的DLL木馬通過svchost.exe啟動,這種DLL木馬必須寫成NT-Service,入口函數是ServiceMain,一般很少見,但是這種木馬的隱蔽性也不錯,而且Loader有保障。

4.其它

到這里大家也應該對DLL木馬有個了解了,是不是很想寫一個?別急,不知道大家想過沒有,既然DLL木馬這么好,為什麼到現在能找到的DLL木馬寥寥無幾?現在讓我來潑冷水,最重要的原因只有一個:由於DLL木馬掛著系統進程運行,如果它本身寫得不好,例如沒有防止運行錯誤的代碼或者沒有嚴格規范用戶的輸入,DLL就會出錯崩潰。別緊張,一般的EXE也是這樣完蛋的,但是DLL崩潰會導致它掛著的程序跟著遭殃,別忘記它掛接的是系統進程哦,結局就是……慘不忍睹。所以寫一個能公布的DLL木馬,在排錯檢查方面做的工作要比一般的EXE木馬多,寫得多了自己都煩躁……

六、DLL木馬的發現和查殺

經常看看啟動項有沒有多出莫名其妙的項目,這是Loader的所在,只要殺了狼,狽就不能再狂了。而DLL木馬本體比較難發現,需要你有一定編程知識和分析能力,在Loader里查找DLL名稱,或者從進程里看多掛接了什麼陌生的DLL,可是對新手來說……總之就是比較難啊比較難,所以,最簡單的方法:殺毒軟體和防火牆(不是萬能葯,切忌長期服用)。
還能竊取密碼,最狠了

⑨ DLL木馬的應用程序介面API

上面我們對DLL技術做了個大概分析,在裡面我提到了「介面」,這又是什麼呢?因為DLL不能像靜態庫文件那樣塞進程序里,所以,如何讓程序知道實現功能的代碼和文件成了問題,微軟就為DLL技術做了標准規范,讓一個DLL文件像乳酪一樣開了許多小洞,每個洞口都註明裡面存放的功能的名字,程序只要根據標准規范找到相關洞口就可以取得它要的美味了,這個洞口就是「應用程序介面」(Application Programming Interface),每個DLL帶的介面都不相同,盡最大可能的減少了代碼的重復。用Steven的一句話:API就是一個工具箱,你根據需要取出螺絲刀、扳手,用完後再把它們放回原處。在Windows里,最基本的3個DLL文件是kernel32.dll、user32.dll、gdi32.dll。它們共同構成了基本的系統框架。

⑩ 急急急~~系統資源不足,無法完成API,打不開電腦是怎麼回事

故障現象:電腦在開機的時候(登錄桌面之前),提示「系統資源不夠,無法完成API」點擊「確定」後,電腦自動重起。甚至連「安全模式」/「最後一次正確配置」也無法進入。

故障原因:C盤的剩餘空間過小。lsass.exe 系統錯誤----系統資源不夠,無法完成API。

在不重裝系統的情況下,可以使用下面的方法解決此問題:
第一種方法:
這種方法最容易,就是把硬碟先從現在的機器上拆下來,把它用數據線裝到一台其他的機器上充當「從盤」。使用另一台機器的系統啟動後,進入該問題硬碟的「操作系統分區」,把裡面不用的文件都移動到其他的分區去,刪除一些多餘的文件和程序,讓C盤分區多出一些剩餘空間(至少300MB-500MB當然越多越好)

第二種方法:
如果系統安裝了DOS或者有系統光碟,那麼就使用光碟進PE系統或者開機時按F8進入「開機高級選單」再進入「返回到操作系統選擇菜單」,選擇DOS工具箱,然後再在DOS環境下或者PE系統中,刪除C盤的多餘的垃圾文件,刪除完,確定C盤有足夠的剩餘空間以後,按Ctrl+Alt+Del鍵重新啟動,順利登陸系統。
(詳細的如何進入PE系統的步驟:
先把光碟放入光碟機,開機時按F2或者F12進入Boot Menu選擇Boot From CD-Rom/Dvd-Rom,使用光碟引導系統就可以選擇進入PE系統。(也可以事先在開機時按DEL鍵進入CMOS設置,設置第一啟動為「Boot From CD-Rom/Dvd-Rom」,然後使用系統光碟直接引導系統。))

(詳細的進入DOS工具箱的步驟:
首先要下載安裝一個「矮人dos工具箱」,安裝以後,重新啟動機器,開機以後,不停地按F8鍵,直到進入「開機高級選單」,(裡面有安全模式什麼的)在裡面使用方向鍵移動游標到「返回到操作系統選擇菜單」回車,然後出現兩個選項:「Microsoft Windows XP Professional」 和 「DOS工具箱」,同樣地移動游標到「DOS工具箱」回車,然後會出現一個倒計時,游標停在「Normal Boot」上面,你不要動它,讓它自動進入「矮人DOS棟具箱」主界面。然後,依次選擇「進入矮人DOS工具盤」回車----將游標移動到「確定(0)」回車----進入「DOS工具箱菜單」----選擇「進入DOS命令行」回車,然後就進入純DOS系統。)

問題出現原因:
裝系統時未關自動更新,未關系統還原,未將不斷增大的程序、文件夾移出C盤,使用此電腦的人不斷裝東西在C盤上從而導致C盤的剩餘空間過小。

閱讀全文

與工具箱API相關的資料

熱點內容
外徑75的軸承有什麼型號 瀏覽:146
省力搬運設備哪個好 瀏覽:731
江蘇軸承油多少錢 瀏覽:757
做什麼儀器能查出脂肪瘤 瀏覽:885
閥門上的s和o代表什麼 瀏覽:86
商場消防器材放哪裡 瀏覽:872
槍管為什麼不能鑄造 瀏覽:754
建材公司設備有哪些 瀏覽:774
管道防護密閉閥門圖片 瀏覽:225
准速器材是什麼意思 瀏覽:52
泡腳儀器泡出黃褐色水是什麼原因 瀏覽:195
進口德國電動工具代理 瀏覽:321
機械圖上的尺寸代表什麼 瀏覽:624
江西電動工具鋁壓鑄件 瀏覽:378
制乙烯的實驗裝置圖常見錯誤 瀏覽:827
四軸機械手指的是什麼樣的 瀏覽:687
做閥門工資怎麼樣 瀏覽:218
脫水機包埋機染色機哪個科室設備 瀏覽:704
如何確認多串口對應設備 瀏覽:247
汽車各種排氣閥門牌子 瀏覽:47