首页
社区
课程
招聘
[旧帖] 认真请教:有没有人实现过从内存运行EXE? 0.00雪花
发表于: 2016-8-10 10:11 15115

[旧帖] 认真请教:有没有人实现过从内存运行EXE? 0.00雪花

2016-8-10 10:11
15115
最近做一个加密,思路是把需要运行的exe做一个AES加密,保存一个二进制文件。启动的时候,从另外一个exe启动,启动时先fread文件到内存,解密,然后运行。
这种加密的好处是,脱离了我的加载exe,别人无法单独运行已加密的exe文件。

现在问题是:找遍了整个网络(百度,google, bing)都没有找到好用的从内存运行exe代码。常见的代码是:解释dos头,解释NT头,创建傀儡进程(CreateProcess,使用suspend挂起),然后AllocEX ImageBase,然后把要运行的exe的Image,sections……copy到Process内存。然后ResumeThread。
本论坛也有用到这方法的帖子,由于年代久远,所以重新开一贴。以上方法一些小的demo是可以正常运行的,但是大部分EXE无法正常运行。有兴趣的可以尝试运行一些游戏,例如U3d的游戏,几乎全部不能用(win8 64,win32程序)。如果是win8 64位的x64程序,问题更多。

问一下,有没有人在这方面有过深入研究的?有没有可能自己程序实现完全模拟windows加载exe的整个流程?万分感谢,如果有现成代码,我可rmb购买。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (35)
雪    币: 144
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
U3d游戏使用了托管语言,从内存加载可能存在某些需要特别处理的地方。现在网上的代码处理的是一般的情况,这些特殊的地方还需要调试后特别处理。包括是否正常启用了.net运行时
2016-8-10 10:25
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
需要调试后特别处理,岂不是我需要对所有的不能正常运行的exe都需要调试处理?如果我希望做统一加密的话,那不是不现实?求解。
2016-8-10 10:28
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有无可能做一个统一的接口,实现所有exe全部可从内存加载?按道理是可以的啊,不过看你这么说,做起来岂不是麻烦到死,这不大可能啊。
2016-8-10 10:32
0
雪    币: 6825
活跃值: (1570)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
把功能做成dll动态链接库,并且在调用库里的函数的时候加入验证机制
2016-8-10 10:34
0
雪    币: 144
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不同操作系统上历代的PE加载器行为是类似的,但是随着操作系统的革新,肯定会有细微的变化。不同的exe启动时,请求的资源不同,PE加载器的某些细小的行为有些不同。网上的代码只模拟了通用的情况。
2016-8-10 10:41
0
雪    币: 144
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
。。。。。
2016-8-10 10:46
0
雪    币: 38
活跃值: (798)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
怎么说呢 这个思路好多都想到了 终归是可以 实现需要大功夫
2016-8-10 10:49
0
雪    币: 286
活跃值: (67)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xjj
9
内存解密过程一旦被破解或者你解密后DUMP出你的EXE,你的加密就没任何作用了

可以考虑透明加密,从驱动层、文件系统入手吧

你的想法是好的,但想实现出来并不是那么容易,想兼容性、稳定性都OK,那就更难了

祝好运!
2016-8-10 10:53
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
难道windows的PE加载器那么复杂啊,看着好麻烦的样子。按这个说法,岂不是我这个加密方式不能实现了?但是win7,win8本身的加载都是没问题的啊,要模拟这个加载有那么难吗,伤。
2016-8-10 11:10
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你说的我考虑过。解密过程即使被破解,我使用的AES这类加密的话,知道算法没有密匙也不好破解。至于DUMP内存,这个我想过,其实就是把内存中破解后的EXE copy出来写入硬盘。这个我觉得也没有那么容易。我这个加密方式不代码不可能破解,而是破解成本大大提高。现在问题就在加载exe这个太难了。我希望兼容尽量多的exe。不过看楼上说的,心都凉了一半
2016-8-10 11:15
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
如果是这么艰难实现的话,那些加壳软件都是怎么弄的?加壳软件不是能对大量的exe进行加壳吗
2016-8-10 11:19
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我看了一下,UPX这种支持很多EXE文件格式,那么有无可能我把UPX源码加载EXE这部分的分离出来使用?
2016-8-10 11:42
0
雪    币: 24
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
从内存中虚拟出文件系统,然后再做转换的方式是否可行?
2016-8-10 11:45
0
雪    币: 7
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我记得使用UPX加壳之后的程序应该是可以直接运行的,只是解压过程在内存中
2016-8-10 12:24
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
对,但是那种是边解压边运行,我认为会比较消耗效率,所以想做一个静态解压的,然后再运行的。
2016-8-10 14:06
0
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
17
论坛搜索功能
2016-8-10 14:18
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
exe和dll的一般性区别是没有重定位表, 重定位表的有无直接限制了exe能否动态加载.
2016-8-10 14:36
0
雪    币: 729
活跃值: (1195)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
嗯,这个我以前有做过从内存加载的EXE文件,原始的EXE文件被我加上VMP和ASPROTECT双层壳后随机抠出了若干字节后加密保存,这些随机字节被我放到了一个加密的配置文件中,在内存中加载后运行前再补上这些字节.运行过后又随机修改了一些一次运行的指令,保证DUMP下来的程序也是不能运行的.
不过还是不能保证所有程序都能加载成功.一般的MFC程序是可以的.
2016-8-10 14:49
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
看你这么说,我怎么觉得我这个方法最终貌似不能实现了。。。我查了一下UPX的一些文档,貌似他们现在x64的加载器还在试验阶段,没想到这个部分这么难以实现。
2016-8-10 15:40
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
我有现成的,加我qq:29420382
2016-8-15 17:08
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
可以LoadLibrary加载EXE获得基地址(句柄)后进行解密在jmp到入口地址
2016-8-18 10:55
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
可以LoadLibrary加载EXE获得基地址(句柄)后进行解密在jmp到入口地址
2016-8-18 10:57
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
24
第一种方式:http://www.freebuf.com/articles/system/84509.html
第二种方式:自己实现一个Exe loader,微软加载pe处理的东西之多,不是一句二句说的清。
2016-8-18 11:10
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
加密软件漏洞评测系统,就是实现在内存中运行
2016-9-26 10:34
0
游客
登录 | 注册 方可回帖
返回
//