首页
社区
课程
招聘
未解决 [求助]win10 64位 pe 文件, 向代码节空白区添加 messagebox 怎么弄
发表于: 2020-3-9 18:05 2727

未解决 [求助]win10 64位 pe 文件, 向代码节空白区添加 messagebox 怎么弄

2020-3-9 18:05
2727

内容太长可能没人看, 总结为两个问题:1) 怎么计算 64位下的 E8 后面的地址? 2) 为什么 64 程序的 E8 后面地址也是4字节, 不应该是8字节吗?

--------------------------------

看滴水三期的视频,按照视频步骤走。

win10 中 messageboxA 的地址是:0x00007FF8098B1CD0;

ultraedit 手动解析 guessing_game.exe(我用 rust 写的一个小程序)

解析出 opt header 中的 ImageBase: 140000000

一个节表,

Misc.VirtualSize: 42218,

VirtualAddress: 1000,

PointerToRawData: 400,

SizeOfRawData: 42400

可以得出 从 400 开始 到 42618(400 + 42218) 都是原本的代码,

从 42618 到 42800(400 + 42400) 都是空白区.

代码就从 42618 开始加


分析 E8, E9 在 image buffer 中的地址

ultraedit 中, 42618 开始, 加入

`6A 00 6A 00 6A 00 6A 00 E8 00 00 00 00 E9 00 00 00 00`


E8 指令的下一行地址就是 +5; E9 那个位置: 42625


计算 E9 那个位置在 image buffer 中的偏移.

(1) 42625 相对第一个节的偏移是 42625 - 400 = 42225

(2) image buffer 中, 第一个节偏移是 1000

(3) 那么 E9 所在位置在 image buffer 中的偏移, 就是 1000 + 42225 = 43225

(4) 所以, "E8 下一行指令的地址" = ImageBase + 43225 = 140043225

(5) 所以, x = 0x00007FF8098B1CD0 - 0x140043225 = 0x00007ff6c986eaab; 


这是结果不对啊...e8 后面需要4个字节, x 算出来8个字节宽度。

没法继续下去了,怎么办,哪里有问题?


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

最后于 2020-3-11 16:50 被mb_utkwwmjb编辑 ,原因: 提炼问题
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 498
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
讲的是x86
2020-3-10 08:58
0
雪    币: 174
活跃值: (181)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
我来解答下把, 1.你看看你操作的程序是不是32位的,可以用PE查看工具看看  2.看你说的,应该就是视频上演示的是x86(32位)的程序,而你操作的是 64(x64)的程序, 3.如果第二条不对就是你在算地址的时候 可能是按照QWORD计算的, 更改为DWORD计算。
2020-3-10 09:16
0
雪    币: 194
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
IBinary 我来解答下把, 1.你看看你操作的程序是不是32位的,可以用PE查看工具看看 2.看你说的,应该就是视频上演示的是x86(32位)的程序,而你操作的是 64(x64)的程序, 3.如果第二条不对就是 ...
@LBinary 32位的已经会操作, 所以我想试试64的pe文件能不能成功。64位pe EntryPoint 是8字节的, messagebox 地址也是8字节的,没法用 dword 算啊
2020-3-11 16:35
0
雪    币: 194
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
寻她梦 讲的是x86
我知道讲的是 x86, 我想扩展到x64. 前面几节课的内容(打印 pe 文件信息、file buffer 转 image buffer)我也是用64位 pe 文件练的, 没什么问题.  但是 messagebox 死活加不进去. 有什么办法?
2020-3-11 16:43
0
雪    币: 174
活跃值: (181)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
mb_utkwwmjb 我知道讲的是 x86, 我想扩展到x64. 前面几节课的内容(打印 pe 文件信息、file buffer 转 image buffer)我也是用64位 pe 文件练的, 没什么问题. 但是 mes ...
64的你可以用计算机的 QWORD计算呀....
2020-3-11 17:28
0
雪    币: 174
活跃值: (181)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
mb_utkwwmjb @LBinary 32位的已经会操作, 所以我想试试64的pe文件能不能成功。64位pe EntryPoint 是8字节的, messagebox 地址也是8字节的,没法用 dword 算啊
明白了,你意思是 1.要么就是QWORD没计算好.  2.就是x86跟x64不同,举个例子,比如hook, hook的话 x86下可以利用偏移的方式, x64下不在一个4GB了,就不能用这个偏移了.是这个意思吗.
2020-3-11 17:30
0
雪    币: 251
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
E8 call指令只有32位偏移, 64这样用可能没法用, 
可以换个方式, 如x64使用导入表的方式  FF15 的方式
也可以 
mov rax, xxx
call  rax  
2020-3-13 15:19
0
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
帮顶
2020-3-13 18:08
1
游客
登录 | 注册 方可回帖
返回
//