首页
社区
课程
招聘
[原创]用机器码执行的区别来区分32位和64位环境
发表于: 2021-7-19 17:46 15134

[原创]用机器码执行的区别来区分32位和64位环境

2021-7-19 17:46
15134

区分32位64位的一个小技巧

32位下跳转

image-20210719172323861

64位下不跳转

image-20210719172343318

这样在这个跳转指令下面放64位汇编,在跳转指令目的地放32位汇编,就可以分别处理32位与64位。

原理就是48这个机器码在32位下会被识别为dec eax,改变SF标志位导致跳转;而在64下则会被识别为64位操作数前缀(REX前缀),因此不跳转。

出处是gslab2020决赛ring0的Flag.fg,觉得有点意思就记录一下,和大家分享。

https://www.cs.uaf.edu/2016/fall/cs301/lecture/09_28_machinecode.html


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

最后于 2021-7-19 20:48 被危楼高百尺编辑 ,原因:
收藏
免费 6
支持
分享
最新回复 (18)
雪    币: 2325
活跃值: (2304)
能力值: ( LV6,RANK:89 )
在线值:
发帖
回帖
粉丝
2
2021-7-19 17:49
1
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这样就只能把机器码写死了
2021-7-19 20:07
0
雪    币: 1367
活跃值: (2121)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
yy虫子yy 这样就只能把机器码写死了
在shellcode里面用用感觉还可以
2021-7-19 20:16
0
雪    币: 3312
活跃值: (3913)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
64位才有rex指令前缀
2021-7-19 20:18
0
雪    币: 4752
活跃值: (2923)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
角度刁钻,666
2021-7-20 13:41
0
雪    币: 2644
活跃值: (5088)
能力值: ( LV9,RANK:225 )
在线值:
发帖
回帖
粉丝
7
学到了
2021-7-21 11:04
0
雪    币: 2296
活跃值: (6668)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
8
收藏加精
2021-7-21 11:47
0
雪    币: 1332
活跃值: (9481)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
9
学习
2021-7-22 15:16
0
雪    币: 9032
活跃值: (6250)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
sizeof(void*) 判断一下是4就32,是8就是64就好了。为毛那么奇怪的需求?????
2021-7-22 17:25
0
雪    币: 1367
活跃值: (2121)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11

sizeof(void*) 判断一下是4就32,是8就是64就好了。为毛那么奇怪的需求?????

没有,就是偶然看到了觉得有意思,就记录了一下,以后逆向看到了知道这是啥

最后于 2021-7-22 17:50 被危楼高百尺编辑 ,原因:
2021-7-22 17:43
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
执行64bit指令, 不发生异常就是64位
2021-7-22 17:51
0
雪    币: 3738
活跃值: (3872)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
如果没记错,当年hacking team泄露的资料里就有。
2021-7-26 09:36
0
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
啊这,我居然判断的 cs寄存器
2021-11-25 22:09
0
雪    币: 3227
活跃值: (2908)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
很久没看到过这些汇编小技巧了...
2021-11-26 00:09
0
雪    币: 7379
活跃值: (4086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
每天一个小技巧
2021-11-26 08:49
0
雪    币: 2428
活跃值: (2576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
mudebug sizeof(void*) 判断一下是4就32,是8就是64就好了。为毛那么奇怪的需求?????
区别大了去了。sizeof是依赖编译器的静态判断,又不是运行时判断。只要依赖编译器,就仍然要分开编译32位版和64位版。而运行时判断可以同时把32位机器码和64位机器码塞进一个二进制文件
2021-11-26 10:18
0
雪    币: 35761
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
@危楼高百尺
x64dbg中的脚本,如何去比较 机器码是否当前已知是机器码相同?
2021-11-26 10:59
0
雪    币: 2428
活跃值: (2576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
把48解析为dec eax还是rex前缀是由当前段选择子cs的cs.l决定的,cs.l==1就是64位环境,cs.l==0就是32位环境。这种技巧的本质就是借用48的解析方式反向推断cs.l也就是当前环境
2021-11-26 11:56
0
游客
登录 | 注册 方可回帖
返回
//