2010-04-28 10 views
1

我試圖對一個首選項文件進行反向工程(不是爲了任何惡意目的,只是爲了我可以使用它),除此之外,還有存儲在其中的座標數組。如何在屬性列表中解碼base64編碼的<data>(CFData/NSData)屬性?

這是從屬性列表中的突出的片段:

<dict> 
    <key>$class</key> 
    <dict> 
    <key>CF$UID</key> 
    <integer>34</integer> 
    </dict> 
    <key>coordArray</key> 
    <data> 
    AAAAAAAAAAAAAAAAAAAAAT70vS8/M7xSPwAAAD8AAAA/AAAA 
    </data> 
    <key>coordCount</key> 
    <integer>1</integer> 
</dict> 

我認爲數據串是座標的陣列(基於它的鍵名)。我的問題是,我怎樣才能弄清楚哪些數據存儲在那裏?如果我只是base64解碼該字符串,我會得到亂碼。有沒有辦法將它解碼並將其轉換爲任何格式(NSArray,我認爲)?

回答

2

爲什麼不把它作爲屬性列表加載並檢查內容?

NSDictionary *plist = [NSDictionary dictionaryWithContentsOfFile:...]; 
+0

該解決方案的優點是數據元素的內容在base64編碼的XML數據中將被plist解析器自動解碼。 NSDictionary對象中的NSData對象將包含已解碼的數據。 – 2010-04-28 17:04:28

+0

謝謝,這很有幫助。我仍然是Objective-C的總Noob,我試圖弄清楚如何編寫和編譯一個可以做到這一點的小程序。 – bantic 2010-05-05 14:18:39

+0

您可以輕鬆地從plist詞典中獲得coordArray。從那裏嘗試各種initWithData:方法來查看是否有任何Foundation類可以處理它。沒有明確的方法來找出你在那裏有什麼。 – 2010-05-05 14:54:07

2

該字典看起來像一個歸檔的對象圖給我;我會嘗試使用-[NSKeyedUnarchiver unarchiveObjectWithData:](或-unarchiveObjectWithFile:)解壓縮它。

+1

這不是,它是一個plist;存檔工作方式不同。 – 2010-04-28 23:28:14

+2

很確定他們鍵入的歸檔器輸出數據是二進制plist。 – Wevah 2010-04-29 01:29:38

+0

雖然這可能是因爲沒有足夠的關於類的數據來直接解壓縮它。 – Wevah 2010-04-29 01:42:00