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

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

2021-7-19 17:46
13981

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

1
31 C0 48 0F 88

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


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-7-19 20:48 被危楼高百尺编辑 ,原因:
收藏
点赞3
打赏
分享
最新回复 (18)
雪    币: 2251
活跃值: (2148)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
LexSafe 2021-7-19 17:49
2
1
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luskyc 2021-7-19 20:07
3
0
这样就只能把机器码写死了
雪    币: 1367
活跃值: (2121)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
危楼高百尺 1 2021-7-19 20:16
4
0
yy虫子yy 这样就只能把机器码写死了
在shellcode里面用用感觉还可以
雪    币: 2666
活跃值: (3292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Mr.hack 2021-7-19 20:18
5
0
64位才有rex指令前缀
雪    币: 4752
活跃值: (2923)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
LeadroyaL 1 2021-7-20 13:41
6
0
角度刁钻,666
雪    币: 1460
活跃值: (4267)
能力值: ( LV9,RANK:195 )
在线值:
发帖
回帖
粉丝
天水姜伯约 4 2021-7-21 11:04
7
0
学到了
雪    币: 4024
活跃值: (5843)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
fjqisba 2021-7-21 11:47
8
0
收藏加精
雪    币: 1331
活跃值: (9456)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
erfze 12 2021-7-22 15:16
9
0
学习
雪    币: 8092
活跃值: (5275)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mudebug 2021-7-22 17:25
10
0
sizeof(void*) 判断一下是4就32,是8就是64就好了。为毛那么奇怪的需求?????
雪    币: 1367
活跃值: (2121)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
危楼高百尺 1 2021-7-22 17:43
11
0

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

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

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