社区
汇编语言
帖子详情
关于向PE文件插入代码
lmxd70
2008-12-10 09:56:31
罗云彬的教程上有一个在PE文件中插入代码的例子,可是当向一些PE文件中插入的时候显示正确插入了(这个程序只是向目标程序的代码节中插入,如果没有空间就会退出,如果成功则创建一个新文件,其中就包含了插入的代码),但新生成的那个文件不正确,反编译后里面只有一些信息,没有代码。我看了看,好像是目标程序有资源文件的时候能插入成功,没有资源文件就不行。这是怎么回事?
...全文
360
7
打赏
收藏
关于向PE文件插入代码
罗云彬的教程上有一个在PE文件中插入代码的例子,可是当向一些PE文件中插入的时候显示正确插入了(这个程序只是向目标程序的代码节中插入,如果没有空间就会退出,如果成功则创建一个新文件,其中就包含了插入的代码),但新生成的那个文件不正确,反编译后里面只有一些信息,没有代码。我看了看,好像是目标程序有资源文件的时候能插入成功,没有资源文件就不行。这是怎么回事?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lmxd70
2008-12-11
打赏
举报
回复
已经发了,多谢~
killbug2004
2008-12-11
打赏
举报
回复
要不把代码和程序发到我邮箱killbug2004@gmail.com看看,这种情况很难判断
lmxd70
2008-12-11
打赏
举报
回复
先谢谢各位热心帮助,呵呵
不过killbug2004说有壳,但是我选的目标程序就是书中原来的例子,比如第一个窗口程序,没有资源,而且我都是用masmplus编译的,应该不存在壳的情况。
killbug2004
2008-12-11
打赏
举报
回复
插入代码时先判断是否有空间在pe头中插入节表,有空间插入节表就添加节表并将代码写入新添加的节中
没有空间添加节表就会判断代码节末尾是否存在为零的空间来插入代码,不过程序有个问题是,对待常规程序,也就是由编译器生成的程序应该没什么问题,而对待如加过壳的程序就可能会出错。
原因:因为这里对代码节的判断是依据节是否具有IMAGE_SCN_MEM_EXECUTE可执行的属性,把第一个拥有IMAGE_SCN_MEM_EXECUTE属性的节就认定为代码节,对于处理过的程序采用这种方法是不可靠的,因为有些压缩壳会修改程序的节最初的属性,比如压缩了资源,在壳的loader中对资源节进行解压,这时为了方便直接将所有节的属性都修改为可读可写可执行,而导致这个程序判断代码节时出错。
lmxd70
2008-12-11
打赏
举报
回复
哦,是这样啊,明白了
谢谢!
以后还要多多学习~~
xiaopoy
2008-12-11
打赏
举报
回复
罗云逼的?
自己猜测,他该是在入口点hook了,并把插入的code写入修改了属性的资源段里面,没有资源段时无处可写了,自然是错误了.
反编译后是有code的,没有看到而已,切到原程序的入口点处看看.
killbug2004
2008-12-11
打赏
举报
回复
firstwindow.exe最后一个节.data是为未初始化数据提供空间的节,故PE磁盘文件中该节不包含数据,节的Raw大小和Raw偏移均为0,而在.data节后面再插入一个节,程序里面要使用这两个数据来计算新添加节Raw的大小和Raw文件偏移,得出的结果都出错了,插入的新节Raw的偏移成了0,Raw大小为插入代码的大小,这样插入节的代码写到了PE文件头的位置,程序根据插入节代码结束的位置设置新文件的长度,故此时新文件的长度变成的代码节长度,最后写入更新的文件头就成了最后看到的结果,只有头没有代码
PE
头的应用---
插入
代码
到EXE或DLL
文件
中
三、
代码
实现(DELPHI版本),采用第三种方式实现
代码
插入
。 1. 定义两个类,一个用来实现在内存中建立输入表;一个用来实现对
PE
头的
代码
插入
。DelphiCode: const MAX_SECTION_NUM = 20;const DYN_
PE
头的应用---
插入
代码
到EXE或DLL
文件
中(DELPHI版本)
一、
PE
头原理请看我的另一篇笔记:http://blog.csdn.net/A00553344/archive/2007/12/13/1933320.aspx二、
插入
代码
到EXE
文件
或DLL
文件
的原理请看我的另一篇笔记:http://blog.csdn.net/A00553344/archive/2007/12/17/1944491.aspx三、
代码
实现(DELPHI版本),采用第
java程序是否有有
pe
头吗_
PE
头的应用---
插入
代码
到EXE或DLL
文件
中
implementationuses
PE
Init;//被用来
插入
的
代码
单元const szWindowsAPIs : array[0..10] of string = ('Kernel32.dll','GetModuleHandleA','VirtualProtect','GetModuleFileNameA','CreateFileA','GlobalAlloc','','User32.dll...
PE
线程附加
网上此类
代码
很多,不过大多都是在
文件
最后增加一个节,并改变
PE
文件
的入口地址来达到目的。(当然这也是最经典的方式!)不过这个方法也有它的不足之处,那就是怕
文件
头没有地方再新增节表了。所以俺更喜欢把
代码
插入
PE
文件
的空隙(浪费资源可耻啊!),如果空隙不够的话就增加最后一个节的长度(因为现在很多软件都加了壳,基本上没有什么空隙),呵呵。修改后的
PE
文件
会加载同目录下的Add.dll
文件
!源
代码
如下,写
深入剖析
PE
文件
PE
文件
是Win32的原生
文件
格式.每一个Win32可执行
文件
都遵循
PE
文件
格式.对
PE
文件
格式的了解可以加深你对Win32系统的深入理解. 一、基本结构。 上图便是
PE
文件
的基本结构。(注意:DOS MZ Header和部分
PE
header的大小是不变的;DOS stub部分的大小是可变的。) 一个
PE
文件
至少需要两个Section,一个是存...
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章