TWI739284B - 控制台程式的控制管理方法及系統 - Google Patents
控制台程式的控制管理方法及系統 Download PDFInfo
- Publication number
- TWI739284B TWI739284B TW109102023A TW109102023A TWI739284B TW I739284 B TWI739284 B TW I739284B TW 109102023 A TW109102023 A TW 109102023A TW 109102023 A TW109102023 A TW 109102023A TW I739284 B TWI739284 B TW I739284B
- Authority
- TW
- Taiwan
- Prior art keywords
- stroke
- dynamic link
- link library
- console
- specific function
- Prior art date
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
一種控制台程式的控制管理方法,包括下列步驟:注入動態連結函式庫至第一行程;執行注入至第一行程的動態連結函式庫以判斷第一行程是否屬於多個控制台程式的其中之一,當判斷第一行程屬於控制台程式的其中之一時,對第一行程包括的特定函數進行鉤子編程,第一行程包括的特定函數用於在第一行程的視窗輸出字元內容;以及當調用被進行過鉤子編程的第一行程包括的特定函數而在第一行程的視窗輸出字元內容時,記錄第一行程的視窗所輸出的字元內容。
Description
本發明是有關一種電腦程式的控制管理方法,尤其是一種控制台程式(Console Appilcation)的控制管理方法以及控制台程式的控制管理系統。
控制台程式是一種文字介面的電腦程式,由於其不需要複雜的圖形化使用者介面,可以簡化流程,對於電腦相關產品的開發、維護、管理等而言,控制台程式是很常使用且功能強大的工具。但也因為如此,控制台程式也時常被駭客或是資料竊取者用於攻擊或竊取資料。因此,如何提供一種控制台程式的控制管理方法是資訊安全領域所重視的課題。
本發明提供一種控制台程式的控制管理方法,能夠記錄在控制台程式的視窗輸出的字元內容。
本發明另提供一種控制台程式的控制管理系統,能夠記錄在控制台程式的視窗輸出的字元內容。
本發明所提供的控制台程式的控制管理方法包括下列步驟:
注入動態連結函式庫(Dynamic-link library,DLL)至第一行程(Process);
執行注入至第一行程的動態連結函式庫以判斷第一行程是否屬於多個控制台程式的其中之一,當判斷第一行程屬於控制台程式的其中之一時,對第一行程包括的特定函數進行鉤子編程(Hooking),第一行程包括的特定函數用於在第一行程的視窗輸出字元內容;以及
當調用被進行過鉤子編程的第一行程包括的特定函數而在第一行程的視窗輸出字元內容時,記錄第一行程的視窗所輸出的字元內容。
在本發明的一實施例中,上述之控制台程式的控制管理方法,更包括下列步驟:
對第一行程包括的創建行程函數進行鉤子編程;
當第一行程執行被進行過鉤子編程的創建行程函數而創建第二行程時,注入動態連結函式庫至第二行程;
執行注入至第二行程的動態連結函式庫以判斷第二行程是否屬於控制台程式的其中之一,當判斷第二行程屬於控制台程式時,對第二行程包括的特定函數進行鉤子編程,第二行程包括的特定函數用於在第二行程的視窗輸出字元內容;以及
當調用被進行過鉤子編程的第二行程包括的特定函數而在第二行程的視窗輸出字元內容時,記錄第二行程的視窗所輸出的字元內容。
在本發明的一實施例的控制管理方法中,上述之特定函數包括應用程式介面(Application Programming Interface,API)函數。
在本發明的一實施例的控制管理方法中,上述之控制台程式包括命令列介面(Command-Line Interface,CLI) 程式。
在本發明的一實施例的控制管理方法中,上述之注入動態連結函式庫至第一行程的步驟,包括遠端執行緒注入(Remote Thread Injection),其中遠端執行緒注入包括下列步驟:
取得第一行程的控制代碼(handle);
於第一行程的記憶體地址空間申請分配記憶體地址空間;
將動態連結函式庫加載至分配記憶體地址空間;以及
建立執行緒(thread)於第一行程並透過執行緒加載動態連結函式庫。
在本發明的一實施例的控制管理方法中,上述之對第一行程包括的特定函數進行鉤子編程的步驟包括:將特定函數對應的記憶體地址中的第一個指令轉換成跳轉指令,其中跳轉指令指向動態連結函式庫被寫入的分配記憶體地址空間。
本發明所提供的控制台程式的控制管理系統包括電腦,電腦包括
處理器以及儲存單元,其中處理器執行儲存於儲存單元中的指令以執行下列步驟:
注入動態連結函式庫至第一行程;
執行注入至第一行程的動態連結函式庫以判斷第一行程是否屬於多個控制台程式的其中之一,當判斷第一行程屬於控制台程式的其中之一時,對第一行程包括的特定函數進行鉤子編程,第一行程包括的特定函數用於在第一行程的視窗輸出字元內容;以及
當調用被進行過鉤子編程的第一行程包括的特定函數而在第一行程的視窗輸出字元內容時,記錄第一行程的視窗所輸出的字元內容。
在本發明的一實施例的控制管理系統中,上述處理器更執行下列步驟:
對第一行程包括的創建行程函數進行鉤子編程;
當第一行程執行被進行過鉤子編程的創建行程函數而創建第二行程時,注入動態連結函式庫至第二行程;
執行注入至第二行程的動態連結函式庫以判斷第二行程是否屬於控制台程式的其中之一,當判斷第二行程屬於控制台程式時,對第二行程包括的特定函數進行鉤子編程,第二行程包括的特定函數用於在第二行程的視窗輸出字元內容;以及
當調用被進行過鉤子編程的第二行程包括的特定函數而在第二行程的視窗輸出字元內容時,記錄第二行程的視窗所輸出的字元內容。
在本發明的一實施例的控制管理系統中,上述之注入動態連結函式庫至第一行程的步驟,包括遠端執行緒注入,其中遠端執行緒注入包括下列步驟:
取得第一行程的控制代碼;
於第一行程的記憶體地址空間申請分配記憶體地址空間;
將動態連結函式庫加載至分配記憶體地址空間;以及
建立執行緒於第一行程並透過執行緒加載動態連結函式庫。
在本發明的一實施例的控制管理系統中,上述之對第一行程包括的特定函數進行鉤子編程的步驟包括:將特定函數對應的記憶體地址中的第一個指令轉換成跳轉指令,其中跳轉指令指向動態連結函式庫被寫入的分配記憶體地址空間。
當控制台程式調用上述特定函數在控制台程式的視窗輸出字元內容時,本發明提供的控制管理方法及控制管理系統可以記錄控制台程式的視窗所輸出的字元內容,因此能夠保留控制台程式調用上述特定函數的歷程,可藉此取得潛在的惡意內容,而實現對控制台程式的控制管理。
為讓本發明之上述和其他目的、特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式,作詳細說明如下。
圖1為本發明一實施例的控制台程式的控制管理系統的示意圖。在一實施例中,本發明提供了一種控制台程式的控制管理系統,控制管理系統包括電腦10,例如為個人電腦、平板電腦、伺服器等,但不以此為限。其中,電腦10包括處理器11以及儲存單元12,處理器11與儲存單元12電性連接,儲存單元12例如為記憶體或硬碟等。處理器11執行儲存於儲存單元12中的指令以執行控制台程式的控制管理方法。控制台程式可包括命令列介面(Command-Line Interface,CLI) 程式,例如COMMAND.COM、命令提示字元(cmd.exe)、Windows PowerShell、Bash Shell等,控制台程式也可以是CygWin、MSys等。
圖2為本發明一實施例的控制台程式的控制管理方法的流程示意圖,其包括步驟S101~S105。以下將對各個步驟做進一步說明。
步驟S101:注入動態連結函式庫至第一行程。舉例而言,步驟S101是透過遠端執行緒注入的方式將預先設計的動態連結函式庫注入至第一行程,例如調用CreateRemoteThread函數來建立執行緒於第一行程,並讓執行緒呼叫LoadLibrary函數來加載動態連結函式庫。請參考圖3,圖3為本發明一實施例的步驟S101的流程示意圖。詳細而言,步驟S101可包括下列步驟:取得第一行程的控制代碼(步驟S1011),控制代碼用於定位出第一行程的記憶體地址空間;於第一行程的記憶體地址空間申請分配記憶體地址空間(步驟S1013),分配記憶體地址空間的大小例如是動態連結函式庫所需的大小;將動態連結函式庫加載至上述的分配記憶體地址空間(步驟S1015);以及建立執行緒於第一行程並透過執行緒加載動態連結函式庫(步驟S1017)。此外,在步驟S101中,第一行程可以是一個行程或是多個行程,例如可將已存在的所有行程都視為第一行程,而在步驟S101時對已存在的所有行程注入動態連結函式庫。
請再參考圖2,當第一行程加載動態連結函式庫後,執行步驟S103:執行注入至第一行程的動態連結函式庫以判斷第一行程是否屬於多個控制台程式的其中之一,當判斷第一行程屬於控制台程式的其中之一時,對第一行程包括的特定函數進行鉤子編程,其中第一行程包括的特定函數用於在第一行程的視窗輸出字元內容。例如可調用GetConsoleWindow等函數來判斷第一行程是否屬於控制台程式。藉由只對控制台程式進行特定函數的鉤子編程,可以有效節省系統運算資源。詳細而言,特定函數可包括應用程式介面函數,例如Windows Console API函數中的WriteConsole、ReadConsole、ReadConsoleInput、WriteConsoleInput等;或是File API函數中的ReadFile、WriteFile等;或是C Runtime Library API函數中的fprintf、fgets、printf、wprintf、_getch、fputwc、_write等。進行鉤子編程的步驟包括將上述特定函數對應的記憶體地址中的第一個指令轉換成跳轉指令,其中跳轉指令指向動態連結函式庫被寫入的分配記憶體地址空間。意即,當被進行鉤子編程的特定函數被執行時,會先執行動態連結函式庫中對應特定函數的內容。
步驟S105:當調用被進行過鉤子編程的第一行程包括的特定函數而在第一行程的視窗輸出字元內容時,記錄第一行程的視窗所輸出的字元內容。舉例而言,被進行過鉤子編程的特定函數為Windows Console API函數中的WriteConsole函數,當第一行程調用了WriteConsole時,會跳轉至被注入至第一行程的動態連結函式庫中對應WriteConsole函數的內容。舉例來說,將藉由WriteConsole函數輸出至視窗的字元內容或多個字元組成的字串進行儲存後,再執行WriteConsole函數應有的功能,或是先執行WriteConsole函數應有的功能,再將輸出至視窗的字元內容或字串進行儲存。記錄字元內容的方式例如是將字元內容完整的儲存,但不限於此,也可以是根據需求對字元內容進行調整後再儲存。在其他實施例中,字元內容可以是透過網際網路發送出去,或是以文件格式等儲存於上述儲存單元12或是外接硬碟等儲存介質。
藉此,能夠保留作為控制台程式的第一行程調用上述特定函數的歷程,以取得第一行程中潛在的惡意內容,而實現對第一行程的控制管理。若將已存在的所有行程都視為第一行程,則能使保護更加完善。
圖4為本發明一實施例的控制台程式的控制管理方法部分的流程示意圖。在本發明的一實施例中,上述之控制台程式的控制管理方法,可更包括下列步驟S201~S207。以下將對各個步驟做進一步說明。
步驟S201:對第一行程包括的創建行程函數進行鉤子編程。可以是在上述步驟S101後進行步驟S201,例如是在步驟S103中,執行注入至第一行程的動態連結函式庫時對第一行程包括的創建行程函數進行鉤子編程。對創建行程函數進行鉤子編程的方式可以是和上述對特定函數進行鉤子編程的方式相同,於此不再贅述。創建行程函數例如是CreateProcess、CreateProcessAsUser、CreateProcessWithLogon等函數。
步驟S203:當第一行程執行被進行過鉤子編程的創建行程函數而創建第二行程時,注入動態連結函式庫至第二行程。例如是當第二行程完成創建時注入動態連結函式庫至第二行程。注入至第一行程與第二行程的動態連結函式庫可以是相同或不同。再者,注入動態連結函式庫至第二行程的方式可以是與步驟S101相同或不同,於此不再贅述。
步驟S205:執行注入至第二行程的動態連結函式庫以判斷第二行程是否屬於控制台程式的其中之一,當判斷第二行程屬於控制台程式時,對第二行程包括的特定函數進行鉤子編程,第二行程包括的特定函數用於在第二行程的視窗輸出字元內容。第一行程與第二行程可以是不同類型的控制台程式,意即執行所設計的動態連結函式庫可以判斷各種類型的控制台程式。步驟S205可以是與步驟S103相同,於此不再贅述。
步驟S207:當調用第二行程包括的被進行過鉤子編程的特定函數而在第二行程的視窗輸出字元內容時,記錄第二行程的視窗所輸出的字元內容。步驟S207可以是與步驟S105相同,於此不再贅述。
藉由步驟S201~S207,能夠對被注入動態連結函式庫的行程(第一行程)所創建的其他行程(第二行程)更進一步執行本發明的控制管理方法。
以此類推,當第二行程創建第三行程時,可以將第二行程對於第三行程的關係視為第一行程對於第二行程的關係,而參考上述步驟S201~S207在第二行程與第三行程間也執行步驟S201~S207。藉此,在步驟S101時注入過動態連結函式庫之後,可不須再手動進行注入,而針對任何新創建的行程注入動態連結函式庫以執行本發明的控制管理方法。
當控制台程式調用上述特定函數在控制台程式的視窗輸出字元內容時,本發明提供的控制管理方法及控制管理系統可以記錄控制台程式的視窗所輸出的字元內容,因此能夠保留控制台程式調用上述特定函數的歷程,可藉此取得潛在的惡意內容,而實現對控制台程式的控制管理。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,本發明所屬技術領域中具有通常知識者,在不脫離本發明之精神和範圍內,當可作些許之更動與潤飾,因此本發明之保護範圍當視後附之申請專利範圍所界定者為準。
10:電腦
11:處理器
12:儲存單元
S101、S103、S105、S1011、S1013、S1015、S1017、S201、S203、S205、S207:步驟
圖1為本發明一實施例的控制台程式的控制管理系統的示意圖。
圖2為本發明一實施例的控制台程式的控制管理方法的流程示意圖。
圖3為本發明一實施例的注入動態連結函式庫的流程示意圖。
圖4為本發明一實施例的控制台程式的控制管理方法部分的流程示意圖。
S101、S103、S105:步驟
Claims (10)
- 一種控制台程式的控制管理方法,應用於一電腦,該電腦包括一處理器以及一儲存單元,該處理器用於執行儲存於該儲存單元中的指令以執行該控制管理方法,該控制管理方法包括下列步驟: 注入動態連結函式庫至一第一行程; 執行注入至該第一行程的該動態連結函式庫以判斷該第一行程是否屬於多個控制台程式的其中之一,當判斷該第一行程屬於該些控制台程式的其中之一時,對該第一行程包括的特定函數進行鉤子編程,該第一行程包括的該特定函數用於在該第一行程的一視窗輸出一字元內容;以及 當調用被進行過鉤子編程的該第一行程包括的該特定函數而在該第一行程的該視窗輸出該字元內容時,記錄該第一行程的該視窗所輸出的該字元內容。
- 如請求項1所述的控制台程式的控制管理方法,更包括下列步驟: 對該第一行程包括的一創建行程函數進行鉤子編程; 當該第一行程執行被進行過鉤子編程的該創建行程函數而創建一第二行程時,注入一動態連結函式庫至該第二行程; 執行注入至該第二行程的該動態連結函式庫以判斷該第二行程是否屬於該些控制台程式的其中之一,當判斷該第二行程屬於該些控制台程式的其中之一時,對該第二行程包括的特定函數進行鉤子編程,該第二行程包括的該特定函數用於在該第二行程的一視窗輸出一字元內容;以及 當調用被進行過鉤子編程的該第二行程包括的該特定函數而在該第二行程的該視窗輸出該字元內容時,記錄該第二行程的該視窗所輸出的該字元內容至該儲存單元。
- 如請求項1所述的控制台程式的控制管理方法,其中該些特定函數包括應用程式介面函數。
- 如請求項1所述的控制台程式的控制管理方法,其中該控制台程式包括一命令列介面程式。
- 如請求項1所述的控制台程式的控制管理方法,其中注入該動態連結函式庫至該第一行程的步驟,包括遠端執行緒注入,其中該遠端執行緒注入包括下列步驟: 取得該第一行程的一控制代碼; 於該第一行程的記憶體地址空間申請一分配記憶體地址空間; 將該動態連結函式庫寫入該分配記憶體地址空間;以及 建立一執行緒於該第一行程並透過該執行緒加載該動態連結函式庫。
- 如請求項1所述的控制台程式的控制管理方法,其中對該第一行程包括的該特定函數進行鉤子編程的步驟包括:將該特定函數對應的記憶體地址中的第一個指令轉換成一跳轉指令,其中該跳轉指令指向該動態連結函式庫被寫入的一分配記憶體地址空間。
- 一種控制台程式的控制管理系統,包括: 一電腦,包括: 一處理器;以及 一儲存單元; 其中該處理器執行儲存於該儲存單元中的指令以執行下列步驟: 注入一動態連結函式庫至一第一行程; 執行注入至該第一行程的該動態連結函式庫以判斷該第一行程是否屬於多個控制台程式的其中之一,當判斷該第一行程屬於該些控制台程式的其中之一時,對該第一行程包括的特定函數進行鉤子編程,該第一行程包括的該特定函數用於在該第一行程的一視窗輸出一字元內容;以及 當調用被進行過鉤子編程的該第一行程包括的該特定函數而在該第一行程的該視窗輸出該字元內容時,記錄該第一行程的該視窗所輸出的該字元內容至該儲存單元。
- 如請求項7所述的控制台程式的控制管理系統,其中該處理器更執行下列步驟: 對該第一行程包括的一創建行程函數進行鉤子編程; 當該第一行程執行被進行過鉤子編程的該創建行程函數而創建一第二行程時,注入一動態連結函式庫至該第二行程; 執行注入至該第二行程的該動態連結函式庫以判斷該第二行程是否屬於該些控制台程式的其中之一,當判斷該第二行程屬於該些控制台程式的其中之一時,對該第二行程包括的特定函數進行鉤子編程,該第二行程包括的該特定函數用於在該第二行程的一視窗輸出一字元內容;以及 當調用被進行過鉤子編程的該第二行程包括的該特定函數而在該第二行程的該視窗輸出該字元內容時,記錄該第二行程的該視窗所輸出的該字元內容。
- 如請求項7所述的控制台程式的控制管理系統,其中注入該動態連結函式庫至該第一行程的步驟,包括遠端執行緒注入,其中該遠端執行緒注入包括下列步驟: 取得該第一行程的一控制代碼; 於該第一行程的記憶體地址空間申請一分配記憶體地址空間; 將該動態連結函式庫寫入該分配記憶體地址空間;以及 建立一執行緒於該第一行程並透過該執行緒加載該動態連結函式庫。
- 如請求項7所述的控制台程式的控制管理系統,其中對該第一行程包括的該特定函數進行鉤子編程的步驟包括:將該特定函數對應的記憶體地址中的第一個指令轉換成一跳轉指令,其中該跳轉指令指向該動態連結函式庫被寫入的一分配記憶體地址空間。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW109102023A TWI739284B (zh) | 2020-01-20 | 2020-01-20 | 控制台程式的控制管理方法及系統 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW109102023A TWI739284B (zh) | 2020-01-20 | 2020-01-20 | 控制台程式的控制管理方法及系統 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202129505A TW202129505A (zh) | 2021-08-01 |
TWI739284B true TWI739284B (zh) | 2021-09-11 |
Family
ID=78282759
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109102023A TWI739284B (zh) | 2020-01-20 | 2020-01-20 | 控制台程式的控制管理方法及系統 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI739284B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200305823A (en) * | 2002-01-04 | 2003-11-01 | Microsoft Corp | Systems and methods for managing drivers in a computing system |
CN1179269C (zh) * | 2002-08-09 | 2004-12-08 | 联想(北京)有限公司 | 一种准确获取计算机屏幕变化的方法 |
US20090204980A1 (en) * | 2008-02-11 | 2009-08-13 | Blue Coat Systems, Inc. | Method for implementing ejection-safe API interception |
CN105045605A (zh) * | 2015-08-28 | 2015-11-11 | 成都卫士通信息产业股份有限公司 | 一种将dll注入目标进程的方法和系统 |
CN107479874A (zh) * | 2017-07-11 | 2017-12-15 | 北京明朝万达科技股份有限公司 | 一种基于Windows平台的DLL注入方法及系统 |
-
2020
- 2020-01-20 TW TW109102023A patent/TWI739284B/zh active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200305823A (en) * | 2002-01-04 | 2003-11-01 | Microsoft Corp | Systems and methods for managing drivers in a computing system |
CN1179269C (zh) * | 2002-08-09 | 2004-12-08 | 联想(北京)有限公司 | 一种准确获取计算机屏幕变化的方法 |
US20090204980A1 (en) * | 2008-02-11 | 2009-08-13 | Blue Coat Systems, Inc. | Method for implementing ejection-safe API interception |
CN105045605A (zh) * | 2015-08-28 | 2015-11-11 | 成都卫士通信息产业股份有限公司 | 一种将dll注入目标进程的方法和系统 |
CN107479874A (zh) * | 2017-07-11 | 2017-12-15 | 北京明朝万达科技股份有限公司 | 一种基于Windows平台的DLL注入方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
TW202129505A (zh) | 2021-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI617914B (zh) | 用以從睡眠狀態加速回復之專用啟動路徑 | |
US8849753B2 (en) | Automating asynchronous programming in single threaded systems | |
JP2013520744A (ja) | 最小ブートイメージの生成方法及びその装置 | |
US8745598B2 (en) | Running injected code prior to execution of an application | |
CN111989656A (zh) | 可配置的恢复状态 | |
CN101446915B (zh) | 一种bios级日志的记录方法及装置 | |
US20120331489A1 (en) | Bypassing user mode redirection | |
JP2007172602A (ja) | イベント・ソースへのイベントを永続的に決定するための方法および装置 | |
CN100514305C (zh) | 实现操作系统安全控制的系统及方法 | |
TWI464583B (zh) | 取得觸發功能之指令的方法 | |
TWI739284B (zh) | 控制台程式的控制管理方法及系統 | |
US20100199067A1 (en) | Split Vector Loads and Stores with Stride Separated Words | |
US8788785B1 (en) | Systems and methods for preventing heap-spray attacks | |
CN110826099A (zh) | 适用于嵌入式实时操作系统的安全存储方法及系统 | |
CN111868698A (zh) | 空闲空间直通 | |
CN113220355A (zh) | 控制台程序的控制管理方法及系统 | |
US8972708B2 (en) | Plurality of interface files usable for access to BIOS | |
CN110515751B (zh) | 一种加载运行VxWorks实时保护进程的方法及系统 | |
US8321606B2 (en) | Systems and methods for managing memory using multi-state buffer representations | |
JP7285907B2 (ja) | サーバーリソースを用いたマルウェアの探知及び治療が可能なモノのインターネット装置及びその方法 | |
US20230359591A1 (en) | Offloading data processing into computational storage using journaling | |
KR19990080375A (ko) | 컴퓨터 시스템의 환경복구 방법 | |
JP6143038B1 (ja) | アプリケーションに依存することなくファイルにアクセスするosプログラム及び方法 | |
JP3848171B2 (ja) | 計算機シミュレーションプログラム、プロセッサのモデルの検証方法、及び計算機シミュレーション方法 | |
JP5090279B2 (ja) | プログラム変換システム |