通過逆向學習軟體設計(1)

2021-06-12 12:04:20 字數 1792 閱讀 9980

reverse engineering

is the 

process

of discovering the technological principles of a device, object, or system through analysis of its structure, 

function

, and operation.

-----

eilam, eldad & chikofsky, elliot j. (2007). reversing: secrets of reverse engineering

對於大多數的it從業人員,特別是研發人員來說,軟體逆向技術是乙個學習商業軟體某些設計思想或者核心技術,提高自身設計實現水平的途徑之一,特別是那些設計優美,效能強悍的商業軟體,這些軟體的設計思想和實現手段往往都做為商業機密不會公開,作為普通的研發人員來說,在工作之餘希望自我快速提公升,除了多多參與共享軟體的設計實現以外,參考學習一下成熟的商業軟體也是乙個很好的途徑。

在系統學習了逆向之餘,我通過分析一款免費好用的軟體(如圖1)來總結和整理一下逆向學習軟體設計實現的一般過程。

圖1 軟體介面圖

首先,站在軟體設計學習者的角度來看待這個軟體的某些核心價值部分,最最本質的地方,就是那上千個可用且好用的電台urls了,因為作者收集了相關的urls,並通過分類整合到軟體中,通過不定期公升級節目庫的方式來不斷更新電台資料,那麼對於軟體設計者來說,必須自己設計並維護乙個微型的資料庫,即:電台資訊資料庫。軟體的作者是如何設計組織實現這個微型資料庫的呢,我們首先可以看一下,軟體資料資料夾裡的相關檔案,並通過簡單檢視的方式(例如:用記事本或者其他文字類軟體開啟瞅一下)【如圖2】。

圖2 電台樹明碼檔案關係圖

此圖很明顯地說明了,電台樹的顯示組織結構。通過簡單地分析不難進一步得到,資料檔案的相關作用【如圖3】

圖3 資料檔案的作用

接下來,通過監控api的呼叫流程,獲取軟體執行的關鍵流程資訊並作出相應的分析,如圖4。

圖4  軟體關鍵流程api呼叫分析圖

接下來,就可以利用ollydbg+ida準備進行分析了,在深入核心過程分析之前,首先可以,使用peid來大致看看有木有殼以及該軟體採用什麼語言編寫的等等,為進一步的詳細分析做準備,通過peid的分析,可以知道,該軟體採用delphi編寫,使用的是pascal語言,該語言對於我來說,除了很早很早在大學使用過這個做過資料庫相關的課設以外就沒有更多的印象了,當然如果需要逆向這種語言寫的軟體,重點其實並不在此語言的語法結構上,而是在於delphi編譯器將其轉化為彙編的相關行為上,例如:盡量採用eax、edx、ecx等傳參,多於三個引數的時候,對多出來的引數按照從左至右的pascal方式來壓棧,等。如果對delphi的函式傳參及返回值的這些不清楚,那麼很難繼續進行進一步的函式級別的分析還原。當然在 分析的時候,可以針對該語言及其ide的相關特點進行一些預處理,例如使用dede來獲取一些既有的相關api的輔助資訊,或者直接使用ida分析過程中加入delphi相關庫的簽名等等,獲取到盡可能多的額外資訊,方便我們進行接下來的分析。【to be continued......】

遊戲逆向學習 C 共同學習1

這裡要說的就是建立的時候一定要預先宣告。這裡我們發現在指標指向引用變數時,和我們平常指標指向輸出不一樣,乙個輸出真實值,乙個卻輸出了位址,經過又一輪驗證看圖2。這裡我們看的出其實引用的實際含義就是與原始值使用相同位址,引用變數自身為什麼不能賦值的原因就在這裡。類似於寄生的關係。第三個知識點 將引用用...

軟體設計作業 1

酒店管理系統能夠極大的方便酒店的工資人員在關於酒店的管理的操作,如客人入住 退房,資訊錄入 查詢等,極大的提高了酒店整體管理活動的工作效率。使用scrum使得程式設計更加的方便,在團隊合作的時候提高團隊的協作能力scrum的開發好處是跟傳統的開發方式作比較的,很明顯,在一次次迭代中我們可以的持續的發...

1 軟體設計模式概述

設計模式 這個術語最初並不是出現在軟體設計中,而是被用於建築領域的設計中。1977 年,美國著名建築大師 加利福尼亞大學伯克利分校環境結構中心主任克里斯托夫 亞歷山卓 christopher alexander 在他的著作 建築模式語言 城鎮 建築 構造 a pattern language tow...