解密加密值?

时间:2011-03-05 16:20:43

标签: c# encryption character-encoding

我有一个旧的Paradox database(我可以将其转换为Access 2007),其中包含超过200,000条记录。该数据库有两列:第一列名为“Word”,第二列名为“Mean”。它是一个字典数据库,我的客户端想要将这个旧数据库转换为ASP.NET和SQL。

但是,我们不知道使用什么密钥或方法来加密或编码Unicode格式的“Mean”列。该软件本身是用Delphi 7编写的,我们没有源代码。我的客户端只知道登录数据库的凭据。问题是解码平均值列。

我所拥有的是已编译的Windows应用程序和Paradox数据库。该软件可以解码每个“Word”的“Mean”列,因此方法和/或密钥位于其自己的编译代码(.exe)或其目录中的一个文件中。

例如,我们知道在下一行中“Zymurgy” 完全意味着“مبحثعملتخمیردرشیمیعلمی,تخمیرشناسی”,因为应用程序翻译它。以下是我在Access中打开数据库时的记录:

Word      Mean
Zymurgy   5OBnGguKPdDAd7L2lnvd9Lnf1mdd2zDBQRxngsCuirK5h91sVmy0kpRcue/+ql9ORmP99Mn/QZ4=

因此,我们试图发现Mean列中的值如何转换为“مبحثعملتخمیردرشیمیعلمی,تخمیرشناسی”。我认为上面一行中的“Mean”列值是以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" 

然而我发现悖论数据库系统在密钥管理方面非常复杂,而且大多数情况下密钥都是“复合密钥”,这就是为什么它有问题,这就是为什么它被抛弃了!

更新:我正在尝试使用AutoIt v3进行自动化,因为我所理解的解密过程无法在一两天内完成。现在我有另一个与文本/字体有关的问题。当我将翻译后的文本复制到记事本时,它将更改为某些无法识别的文本,除非我将记事本的字体更改为翻译软件的字体。如果我在波斯语的记事本中输入内容,无论我选择了什么字体,它都会正确显示。更有趣的是当我将文本复制到任何其他程序(如MS Office Word)时,无论我选择何种字体,它都会正确显示。

所以我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:3)

在这种情况下,我会考虑编写一个脚本/程序来简单地通过现有程序提取所有数据。

您可以编写一个应用程序来向应用程序发送按键,然后依次选择并复制每个值。

运行需要一段时间,但你可以将它留在一夜之间(你的数据库有多大?)而且它只需要运行一次。

不确定这会有多容易,因为我当然没有看到这个应用程序 - 这可行吗?

答案 1 :(得分:2)

使用像ollydbg / softice这样的调试器。找到平均值被解码/编码的位置,然后逐个执行指令,检查所有寄存器以找出所做的事情。我做了很多次。这应该可以帮助您入门,因为您有能够解码这些东西的应用程序。你也有一个参考词。这就是你所需要的一切。

还要考虑:Unicode可以是Little或Big Endian。所以你可能会尝试交换字节。 UTF-8可能很痛苦,因为有些单词存储为一个字节,有些则存储为两个字节。

您也可以尝试在波斯语中使用几乎相同的单词并尝试比较输出。这可能导致重建自定义代码页(如果有的话)。