2011-03-05 92 views
3

我有一箇舊的Paradox database(我可以將其轉換爲Access 2007),其中包含超過200,000條記錄。這個數據庫有兩列:第一個名爲「Word」,第二個名爲「Mean」。這是一個字典數據庫,我的客戶希望將這個舊數據庫轉換爲ASP.NET和SQL。解密加密值?

但是,我們不知道用什麼密鑰或方法來加密或編碼Unicode格式的「均值」列。該軟件本身是用Delphi 7編寫的,我們沒有源代碼。我的客戶端只知道登錄數據庫的憑證。問題在於解碼Mean列。

我所擁有的是編譯好的windows應用程序和Paradox數據庫。該軟件可以解碼每個「Word」的「Mean」列,以便該方法和/或密鑰位於其自己的編譯代碼(.exe)或其目錄中的一個文件中。

例如,我們知道,下面的行中的「Zymurgy」 確切指的是「مبحثعملتخمیردرشیمیعلمی,تخمیرشناسی」由於應用程序轉換會這樣。這裏是記錄看什麼,當我在Access中打開數據庫,如:

Word  Mean 
Zymurgy 5OBnGguKPdDAd7L2lnvd9Lnf1mdd2zDBQRxngsCuirK5h91sVmy0kpRcue/+ql9ORmP99Mn/QZ4= 

因此,我們正在努力探索如何在平均值列中的值轉換爲「مبحثعملتخمیردرشیمیعلمی,تخمیرشناسی」 。我認爲上面一行中的「均值」列值以Base64字符串格式編碼,但解碼Base64字符串還沒有產生預期的文本。

win app目錄中文件的擴展名爲dll,CCC,DAT,exe(除主應用程序文件外),SYS,FAM,MB,PX,TV,VAL。

任何形式的幫助表示讚賞。

這裏有兩個例子,記得在開始和結束的雙引號不是字符串的一部分:

word: "abdominal" 
coded value: "vwtj0bmj7jdF9SS8sbrIalBoKMDvTbpraFgG4gP/G9GLx5iU/E98rQ==" 
translation in Farsi: "شکمی, بطنی, وریدهای شکمی, ماهیان بطنی" 
word: "cart" 
coded value: "KHoCkDsIndb6OKjxVxsh+Ti+iA/ZqP9sz28e4/cQzMyLI+ToPbiLOaECWQ8XKXTz" 
translation in Farsi: "ارابه, گاری, دوچرخه, چرخ, با گاری بردن" 

這裏是結果不同的編碼:

1- in unicode the result is: "ᩧ訋퀽矀箖�柖�섰᱁艧껀늊螹泝汖銴岔꫾也捆￉鵓" 
2- in utf32 the result is: "��������������" 
3- in utf7 the result is: "äàg\v=ÐÀw²ö{Ýô¹ßÖg]Û0ÁAgÀ®²¹ÝlVl´\\¹ïþª_NFcýôÉÿA" 
4- in utf8 the result is: "��g\v�=��w���{����g]�0�Ag��������lVl���\\����_NFc����A�" 
5- in 1256 the result is: "نàg\vٹ=ذہw²ِ–{فô¹كضg]غ0ءAg‚ہ®ٹ²¹‡فlVl´’」\\¹ï‏ھ_NFc‎ôةےA" 

但我發現,悖論數據庫系統在密鑰管理方面非常複雜,大多數情況下密鑰都是「複合密鑰」,這就是爲什麼它存在問題,這就是爲什麼它被放棄了!

UPDATE:我試圖通過使用AutoIt v3來進行自動化,因爲解密過程就我所瞭解的不能在一天或兩天內完成。現在我有另一個與文字/字體有關的問題。當我將翻譯的文本複製到記事本時,它會變成一些無法識別的文本,除非我將記事本的字體更改爲翻譯軟件的字體。如果我在波斯語的記事本中鍵入內容,無論我選擇什麼字體,它都會正確顯示它。更有趣的是,當我將文本複製到MS Office Word等任何其他程序時,無論選擇什麼字體,它都能正確顯示。

那麼我該如何解決這個問題?

+0

你是怎麼從「win app」中獲得「zymurgy」這個詞的意思的? – muratgu 2011-03-05 16:27:50

+1

這看起來像一個不錯的挑戰。但我們需要更多信息。什麼是base-64解碼的「Mean」字符串,十六進制?你期待什麼unicode角色? (另外,這是編碼/解碼,不是加密/解密。) – TonyK 2011-03-05 16:27:51

+0

試試這個,http://arcanecode.com/2007/03/21/encoding-strings-to-base64-in-c/ 然後保存字符串在unicode文本文件中查看結果。 – 2011-03-05 16:57:10

回答

2

拿一個像ollydbg/softice這樣的調試器。找到平均值被解碼/編碼的地方,然後逐個檢查指令,檢查所有寄存器以找出完成的工作。我做了很多次。這應該有助於你開始,因爲你有能夠解碼這些東西的應用程序。你也有一個參考詞。這就是你需要的。

還要考慮:Unicode可以是Little或Big Endian。所以你可以嘗試交換字節。 UTF-8可能是一種痛苦,因爲有些單詞被存儲爲一個字節,一些存儲爲兩個字節。

您也可以嘗試在波斯語中使用幾乎相同的詞,並嘗試比較輸出。這可能會導致重建自定義代碼頁,如果有的話。

3

在這種情況下,我會考慮編寫一個腳本/程序來簡單地將所有數據從現有程序中提取出來。

您可以編寫應用程序將按鍵發送到應用程序,該應用程序將依次選擇並複製每個值。

運行需要一段時間,但您可以將它留在一夜(數據庫有多大?),並且只需運行一次。

不知道這將是多麼容易,因爲我沒有看到這個應用程序當然 - 可能這項工作?

+0

我同意。如果數據庫不是太大,這可能是最簡單的解決方案。嘗試抓取數據,並簡單地將它寫入一個新的數據庫/表中,就像普通的舊Unicode(UTF16可能是這裏最好的)。只要確保沒有任何不妥之處。 – ollb 2011-03-07 02:33:49