首页
社区
课程
招聘
[求助]PE文件添加节写入可执行代码中LoadLibraryA失败
发表于: 2016-8-25 20:46 5712

[求助]PE文件添加节写入可执行代码中LoadLibraryA失败

2016-8-25 20:46
5712
写的代码是在目标EXE中添加了一个节,写入了自己的可执行代码,然后修改OEP,优先执行自己的代码,最后再跳回原OEP。
  自己的可执行代码,主要的功能是自己找到Ntdll的基地址,找到GetProcAddress函数。再找到LoadLibraryA函数,加载user32.dll。最后从user32.dll上找到MessageBox函数弹出来个窗口。
  但是代码在LoadLibraryA("user32.dll")这一步上就失败了,OD调试结果说是 0X0000007E错误,也就是找不到DLL。随后我尝试过把user32.dll拿出来在根目录下,用LoadLibraryExA来加载,返回了相同的错误。
  希望有大牛帮我解决下。
  PIS:前几天动手写这个前,在论坛搜到有人遇到跟我一样的问题。但是当时没有细看更没有保存,大家也可以帮我找找那贴。
  下面是 LoadLibraryA 和 LoadLibraryExA函数OD前后的调试界面,以及源码。(写入的代码我是靠VS帮我从C转换到汇编加上部分内嵌汇编,应该不会有啥影响吧)









EncryptPE.txt

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
你系统的LoadLibraryA居然在ntdll的?
2016-8-25 22:10
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最好看LdrLoadDll的返回值, 这个更加准确
2016-8-25 22:38
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
OD不是显示在Kernel32里吗
2016-8-25 23:08
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
直接调用LdrLoadDll吗?
2016-8-25 23:10
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
6
随便丢个砖块,它转圈都会很溜!
2016-8-26 01:12
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你就不能跟进LoadLibraryA去看看?
2016-8-29 20:17
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
8
我只想说 : 你直接 函数 BOOL InjectPE(CHAR* szFileName)  然后 汇编代码 + 变量定义 对吗?你定义的变量 在壳运行时 寻址是 [ebp - xxxx] 但是问题来了你的 壳代码 开辟 堆栈变量了吗?(没有的!)你这种代码已经破坏掉堆栈数据了! 加到 DLL 或驱动,100% 都死翘翘的! exe可能会出不可预知的问题! 去看看 http://bbs.pediy.com/showthread.php?t=173358  希望能对你有帮助! 碰巧我最近还在更新这方面代码。

哎! 寻找 Kernel32.dll 基地址也是一团糟!没有任何的兼容性,尽然还想兼容 Win64 的!

给你个思路: 你把 需要的壳代码 编译进 一个单独的 节里面,反正 你是往目标加一个节数据的,把整个 壳节代码 和壳需要的数据 移植进去,然后你只要取得你壳入口 的 RVA 并把 原来入口的 RVA备份到你知道的地方让壳程序容易找到就行了!
也许你现在还没有火候理解这样一个概念: “编译地址a - 运行地址a = 编译地址b - 运行地址b = 编译地址c - 运行地址c =......= 一个壳代码运行地址与壳代码的编译地址的差值(xx)” 想 用 C 写壳代码 理解它了,你就会觉得 用C 写壳代码太轻松了啊!
2016-8-29 21:31
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢赐教,确实这份代码写的很乱,我也还在学习阶段。至于兼容win64确实也只是想想。。。
2016-8-29 21:54
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=linziqingl;1442964]我只想说 : 你直接 函数 BOOL InjectPE(CHAR* szFileName)  然后 汇编代码 + 变量定义 对吗?你定义的变量 在壳运行时 寻址是 [ebp - xxxx] 但是问题来了你的 壳代码 开辟 堆栈变量了吗?(没有的!)你这种代码已经破坏掉堆栈数据了! 加到 DLL 或驱...[/QUOTE]

感谢解带,我去学习下您的代码。感谢您的回答,有问题再咨询你
2016-8-30 19:20
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
11
我曾经也是经过现在你的状态,因为曾经尝尽求学的痛苦和来之不易,过来人怜惜后来者,只要我懂的,你尽可以问!
2016-8-30 19:48
0
游客
登录 | 注册 方可回帖
返回
//