首页
/
每日頭條
/
科技
/
軟件産品質量怎麼提高
軟件産品質量怎麼提高
更新时间:2024-05-18 21:45:22
背景

為了提高開發的軟件産品安全性,大部分選擇的方案防護方案是,通過用成熟的加固軟件進行對自己研發的軟件做防護,從而達到對軟件搭建一個安全防護牆。加固軟件主要做的兩件事,對軟件中關鍵代碼的保護以及提高對軟件逆向反編譯的門檻。

那麼軟件安全性防護牆的第一道門那就是反調試。反調試技術又細分為靜态反調試和動态反調試。下面就針對window端的進行梳理反調試檢測方案。

進程環境塊BeingDebugged檢測

通過讀取進程環境塊PEB中,是否設置BeingDebugged标志(其實這個标志IsDebuggerPreseNt跟這個函數内部執行效果是一樣的),這個PEB(進程環境塊)指針指向的值。

在x86環境下通過FS:[0x30]獲取PEB的值;

在X64環境下通過GS:[0x60]獲取PEB值;

當這個值等于0的情況下,表示沒被調試,否則就處于調試狀态。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)1

進程環境塊NtGlobalFlag檢測

進程環境塊PEB中NtGlobalFlag是一個DWORD值,這個值包含操作系統設置的許多标志,這些标志會影響進程的運行方式。這個字段在程序正常運行的情況下值默認為0,在被調試器調試的時候(如ollydbg動态調試),這個字段為0x70(注意:ollydbg附加狀态下是沒改變的)。

進程環境塊HeapFlags檢測

當程序在調試下運行,并使用調試器進程創建标志創建時,HeapFlags标志更正常程序運行的标志值是不一緻的。

對于X86系統,Vista以上版本的HeapFlags位于0x40偏移, 低于Vista版本的位于0x0C

對于X64系統,Vista以上版本的HeapFlags位于0x70偏移,低于Vista版本的位于0x14偏移

如果這個HeapFlags的值大于2,那麼表示處于被調試狀态,如果這個值等于2,那麼屬于正常狀态。

進程環境塊ForceFlags檢測

當程序在調試下運行,并使用調試器進程創建标志創建時,ForceFlags标志跟正常運行的程序是不一緻的。

對于X86系統,Vista以上版本的HeapFlags位于0x44偏移, 低于Vista版本的位于0x10偏移

對于X64系統,Vista以上版本的HeapFlags位于0x74偏移,低于Vista版本的位于0x18偏移

如果這個ForceFlags的值大于0,那麼表示處于被調試狀态,如果這個值等于2,那麼屬于正常狀态。

IsDebuggerPresent 檢測

通過直接利用系統 IsDebuggerPresent函數,進行判斷當前程序是否處于調試狀态。

如果程序處于調試狀态的情況下,那麼這個函數的返回返回真,否則返回假。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)2

CheckRemoteDebuggerPresent 檢測

它是微軟公開的系統函數,通過利用它可以用于檢測,軟件是否正在調試遠程進程(同一機器上的不同進程中,是否附加到當前進程)。

我們還可以将其用作另一種方法來檢測,軟件是否處于正在調試。此函數在内部調用NTDLL模塊的導出PROCESSINFOCLASS設置為NtQueryInformationProcess函數7(進程調試端口)。本質上是通過NtQueryInformationProcess函數查詢是否使用調試端口。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)3

NtQueryInformationProcess 檢測

這個是微軟未公開的函數,下面是這個函數的參數信息,可以利用這個函數的第三個參數值,也就是利用PROCESSINFOCLASS值,進行判斷是否處于調試狀态。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)4

當程序處于調試狀态時,系統會給它分配一個調試端口(Debug Port),當程序正常運行狀态時ProcessDebugPort的值為0,當程序處于調試狀态ProcessDebugPort的值為0xFFFFFFFF。

當程序處于調試狀态時,這個PROCESSINFOCLASS指向ProcessDebugObjectHandle的值是一個句柄值,當程序處于正常狀态這個ProcessDebugObjectHandle值為NULL值。

當程序處于調試狀态時,這個PROCESSINFOCLASS指向ProcessDebugFlags的值為0,當程序處于正常狀态 時,這個ProcessDebugFlags值為1。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)5

SetUnhandleExceptionFilte 檢測

通過利用SetUnhandledExceptionFilter,可以注冊一個異常處理函數,當一個異常産生,而且我們的 try - catch(或 try - expect)異常捕獲中,沒有處理處理這個異常時,異常會轉交給 SetUnhandledExceptionFilter 。如果程序存在調試器狀态,則調試器就會接管這個異常,那麼這個異常就不會走到 SetUnhandledExceptionFilter 注冊的異常處理函數。

原理:通過設置一個SetUnhandledExceptionFilter。然後利用RaiseException提出一個異常交給異常處理機制 由于沒有設置相應的異常處理程序, 當程序被調試時,會通知進程的調試器,而不會調用UnhandledExceptionFilter。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)6

