參加國際學術會議總結

參加國際學術會議總結

  20103rdInternationalConferenceonAdvancedComputerTheoryandEngineering(ICACTE2010)於2010年8月20日至2010年8月22日在四川成都的四川大學召開,本次會議由四川省計算機學會和IACSIT(InternationalAssociationofComputerScienceandInformationTechnology)聯合發起,由IEEE、四川大學,電子科技大學,西南交通大學,西南民族大學提供技術協助。會議旨在為科研工作者和工程技術人員提供一個報道先進研究成果、交流學科前沿動態的平臺。

  會議吸引了來自亞洲、非洲、北美、歐洲等20餘個國家和地區的百餘位專家、學者的參加,會議內容涉及本領域國際最新研究動態及前沿工作,反映了未來發展方向。會上與國際知名學者交流,感受了國內、國際權威學者的敏銳思維、學習專家解決難題的靈活方式、感覺受益匪淺。

  大會共有600餘篇poster展出,本人的第一作者論文“ApplicationofStructuredExceptionHandlinginSoftwareAnti-debugging”被本次大會安排為會議首日第一個分會場的第一個口頭宣讀,充分體現了大會對本論文的重視,作為本次大會第一個宣讀的論文,本論文也得到了分會場主席和與會專家和學者的普遍好評並得到很多有益的建議,可謂收穫頗豐。具體內容是:

  隨著軟體產業的快速發展,以反跟蹤技術為核心的軟體安全已經成為一個重要的課題。在與軟體解密做著不懈鬥爭的同時,軟體從業人員不斷髮現新的軟體反跟蹤策略,提出新的軟體保護方案,增強了軟體的安全性。

  結構化異常處理,是作業系統提供的用於解決系統軟硬體異常的一種機制,在程式設計中的合理使用可以提高軟體的穩定性、容錯性。本文著重探討了其在軟體反跟蹤中的應用。

  應用程式正常執行中出現異常時,作業系統將收集異常發生的原因、型別、位置等資訊,填寫相關的資料結構,並從使用者程式轉到系統級執行,將控制權交給系統的異常排程函式。該函式將根據系統收集的異常資訊選擇一個異常處理例程處理異常。使用者可定義的異常處理例程分為兩種;一種是執行緒相關的,一種是程序相關的:執行緒相關的異常處理例程,監視某執行緒中某段程式碼是否發生異常,由於執行緒是程式執行的最小單位,所以把異常解決於執行緒的內部,可以避免該異常對其它執行緒的干擾,保證程式的`穩定執行。程序相關的異常處理例程:也稱為篩選器,監視程序中所有執行緒發生的異常,做程序退出前的清理工作。

  異常處理流程是指執行在win32系統中的程式通常包含多個執行緒,而每個執行緒都會安裝各自的異常處理例程;除此之外,程式中可能存在一個全域性性的異常處理例程;再者,如果程序被除錯的話,除錯程序也相當於一個異常處理例程。當異常發生時,系統將根據異常型別選擇一個異常處理例程來處理異常,正常情況下,系統進行異常處理的流程為:

  系統首先判斷異常是否應傳送給目標程式的異常處理例程。如果應該傳送,並且目標程式正在被除錯.則系統掛起程式;如果程式沒有被除錯或者偵錯程式未能處理異常,系統繼續查詢是否安裝了執行緒相關的異常處理例程。如果已經安裝,系統就把異常傳送給SEH處理例程。每個執行緒相關的異常處理例程可以處理或者不處理這個異常,如果它不處理並且安裝了多個執行緒相關的異常處理例程可交由鏈起來的其他例程處理;如果這些SEH處理例程均不處理異常,且程式處於被除錯狀態,作業系統會再次通知偵錯程式;如果程式未處於被除錯狀態或者偵錯程式沒有能夠處理,並且程式呼叫SetUnhandledExceptionFilter函式安裝了程序相關的異常處理例程的話,系統轉向對它的呼叫;如果沒有安裝程序相關的異常處理例程或者它沒有處理這個異常,系統會呼叫預設的異常處理例程,通常顯示一個對話方塊,使用者可以選擇“關閉”或者可以將程式附加到偵錯程式的“除錯”按鈕。如果沒有可以附加的偵錯程式或偵錯程式也不處理,系統就對執行緒異常處理控制代碼進行展開做最後的清理工作,最終呼叫ExitProcess終結程式。透過對系統異常處理流程分析可知,當應用程式執行過程中發生異常時,系統可在三個層次上完成異常處理:偵錯程式、程序、執行緒。執行緒層次的異常處理即SEH,能夠準確定位異常的資訊,更加靈活、隱蔽的實現反跟蹤的功能,是本文研究的主要方面。下面深入分析SEH的工作原理。

  系統級處理機制,SEH作為系統內部處理異常的一種機制,其工作主要在系統級完成,因此掌握系統內部異常處理的工作原理是研究基於SEH的軟體反跟蹤的關鍵。下面圍繞異常處理例程深入分析系統級異常處理機制。異常發生時,系統執行KiUserExceptionDispatcher函式並呼叫RtlDispatchException啟動對註冊的異常處理例程的查詢。如果找到的處理例程處理了異常並繼續執行,則對RtlDispatchException的呼叫不再返回。否則,有兩種可能:呼叫NtContinue使程式繼續或產生另一個異常。若是後者,異常不再繼續,程序必須終止。

  RtlDispatchException函式遍歷異常幀,利用獲得的指向EXCEPTION_REGISTRATIONS連結串列的指標遍歷每一個節點查詢異常處理例程,並透過RtlpExecuteHandlerForException完成異常處理例程的呼叫,根據RtlpExecuteHandlerForException的反饋資訊,RtlDispatchException或者繼續遍歷異常幀,或者產生另一個異常,最終將控制送至ExecuteHandler函式,由該函式透過EXCEPTION_REGISTRATION的handler域呼叫異常處理例程,對程式執行中產生的異常進行處理。

  SEH在軟體反跟蹤中的主要應用方式是除錯工具的檢測、硬體斷點的去除、改變程式執行順序等,但這些反跟蹤技術相對比較成熟,很容易被破解者發現併成功破解。本文所介紹的是一種更加隱蔽,效果更好的反跟蹤方式:單步異常-抽取程式碼法。

  在程式的正常執行序列中設定功能請求標誌位,之後觸發單步異常,進入異常處理例程後根據標誌位完成所抽取的相應的功能,繼續程式的執行。這樣,如果破解者不能發現異常處理例程的存在,將無法實現該功能。這是因為異常發生後,偵錯程式接管了異常,而不會去呼叫作者安裝的實現具體功能的異常處理例程,從而達到反跟蹤的目的。

  利用單步異常實現反跟蹤的具體過程是安裝異常處理例程,在程式開始處將異常處理函式地址放入EXCEPTION_REGISTRATION結構的handler域中,一旦執行過程中有異常發生系統就透過handler域的地址呼叫異常處理函式,完成相關的異常處理,正常執行程式碼,安裝完異常處理例程,其後是程式功能程式碼,在這裡設定標誌以便異常函式作不同的處理。插入單步異常指令,此處是關鍵的地方,因為程式的反除錯功能透過它來實現。當程式執行到這裡時,根據是否處於除錯狀態有兩條執行路徑,一條是處於除錯狀態,這時偵錯程式接收異常資訊,並進行相關的處理,這樣將有部分程式程式碼得不到執行而使程式出現錯誤;另一條執行路徑是不處於除錯狀態下,程式本身將透過異常處理函式來處理異常,這樣程式中部分被抽取的程式碼將得到執行,程式不出現錯誤,且功能可以實現。清除異常處理例程,程式執行完功能程式碼後,要把開始時安裝的異常處理例程去除,否則容易引起系統錯誤。清除的方法是:用出棧指令將EXCEPTION_REGISTRATION結構的prev與和handler域彈出即可。

  這次參加ICACTE國際會議,透過和與會學者的交流、探討,我覺得自己的收穫主要在以下方面:

  (1)對自己專業的新動態有了一定的把握,對本行業內的其他專業方向有了一定的瞭解;

  (2)發現了自己在學術上存在的問題,這有助於以後的改進和提高;

  (3)結識了一些日本、韓國、臺灣等地高校和公司的教授、研發人員和學生,為以後更廣泛的交流打下了基礎;

  (4)發現了自己英語水平的不足,這將促使我更加努力地掌握英語,尤其是提高口語水平。

  總體上,這次國際會議讓我學到了很多東西,雖然只有短短三天,但我感覺收穫頗多,聽到了許多新思想,結識了許多新朋友,拓寬了視野,增長了知識,結識了軟體安全研究領域的多名學者,更加明確了今後的研究方向,相信對個人今後的學術研究有很大的促進。非常感謝我校研究生院給予的此項支援,鼓勵研究生參加國際會議是符合建設國際型大學的潮流之舉。作為研究生,我們應該認識並珍惜學校提供的學術科研和培養的機會和條件,積極思考,廣泛交流,用優秀的科研成績回報學校。

最近訪問