2011-03-05 120 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