SetHandleInformation 檢測

通過創建一個互斥體對象,利用# SetHandleInformation将互斥體對象句柄标志改為HANDLE_FLAG_PROTECT_FROM_CLOSE,然後關閉句柄,如果是在調試器狀态下,它會抛出EXCEPTION_EXECUTE_HANDLER異常,隻要捕獲到異常那麼就表示程序被調試。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)7

CloseHandle 檢測

利用異常捕獲機制,給CloseHandle函數一個無效的句柄作為輸入參數,在程序在沒有被調試時,将會返回一個錯誤代碼;而程序被調試器調試時,将會觸發一個EXCEPTION_INVALID_HANDLE的異常。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)8

父進程反調試檢測

在window系統中explorer是程序管理器或者文件管理器,一般雙擊運行的進程,它的父進程就都是explorer程序,如果是被調試進程啟動的話那麼父進程是調速器進程。通過利用CreateToolhelp32Snapshot函數或ZwQueryInformationProcess函數進行檢測進程的父進程名稱。

軟件産品質量怎麼提高(花式提高軟件産品的安全性)9

硬件斷點反調試檢測

硬件斷點是intel在其處理器體系結構中實現的一種技術,通過使用Dr0-Dr7的特殊寄存器進行控制。在32位寄存器中Dr0-Dr3是保存斷點地址,隻要識别Dr0-Dr3寄存器的值不為0,那麼就屬于調試狀态。

軟件斷點反調試檢測

在IA-32指令集中使用操作碼0xCC,表示軟件斷點,也就是INT3斷點。

通過Int3産生異常中斷的反調試相對比較經典。Ollydbg的斷點機制就是利用這個機制, 當INT3 被執行到時, 如果程序未被調試, 将會異常處理器程序繼續執行。而INT3指令常被調試器用于設置軟件斷點,int 3會導緻調試器誤認為這是一個自己的斷點,從而不會進入異常處理程序。

其他反調試檢測

通過利用FindWindow(),GetWindowLongA(),EnumWindow()等函數,進行遍曆檢測調試器的的窗口及控件相關信息;

通過CreateToolhelp32Snapshot等函數遍曆運行進程,檢測調試器相關的進程名信息,

通過查找注冊表的方式,檢測調試器的信息。

通過檢測驅動設備名稱,檢測調試器的特征碼等相關信息。

總結

以上梳理的應用層反調試方案建議結合使用,可以同時提高對應的難點。反調試隻是一定情況下提高軟件安全門檻,因為雖然有反調試方案,但同時也會有過掉反調試的方案。一般過掉反調試檢測方案,通過将關鍵的反調試檢測地方給 nop掉或者hook掉關鍵函數。反調試和反反調試的方案都是相對的,并不是絕對的安全。反而調試強度更高的方案在于驅動層去檢測實現。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
手機上如何進官網買手機
手機上如何進官網買手機
先以小米為例,想知道手機是否是全新未激活的辦法有兩種。第一種是小米商城問客服(以紅米K30Pro為例),第二種是小米香港官網查詢(以小米10為例)。因為數據存在延遲問題,所有當天激活的手機隔天才能查到激活日期。(紅米K30Pro)(在小米商...
2024-05-18
手機充電慢該怎麼辦
手機充電慢該怎麼辦
手機充電慢該怎麼辦?充電器或數據線沒插好或接口不清潔時充電慢:,今天小編就來說說關于手機充電慢該怎麼辦?下面更多詳細答案一起來看看吧!手機充電慢該怎麼辦充電器或數據線沒插好或接口不清潔時充電慢:充電時充電器、數據線、手機充電接口未接觸好,可...
2024-05-18
oppo手機的控制中心在哪裡找到
oppo手機的控制中心在哪裡找到
蘋果最早在手機上加入了上劃控制中心,後來,其他手機廠商也競相模仿。今天高興大樹給你推薦個小應用,真的很小,不到1M的應用,基本不占用後台内存,耗電也相當少。但是他能夠實現IOS控制中心的所有功能。更加牛的是,所有的組件都可以自定義,你可以根...
2024-05-18
手機錄像聲音怎麼調
手機錄像聲音怎麼調
手機錄像聲音怎麼調?手機在錄制的過程中是不能改變聲音的,隻能在視頻錄制完成後用一些視頻編輯制作軟件來後期處理即可這類的軟件有很多,可以自行選擇下載使用,具體詳情如下:,我來為大家科普一下關于手機錄像聲音怎麼調?下面希望有你要的答案,我們一起...
2024-05-18
如何設置文件删除複制權限
如何設置文件删除複制權限
如何設置文件删除複制權限?copy縮寫cp格式:,現在小編就來說說關于如何設置文件删除複制權限?下面内容希望能幫助到你,我們來一起看看吧!如何設置文件删除複制權限複制文件copy縮寫cp格式:cp[參數][被複制文件的路徑][複制到新路徑]...
2024-05-18
Copyright 2023-2024 - www.tftnews.com All Rights Reserved