阅读:1846回复:17
驱动里能装载资源?
我想在我的驱动里装载资源?
在驱动启动后再把资源释放出来? 就向应用程序装载和释放一样! |
|
沙发#
发布于:2007-02-07 00:42
理论上可以,实际上需要自己动点手脚,这个问题,老v比较熟悉.
|
|
|
板凳#
发布于:2007-02-07 19:48
|
|
地板#
发布于:2007-02-07 20:24
bin2hex
然后静态数组存储,哈哈~ |
|
|
地下室#
发布于:2007-02-07 20:38
CNNIC 的XX里就有个xx的dll.
|
|
|
5楼#
发布于:2007-02-08 09:41
引用第3楼killvxk于2007-02-07 20:24发表的“”: 一个500k的文件,放入静态数组,编译的时候估计需要5个小时以上把?? 我以前试过一回,时间太长放弃过啊 |
|
|
6楼#
发布于:2007-02-08 09:59
Walter Oney的书自带的源码,当中有一个sample,可以在driver中取得它自己的version information,使用的原理就是PE格式的处理。可以以它为基础,扩展到处理任何资源
|
|
|
7楼#
发布于:2007-02-08 10:13
谢谢大家的回复!
感觉用数组比较简单点 但如何把一个文件的内容弄到数组里面去呢? 用手一个一个的敲进出吗? 还是有比较快的方法? |
|
8楼#
发布于:2007-02-08 13:28
引用第5楼linestyle于2007-02-08 09:41发表的“”: 我选择把文件放在驱动文件尾部~~就跟最原始的文件合并一样,哈哈~~ |
|
|
9楼#
发布于:2007-02-08 13:29
嘿嘿
|
|
|
10楼#
发布于:2007-02-08 17:30
我也是放到数组中,编码的方法可以自己写个小程序,如果懒得写,可以使用ultraedit使用16进制拷贝方式,粘贴到一个新文件中,然后采用列块模式编辑,以插入逗号和引号。最好把这个数组单独放到一个文件中。和其他文件分开。另外最好对文件进行简单编码,否则别人使用ultraedit打开sys文件搜索4d5a 很容易找到这个嵌入的exe文件。
也可以使用资源的方法嵌入二进制数据类型,使用rc进行编译,和开发win32应用态应用程序一样,只是资源的引用比较麻烦,我想通过搜索当前模块所在的内存应该可以找到资源数据的入口,至于数据的长度可能需要自己想办法。 可以设想如果存在一套成熟的内核资源存取方法,在内核里面判断一个文件是否是微软出品,将会容易的多。事实上在驱动中判断一个文件是否是操作系统的一部分,要走很多弯路。 |
|
11楼#
发布于:2007-02-09 10:05
谢谢guaiguaiguan老兄的方法!
我现在也用装入资源的方法 但发现我用strstr去找4d5a90 能找到第一个 但找下一个4d5a90就找不到了,不知道为何,文件里明明是有的! 文件结尾我是用.pdb来区分的,可用strstr也找不到! 不行的话只能用数组的方法了! |
|
12楼#
发布于:2007-02-09 19:51
居然用strstr去找4d5a90 还能找到第一个,你的运气实在太好了,那么多0字符都没有阻止找到这个MZ。不过如果你把这块内存以16进制dump到一个字符串数组中,肯定还能找到第2个,可惜效率太低。
起始可以使用 mov ax,5a4dh mov di,offset begin mov cx,len cld rep scasw 稍作变化很容易找到第二个。 |
|
13楼#
发布于:2007-02-09 20:37
010 Editor可以直接导出数据为C语言格式的数组
|
|
|
14楼#
发布于:2007-02-10 22:00
XP的ntoskrnl导出下面这些函数:
LdrAccessResource LdrEnumResources LdrFindResourceDirectory_U LdrFindResource_U 手头没2000,不知道2000是不是也导出。 就算没有导出,直接用ntdll的应该也可以。 |
|
|
15楼#
发布于:2007-02-10 23:08
引用第14楼zzzevazzz于2007-02-10 22:00发表的“”: 导出了,不过用起来不如静态数组方便~ |
|
|
16楼#
发布于:2007-02-11 19:27
晕。静态数组只是自己的,LdrXxx可以访问别的模块啊。
|
|
|
17楼#
发布于:2007-02-12 00:00
引用第16楼zzzevazzz于2007-02-11 19:27发表的“”: 恩~没错~ |
|
|