2011-08-02 34 views
4

我攔截了我的計算機上的軟件和遠程服務器上的軟件之間的數據包。我們的想法是在兩者之間對API進行反向工程,並將API集成到另一個軟件模塊中。解碼/解密:入門

問題是我無法弄清楚如何讀取數據。這裏是92個字節十六進制數據來舉個例子:

10:02:42:6d:95:72:1a:70:be:00:ba:cc:a9:95:72:81:49:dd:00:ae:39:bd:c2:4a:0e:00:d1:fe:a6:01:fc:51:09:42:c1:49:dd:00:59:57:31:b2:3a:ce:00:d1:7e:7c:fa:1d:65:c9:42:41:7c:b6:40:dd:f5:71:52:f1:c7:65:12:be:c0:86:71:03:62:eb:81:49:dd:00:dd:f5:71:dc:7a:ce:00:d1:be:00:ba:1d:65:61:52:c2 

此轉換爲ASCII字符串:

??Bm?r?p??????r?I???9??J???????Q?B?I??YW1?:???~|??e?BA|[email protected]??qR??e????q?b??I????q?z???????eaR? 

我知道這個數據應該包含什麼,如果沒有什麼幫助。

我只是在尋找入門技巧來幫助我破解代碼。

+1

這個十六進制數據到底是什麼?你怎麼知道它被加密?使用什麼加密算法?加密密鑰存儲在哪裏? –

+0

@Petey我不知道使用什麼加密。數據應該最終轉化爲平面數據(數字等) – klonq

回答

1

該數據實際上可能不是加密,可能是編碼

您可能正在處理的可能編碼之一是一種稱爲基本編碼規則(BER)的標準。這是一種將抽象語法表示法(ASN.1)數據結構編碼爲二進制流的方法。

查看http://en.wikipedia.org/wiki/Basic_Encoding_Rules瞭解一些見解。

但值得注意的是,有多種語言的工具包可以使得處理BER數據更容易。我見過的最廣泛的一個是名爲Convert :: ASN1的Perl庫。

希望這是有幫助的,我會盡力保持這個最新的更多的工具包,因爲我遇到了這種編碼。

此外,如果這僅僅是編碼,那麼也可以使用給定值簡單地用ASCII分隔二進制數據。該值可能是您在輸出中看到的管道(|)字符。有許多使用這種形式的有線協議的格式,例如HL7。

+2

我很確定它不是DER/BER,否則它將以30或31(SEQUENCE或SET標記)開始。 – emboss

2

假設數據只是編碼而不是加密的,有一件事可能會揭示大量關於數據的信息,那就是隨着時間的推移比較數據包。 隨着時間推移而變化的部分可能是數據,而不是可能是結構性信息的部分。

通過改變軟件狀態(假設這是可能的)進行實驗,數據中觀察到的任何變化都是線索。

既然你大概知道數據包應該包含什麼,這可能會給你足夠的線索來找出數據格式。特別是如果你對軟件狀態有很好的控制。

注: 還記得那多字節的數據有一個字節序,並假設錯誤的字節順序可以使事情非常混亂。類似地,還有很多其他編碼字符串的方法,而不是ASCII。

如果發送了很多數據,您可能還想檢查數據是否以任何方式壓縮。

1

如果你不確定數據是否被加密,一個好的測試是檢查數據的隨機性。

任何值得名字的加密算法都會輸出完全隨機的數據。所以你可以迭代字節並檢查值是否均勻分佈。如果是這樣,你可以確信數據是真正加密的,而不僅僅是編碼。