我有一个程序,可以从文件中读取数据,进行解析/组织,然后将其作为加密的XML吐出。该应用程序还可以获取加密的XML并吐出原始文件。我现在的目标是访问明文XML(我对明文原始文件不感兴趣,因为它不是XML组成的)。

我不知道加密是什么,尽管一个论坛上的一个人说这是AES-128(不确定如何得出结论)。

我在应用程序上使用KANAL插件运行PEiD,它没有检测到任何加密签名。

因为我可以访问该程序,并且在使用ASM的一些知识的基础上拥有一些在WinXP上利用BO的经验,所以我想可以使用调试器进行尝试。


评论

我们需要了解更多信息,这可能有助于跟踪AES进程

#1 楼

通常有很多开始的方法,要使用哪种取决于您的经验。同样,对一个目标有效的方法可能对另一个目标无效,反之亦然。我首先要使用的是:


使用signsrch检查可执行文件是否链接了标准加密算法。请注意,这可能会产生误报(如果应用程序链接openssl,对于例如,即使仅使用一种或两种算法,您也可能会发现许多算法的签名。
检查文件中与加密有关的字符串,然后用google搜索它们。也许这有助于查找使用了哪个加密库。例如,字符串SHA-%d test #%d:会迅速导致polarssl源代码。
在运行procmon时跟踪应用程序。写入加密文件时,您可能会发现一个序列CreateFile,多个WriteFile和一个CloseFile调用,以及在读取加密文件时与ReadFile相同。在某些情况下,这些调用的参数已经为您提供了提示。例如,如果第一个WriteFile的字节数为32,并且随后的每个调用4096,则可能暗示前32个字节是256位密钥。
调用ReadFile或发生WriteFile时,您可以通过在调试器下运行应用程序时在该处放置一个断点来实现此目的,或者(更简单的恕我直言)查看几个procmon调用的堆栈。这样可以提示您使用哪个功能链来加密文件并将其写入。

请注意CreateFileWriteFile以及可能的其他形式的WriteFile的堆栈差异。这些也可能会提示您哪个是加密功能。例如:


加密文件的CreateFile具有堆栈ABCDEFGH

加密文件的WriteFile具有堆栈ABCIJKLM

用于其他内容的WriteFile具有堆栈ABNOPKLM


其中每个字母是一个堆栈条目。在这种情况下,我假设KLM是运行时库的一部分(fwritewrite,...。),因为无关的WriteFile共享它,所以C是主要的写函数(因为这是最后一次调用CreateFileWriteFile),IJ加密和写入的函数。

将文件加载到IDA或OllyDbg中,并仔细查看CIJ。他们还调用其他哪些功能?这些功能是否与您先前使用signsrch识别的功能相同?
在IDA或OllyDbg的控制下运行文件,并将断点放在CIJ上,也许还有一些您通过signsrch找到的功能。检查这些功能的进入和退出参数。他们中有些人会打铃吗?其中一个函数是否具有一个参数,该参数是一个指向缓冲区的指针,该缓冲区在调用该函数之前看起来像XML,而在调用该函数之后看起来是垃圾?反之亦然?恭喜,您刚刚找到了执行加密的功能。
当您发现执行加密的功能时,与其找出其工作方式,不如直接将其调用替换为一个序列,这可能会更容易一些。 NOP的值(尽管要注意返回码,也许您需要将eax设置为某些值)。宾果(Bingo),您有一个程序现在可以编写纯XML而不是加密XML,而无需弄清楚加密的细节,也不必编写一行代码(除非考虑了一系列NOP的代码)。 br />

评论


您忘记告诉如何删除混淆了加密阶段的垃圾

– Abr001am
15年6月20日在13:11