即时解密EXE
Posted
技术标签:
【中文标题】即时解密EXE【英文标题】:Decrypt EXE on the fly 【发布时间】:2013-01-09 13:21:16 【问题描述】:我有一个XXX.EXE
,这是将AES
应用于原始.EXE
的结果
我有一个主机进程,它在 XXX.EXE
上调用 CreateProcess
主机进程中有一种解密方法允许解密.EXE
的任何块(这很简单,因为主机进程知道AES密钥)。
我想找到一种简单的方法来执行解密后的.EXE
,并尽可能避免将整个.EXE
存储在内存中。
我尝试为 ReadFile 安装挂钩,以便在被 CreateProcess
调用时动态解密,但这不起作用,因为 CreateProcess 还调用 CreateFileMapping
,它可能使用内核模式函数读取文件,所以我卡住了。
有人有什么想法吗?
【问题讨论】:
挂钩WriteProcessMemory
怎么样?我假设它使用 CreateProcess 在覆盖它然后恢复它之前启动一个暂停的“受害者”。 This article 介绍了很多细节,包括可能值得挂钩的函数。
您当然知道这意味着程序中的页面不能被丢弃并再次从磁盘中重新读取(通常情况下,可执行文件只是内存映射只读)?所以这只有在页面文件有足够的支持时才会起作用。现在让我们希望您的用户都不会禁用页面文件。
Damon,所以你的意思是解密的 EXE 代码的每一页都需要出现在页面文件或磁盘上的 EXE 文件中......所以如果页面文件被禁用,整个解密的 EXE 需要出现在磁盘上......当页面从磁盘读取到内存时,是否有办法挂钩页面错误事件,以便即时解密?
【参考方案1】:
您要做的实际上是运行packed executable 以混淆正在运行的内容。打包程序将允许您正常运行可执行文件,并且将有一小段未混淆/未加密的代码来解压缩二进制文件的其余部分。
有些打包程序不需要一次性解压整个二进制文件,而其他打包程序则需要。然而,这是恶意软件常用的一种使逆向工程更加困难的技术。这反过来又会导致反病毒公司将打包的软件标记为恶意软件。
可以编写自己的可执行文件loader 来解密其余的可执行文件并加载导入的函数等。This article 解释了 Windows 加载程序中涉及的步骤。
【讨论】:
感谢您的回答。我想做的是加密而不是混淆,因为只有“主机”进程知道解密密钥。所以我不确定自解包是否会有所帮助......无论如何,谢谢......并且文章的链接不起作用...... 了解您要防范的威胁会很有帮助。一些加壳程序确实加密了可执行数据,但最终它只是被混淆了。这是因为在运行程序时,代码必须被解密(至少部分解密)。对程序进行逆向工程的人可以等待这种情况发生,然后将进程内存转储到磁盘并获取未加密的可执行文件。以上是关于即时解密EXE的主要内容,如果未能解决你的问题,请参考以下文章