利用PE结构给Windows可执行程序加密码

 

Windows下可执行文件称为PE格式,包括常见的exe、dll等,通过PE格式的合理利用,可以实现许多有趣且使用的功能。本文提出了利用PE结构给Windows可执行程序加密码的方法(仅针对未经加壳处理的exe文件,且因为Kernel32.dll不同,故仅适用于Windows XP操作系统)。

大致思路是:为目标程序添加三个新区块,分别为WndProc、Strings、ShellCode,分别存放登录窗口例程、字符串、新入口点的ShellCode。在ShellCode中创建登录窗口,接收用户密码;在WndProc中处理登录窗口的消息;在Strings中存放要用到的字符串。

       先保存好目标程序的原始入口点,再改变入口点为ShellCode,执行完权限验证后再转到原始入口点OEP;

       在ShellCode的编写过程中,要用到许多技巧,因为ShellCode中不能直接调用任何API函数和库函数,要自己手动寻找相关的API地址;另外,要求对较为底层的操作,如寄存器、堆栈、内存寻址等,也要有所了解。例如传递参数,就不能像普通程序那样处理,而要先申请一块内存,A把参数放在该内存,B再从该内存中取出。   

       下面以Windows自带的记事本Notepad为例,程序界面截图如下,点击“打开PE文件”按钮,选择要加密码的程序。

点击“区块表”,出现如下界面。

点击“添加新区块”按钮,便可以给记事本程序加上密码,在此密码设置为“whacker”。

       经过本程序处理后,再打开notepad.exe,便会出现下图的登录框,要求输入密码。

如果密码输入错误,出现如下提示,并且不能启动记事本。

如果密码输入正确,记事本成功运行,如下图。

(注:小弟是绝对菜鸟一个,此文是本人的处女作,请各位大侠和老鸟们多加指教,不胜感激。由于小弟不会上传附件,有需要程序的请与本人联系,谢谢包涵!)

 

 

你可能感兴趣的:(windows,加密,api,XP,dll,exe)