當前位置:首頁 » 密碼管理 » hook加密

hook加密

發布時間: 2023-03-26 22:30:40

⑴ 誰比較了解HOOK技術幫一下

Hook解釋
Hook是Windows中提供的一種用以替換DOS下「中斷」的系統機制,中文譯為「掛鉤」或「鉤子」。在對特定的系統事件進行hook後,一旦發生已hook事件,對該事件進行hook的程序就會受到系統的通知,這時程序就能在第一時間對該事件做出響應。
另一解釋:
鉤子(Hook),是Windows消息處理機制的一個平台,應用程序可以在上面設置子程以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達後,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理window消息或特定事件。
鉤子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。
Hook原理
每一個Hook都有一個與之相關聯的指針列表,稱之為鉤子鏈表,由系統來維護。這個列表的指針指向指定的,應用程序定義的,被Hook子程調用的回調函數,也就是該鉤子的各個處理子程。當與指定的Hook類型關聯的消息發生時,系統就把這個消息傳遞到Hook子程。一些Hook子程可以只監視消息,或者修改消息,或者停止消息的前進,避免這些消息傳遞到下一個Hook子程或者目的窗口。最近安裝的鉤子放在鏈的開始,而最早安裝的鉤子放在最後,也就是後加入的先獲得控制權。
Windows 並不要求鉤子子程的卸載順序一定得和安裝順序相反。每當有一個鉤子被卸載,Windows 便釋放其佔用的內存,並更新整個Hook鏈表。如果程序安裝了鉤子,但是在尚未卸載鉤子之前就結束了,那麼系統會自動為它做卸載鉤子的操作。
鉤子子程是一個應用程序定義的回調函數(CALLBACK Function),不能定義成某個類的成員函數,只能定義為普通的C函數。用以監視系統或某一特定類型的事件,這些事件可以是與某一特定線程關聯的,也可以是系統中所有線程的事件。
系統鉤子與線程鉤子
SetWindowsHookEx()函數的最後一個參數決定了此鉤子是系統鉤子還是線程鉤子。
線程勾子用於監視指定線程的事件消息。線程勾子一般在當前線程或者當前線程派生的線程內。
系統勾子監視系統中的所有線程的事件消息。因為系統勾子會影響系統中所有的應用程序,所以勾子函數必須放在獨立的動態鏈接庫(DLL) 中。系統自動將包含「鉤子回調函數」的DLL映射到受鉤子函數影響的所有進程的地址空間中,即將這個DLL注入了那些進程。
幾點說明:
(1)如果對於同一事件(如滑鼠消息)既安裝了線程勾子又安裝了系統勾子,那麼系統會自動先調用線程勾子,然後調用系統勾子。
(2)對同一事件消息可安裝多個勾子處理過程,這些勾子處理過程形成了勾子鏈。當前勾子處理結束後應把勾子信息傳遞給下一個勾子函數。
(3)勾子特別是系統勾子會消耗消息處理時間,降低系統性能。只有在必要的時候才安裝勾子,在使用完畢後要及時卸載。
Hook的應用模式
觀察模式
最為常用,像Windows提供的SetWindowHook就是典型地為這類應用准備的。而且這也是最普遍的用法。
這個模式的特點是,在事情發生的時候,發出一個通知信息。觀察者只可以查看過程中的信息,根據自己關心的內容處理自己的業務,但是不可以更改原來的流程。
如全局鉤子中,經常使用的滑鼠消息、鍵盤消息的監視等應用。金山詞霸屏幕取詞的功能是一個典型的應用(具體技術可以參考此類文章)。
注入模式
這個模式和觀察模式最大的不一樣的地方在於,注入的代碼是為了擴展原始代碼的功能業務。插件模式是此類模式的典型案例。
不管瘦核心的插件系統(如Eclipse)還是胖核心的插件系統(如Delphi、Visual Studio等IDE環境),其對外提供的插件介面都是為了擴展本身系統的功能的。
這種擴展的應用方式的典型特點,就是新的擴展代碼和原來的代碼會協調處理同類業務。
替換模式
如果針對應用目的不同,可以叫修復模式或破解模式。前者是為了修改系統中的BUG,後者是為了破解原有系統的限制。
很多黑客使用此種模式,將訪問加密鎖的DLL中的導出表,替換成自己的函數,這樣跳過對軟體的控制代碼。這類應用的難點是,找出函數的參數。
這類模式的特點是,原有的代碼會被新的代碼所替換。
前面三個是基本模式,還有很多和實際應用相關的模式。
集權模式
此類模式的出現,大都是為了在全部系統中,統一處理某類事情。它的特點不在於注入的方式,而在於處理的模式。
這個模式,大都應用到某類服務上,比如鍵盤服務,滑鼠服務,列印機服務等等特定服務上。通過統一接管此類服務的訪問,限制或者協調對服務的訪問。
比如鍵盤鎖功能的實現,就是暫時關閉鍵盤的所有應用。
這類模式的特點主要會和特點服務有關聯。
修復模式
替換模式的一種,這里強調的是其應用的目的是為了修復或擴展原有系統的功能。
破解模式
替換模式的一種,這里強調的是其應用的目的是為了跳過原有系統的一部分代碼。如加密檢測代碼,網路檢測代碼等等。
插件模式
注入模式的一種,在系統的內部直接依靠HOOK機制進行擴展業務功能。
共享模式
這類應用中,經常是為了獲取對方的數據。必然我希望獲取對方系統中,所有字元串的值。可以通過替換對方的內存管理器,導出所有字元串。
這個應用比較特殊。不過其特點在於,目的是達到系統之間的數據共享。
其實現,可能是觀察模式,也可能是替換模式。
VB中的Hook技術應用
一、Hook簡介
Hook這個東西有時令人又愛又怕,Hook是用來攔截系統某些訊息之用,例如說,我們想
讓系統不管在什麼地方只要按個Ctl-B便執行NotePad,或許您會使用Form的KeyPreview
,設定為True,但在其他Process中按Ctl-B呢?那就沒有用,這是就得設一個Keyboard
Hook來攔截所有Key in的鍵;再如:MouseMove的Event只在該Form或Control上有效,如果希望在Form的外面也能得知Mouse Move的訊息,那隻好使用Mouse Hook來欄截Mouse
的訊息。再如:您想記錄方才使用者的所有鍵盤動作或Mosue動作,以便錄巨集,那就
使用JournalRecordHook,如果想停止所有Mosue鍵盤的動作,而放(執行)巨集,那就
使用JournalPlayBack Hook;Hook呢,可以是整個系統為范圍(Remote Hook),即其他
Process的動作您也可以攔截,也可以是LocalHook,它的攔截范圍只有Process本身。
Remote Hook的Hook Function要在.Dll之中,Local Hook則在.Bas中。
在VB如何設定Hook呢?使用SetWindowsHookEx()
Declare Function SetWindowsHookEx Lib 'user32' Alias 'SetWindowsHookExA' _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
idHook代表是何種Hook,有以下幾種
Public Const WH_CALLWNDPROC = 4
Public Const WH_CALLWNDPROCRET = 12
Public Const WH_CBT = 5
Public Const WH_DEBUG = 9
Public Const WH_FOREGROUNDIDLE = 11
Public Const WH_GETMESSAGE = 3
Public Const WH_HARDWARE = 8
Public Const WH_JOURNALPLAYBACK = 1
Public Const WH_JOURNALRECORD = 0
Public Const WH_KEYBOARD = 2
Public Const WH_MOUSE = 7
Public Const WH_MSGFILTER = (-1)
Public Const WH_SHELL = 10
Public Const WH_SYSMSGFILTER = 6
lpfn代表Hook Function所在的Address,這是一個CallBack Fucnction,當掛上某個
Hook時,我們便得定義一個Function來當作某個訊息產生時,來處理它的Function
,這個Hook Function有一定的叄數格式
Private Function HookFunc(ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
nCode 代表是什麼請況之下所產生的Hook,隨Hook的不同而有不同組的可能值
wParam lParam 傳回值則隨Hook的種類和nCode的值之不同而不同。
因這個叄數是一個 Function的Address所以我們固定將Hook Function放在.Bas中,
並以AddressOf HookFunc傳入。至於Hook Function的名稱我們可以任意給定,不一
定叫 HookFunc
hmod 代表.DLL的hInstance,如果是Local Hook,該值可以是Null(VB中可傳0進去),
而如果是Remote Hook,則可以使用GetMoleHandle('.dll名稱')來傳入。
dwThreadId 代表執行這個Hook的ThreadId,如果不設定是那個Thread來做,則傳0(所以
一般來說,Remote Hook傳0進去),而VB的Local Hook一般可傳App.ThreadId進去
值回值如果SetWindowsHookEx()成功,它會傳回一個值,代表目前的Hook的Handle,
這個值要記錄下來。
因為A程式可以有一個System Hook(Remote Hook),如KeyBoard Hook,而B程式也來設一
個Remote的KeyBoard Hook,那麼到底KeyBoard的訊息誰所攔截?答案是,最後的那一個
所攔截,也就是說A先做keyboard Hook,而後B才做,那訊息被B攔截,那A呢?就看B的
Hook Function如何做。如果B想讓A的Hook Function也得這個訊息,那B就得呼叫
CallNextHookEx()將這訊息Pass給A,於是產生Hook的一個連線。如果B中不想Pass這訊息
給A,那就不要呼叫CallNextHookEx()。
Declare Function CallNextHookEx Lib 'user32' _
(ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
hHook值是SetWindowsHookEx()的傳回值,nCode, wParam, lParam則是Hook Procere
中的三個叄數。
最後是將這Hook去除掉,請呼叫UnHookWindowHookEx()
Declare Function UnhookWindowsHookEx Lib 'user32' (ByVal hHook As Long) As Long
hHook便是SetWindowsHookEx()的傳回值。此時,以上例來說,B程式結束Hook,則換A可
以直接攔截訊息。
KeyBoard Hook的範例
Hook Function的三個叄數
nCode wParam lParam 傳回值
HC_ACTION 表按鍵Virtual Key 與WM_KEYDOWN同 若訊息要被處理傳0
或 反之傳1
HC_NOREMOVE
Public hHook As Long
Public Sub UnHookKBD()
If hnexthookproc <;>; 0 Then
UnhookWindowsHookEx hHook
hHook = 0
End If
End Sub
Public Function EnableKBDHook()
If hHook <;>; 0 Then
Exit Function
End If
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, App.ThreadID)
End Function
Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
MyKBHFunc = 0 '表示要處理這個訊息
If wParam = vbKeySnapshot Then '偵測 有沒有按到PrintScreen鍵
MyKBHFunc = 1 '在這個Hook便吃掉這個訊息
End If
Call CallNextHookEx(hHook, iCode, wParam, lParam) '傳給下一個Hook
End Function
只要將上面代碼放在VB的模塊中,用標准VB程序就可以了,當運行該程序後,就能攔截所有鍵盤操作。

⑵ Hook逆向離線加密的autojs打包的腳本

牙叔教程 簡單易懂

雷電模擬器Android版本: 7.1.2

Android Studio版本: 4.1.2

jadx-gui版本: 1.2.0

腳本打包使用離銀蔽線加密的時候, javascript腳本本身應該先 混淆 一遍, 然後再弊搏鎮用離線打包,

或者, 直接使用自帶的 離線Dex加密 或者 離線Snapshot加密

思路是最重要的, 其他的網路, bing, stackoverflow, 安卓文檔, autojs文檔, 最後才是群里問問
--- 牙叔教程

部分內容租粗來自網路
本教程僅用於學習, 禁止用於其他用途

⑶ 數據加密是利用基於什麼演算法的程序和保密的歷史對信息進行編碼

數據加密一般分為應用層加密和驅動層加密

  • 應用層加密

應用層加密是基於操作系統之上的加密方式。它完全不需要理會windows底層無比復雜足以讓人崩潰的處理方式,它僅僅需要關心應用軟體的行為。

應用層加密必須為每個應用程序都去開發一個加解密模塊。這是因為,每種應用軟體讀寫數據的行為多多少少會有點差異。同樣的軟體升級,例如word從2003升級到2007,該子模塊必須重新開發。現在各種專業軟體層出不窮,很多軟體僅僅應用在特定的領域,為每種軟體開發加密模塊也是不現實的,開發成本,測試成本巨大。而且您願意接受在購買了加密軟體之後每年還需要支付二次開發費用嗎?從技術上說,HOOK技術是基於應用層加密的軟體的技術基礎。鑒於HOOK技術被絕大多數病毒和流氓軟體所應用。微軟明確的表示在64位機器的操作系統上不再支持現有的絕大多數HOOK。也就是說,目前基於應用層加密的防泄密軟體在64位平台上必須重新開發。所以我們認為,基於應用層加密在可擴展性,可持續性方面的劣勢決定了它不是一個好的選擇對象。

  • 驅動層加密

驅動層加密是在操作系統的內核底層驅動完成加密動作的。這樣做的好處是,無論是哪種應用程序,加密模塊都可以捕獲到它的讀寫行為,但是它為此付出的代價是必須去處理好windows底層那種非常復雜的處理方式,並且與之結合,渾然一體。

從技術上說,驅動層加密是領先應用層加密的。從企業的應用成本上來說,驅動層加密的優越性也是遠遠大於應用層的。因為您一旦選購了驅動層加密產品,無論是你企業採用什麼樣的應用軟體,驅動層加密都可以應付自如而不需要二次開發,其可擴展性、優越性是顯而易見的。

⑷ 如何用API HOOK實現對文件夾訪問的控制(加密解密),求具體步驟或項目文件,本人菜鳥

您說的這個方法我沒有使用過。

對文件夾加密,我使用的是文件夾加密超級大師。

文件夾加密超級大師具有界面漂亮友好、簡單易用、穩定無錯、功能強大和兼容性好等特點。

文件夾加密超級大師加密的文件(夾)可以防止刪除、拷貝和移動。

加密時,在需要加密的文件和文件夾上單擊滑鼠右鍵選擇加密就可以。

解密時,雙擊已加密文件夾輸入正確密碼即可,十分方便。

你可以到網路上搜索下載文件夾加密超級大師,看能不能幫助解決你的這個問題。

⑸ iOS代碼加密的幾種方式

眾所周知的是大部分iOS代碼一般不會做加密加固,因為iOS
APP一般是通過AppStore發布的,而且蘋果的系統難以攻破,所以在iOS里做代碼加固一般是一件出力不討好的事情。萬事皆有例外,不管iOS、adr還是js,加密的目的是為了代碼的安全性,雖然現在開源暢行,但是不管個人開發者還是大廠皆有保護代碼安全的需求,所以iOS代碼加固有了生存的土壤。下面簡單介紹下iOS代碼加密的幾種方式。

iOS代碼加密的幾種方式

1.字元串加密

字元串會暴露APP的很多關鍵信息,攻擊者可以根據從界面獲取的字元串,快速找到相關邏輯的處理函數,從而進行分析破解。加密字元串可以增加攻擊者閱讀代碼的難度以及根據字元串靜態搜索的難度。

一般的處理方式是對需要加密的字元串加密,並保存加密後的數據,再在使用字元串的地方插入解密演算法。簡單的加密演算法可以把NSString轉為byte或者NSData的方式,還可以把字元串放到後端來返回,盡量少的暴露頁面信息。下面舉個簡單例子,把NSString轉為16進制的字元串:

2.符號混淆

符號混淆的中心思想是將類名、方法名、變數名替換為無意義符號,提高應用安全性;防止敏感符號被class-mp工具提取,防止IDA Pro等工具反編譯後分析業務代碼。目前市面上的IOS應用基本上是沒有使用類名方法名混淆的。

  • 別名

  • 在編寫代碼的時候直接用別名可能是最簡單的一種方式,也是比較管用的一種方式。因為你的app被破解後,假如很容易就能從你的類名中尋找到蛛絲馬跡,那離hook只是一步之遙,之前微信搶紅包的插件應該就是用hook的方式執行的。

    b.C重寫

    編寫別名的方式不是很易讀,而且也不利於後續維護,這時你可能需要升級一下你的保護方式,用C來重寫你的代碼吧。這樣把函數名隱藏在結構體中,用函數指針成員的形式存儲,編譯後,只留下了地址,去掉了名字和參數表,讓他們無從下手( from 念茜)。如下例子:

    c.腳本處理

    稍微高級一點的是腳本掃描處理替換代碼,因為要用到linux命令來編寫腳本,可能會有一點門檻,不過學了之後你就可以出去吹噓你全棧工程師的名頭啦。。。

    linux腳本比較常用的幾個命令如下:

    腳本混淆替換是用上述幾個命令掃描出來需要替換的字元串,比如方法名,類名,變數名,並做替換,如果你能熟練應用上述幾個命令,恭喜你,已經了解了腳本的一點皮毛了。

    如以下腳本搜索遍歷了代碼目錄下的需要混淆的關鍵字:

    替換的方式可以直接掃描文件並對文件中的所有內容替換,也可以採用define的方式定義別名。例如:

    d.開源項目ios-class-guard

    該項目是基於class-mp的擴展,和腳本處理類似,是用class-mp掃描出編譯後的類名、方法名、屬性名等並做替換,只是不支持隱式C方法的替換,有興趣的同學可以使用下。

    3.代碼邏輯混淆

    代碼邏輯混淆有以下幾個方面的含義:

    對方法體進行混淆,保證源碼被逆向後該部分的代碼有很大的迷惑性,因為有一些垃圾代碼的存在;

    對應用程序邏輯結構進行打亂混排,保證源碼可讀性降到最低,這很容易把破解者帶到溝里去;

    它擁有和原始的代碼一樣的功能,這是最最關鍵的。

    一般使用obfuscator-llvm來做代碼邏輯混淆,或許會對該開源工具做個簡單介紹。

    4.加固SDK

    adr中一般比較常見的加固等操作,iOS也有一些第三方提供這樣的服務,但是沒有真正使用過,不知道效果如何。

    當然還有一些第三方服務的加固產品,基本上都是採用了以上一種或幾種混淆方式做的封裝,如果想要直接可以拿來使用的服務,可以採用下,常用的一些服務如下:

    幾維安全

    iOS加密可能市場很小,但是存在必有道理,在越獄/開源/極客的眼中,你的APP並沒有你想像的那麼安全,如果希望你的代碼更加安全,就應給iOS代碼加密。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:333
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:374
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:610
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:31
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:940
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:737
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:801
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:509
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:370