首页
社区
课程
招聘
有一段汇编看不懂.请各位看看
发表于: 2006-6-13 15:25 4359

有一段汇编看不懂.请各位看看

2006-6-13 15:25
4359
0B003D4E     0800          or byte ptr ds:[eax],al
0B003D50     3100          xor dword ptr ds:[eax],eax
0B003D52     3900          cmp dword ptr ds:[eax],eax
0B003D54     34 00         xor al,0
0B003D56     3900          cmp dword ptr ds:[eax],eax
0B003D58     3100          xor dword ptr ds:[eax],eax
0B003D5A     3000          xor byte ptr ds:[eax],al
0B003D5C     3100          xor dword ptr ds:[eax],eax
0B003D5E     0000          add byte ptr ds:[eax],al

这么一些都表示什么?有人能解析一下吗?谢过~


[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
1949 10 1
国庆的说
2006-6-13 15:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
说说原理好吗?
2006-6-13 17:30
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
这个没有什么原理可说
学会用od可以少懂一些汇编代码,但基本的意思还是要记的
or是或运算,
xor是异或运算
cmp 是比较运算
xor dword ptr ds:[eax],eax
的意思是将地址eax里面的内容与eax做比较异或运算
至于这三种运算到底怎么算的我也记不清,你在od调试器里面看看结果就明白啦
2006-6-13 17:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵 偶也不懂
也想知道  是什么意思
2006-6-13 17:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
明白了.就是汇编语言太菜了...学习去..谢谢~
2006-6-13 17:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵 偶也不懂
也想知道  是什么意思
2006-6-13 17:47
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可以这样理解
0B003D4E     0800          or byte ptr ds:[eax],al
0B003D50     3100          xor dword ptr ds:[eax],eax
0B003D52     3900          cmp dword ptr ds:[eax],eax;这一句没用
0B003D54     34 00         xor al,0;任何数与0异域都不变所以可以去掉该句
0B003D56     3900          cmp dword ptr ds:[eax],eax;这一句也没用
0B003D58     3100          xor dword ptr ds:[eax],eax
0B003D5A     3000          xor byte ptr ds:[eax],al
0B003D5C     3100          xor dword ptr ds:[eax],eax
0B003D5E     0000          add byte ptr ds:[eax],al
于是变成
0B003D4E     0800          or byte ptr ds:[eax],al

0B003D50     3100          xor dword ptr ds:[eax],eax;这两个语句是异域的
0B003D58     3100          xor dword ptr ds:[eax],eax;异域也没改变结果也可以去掉

0B003D5A     3000          xor byte ptr ds:[eax],al
0B003D5C     3100          xor dword ptr ds:[eax],eax
0B003D5E     0000          add byte ptr ds:[eax],al
变成
0B003D4E     0800          or byte ptr ds:[eax],al
0B003D5A     3000          xor byte ptr ds:[eax],al
0B003D5C     3100          xor dword ptr ds:[eax],eax
0B003D5E     0000          add byte ptr ds:[eax],al
程序的结果和EAX指向的地址有关
2006-6-15 12:36
0
雪    币: 1325
活跃值: (507)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
9
堀北说的很明白了啊,这段不是汇编代码而是UNICODE字符串:
1949 10 1

楼主不会是跟大家开玩笑吧,瞧你给出的汇编代码,恰好是一个字符串,多整齐,呵呵.

08 00 31 00 39 00 34 00 39 00 31 00 30 00 31 00 00 00
      '1'   '9'   '4'   '9'   '1'   '0'   '1'
2006-6-15 13:00
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
最初由 dreaman 发布
堀北说的很明白了啊,这段不是汇编代码而是UNICODE字符串:
1949 10 1

楼主不会是跟大家开玩笑吧,瞧你给出的汇编代码,恰好是一个字符串,多整齐,呵呵.

........

不懂,学习
2006-6-15 13:10
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
任何的猜测都是不可取的,在没有上下文联系的情况下,我只能理解为程序
不然的话,所有的程序都失去了意义
理解的不同就会有不同的答案,关键是看答案的意义是否合理
2006-6-15 13:16
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
12
当做字符串来理解是一个Unicode字符串
前面两个字节刚好是字符串的长度8

当做代码来理解,keywords真是分析的好。原理如下:

(1)

xor eax, eax
结果为零

or eax, eax
结果不变

xor eax, 0
or  eax, 0
任何数与0异或都是原来的数
任何数与0同或都是原来的数

(2)
一个不紧跟跳转语句的判断语句是没有多少意义的

(1) 移去cmp

0B003D4E     0800          or byte ptr ds:[eax],al
0B003D50     3100          xor dword ptr ds:[eax],eax
0B003D54     34 00         xor al,0
0B003D58     3100          xor dword ptr ds:[eax],eax
0B003D5A     3000          xor byte ptr ds:[eax],al
0B003D5C     3100          xor dword ptr ds:[eax],eax
0B003D5E     0000          add byte ptr ds:[eax],al

(2) 移去xor al, 0

0B003D4E     0800          or byte ptr ds:[eax],al
0B003D50     3100          xor dword ptr ds:[eax],eax
0B003D58     3100          xor dword ptr ds:[eax],eax
0B003D5A     3000          xor byte ptr ds:[eax],al
0B003D5C     3100          xor dword ptr ds:[eax],eax
0B003D5E     0000          add byte ptr ds:[eax],al

(3) 移去重复和多余的

0B003D4E     0800          or byte ptr ds:[eax],al
0B003D50     3100          xor dword ptr ds:[eax],eax
0B003D5E     0000          add byte ptr ds:[eax],al

结果还是不知道是什么个怪东西。
2006-6-16 20:27
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
如果地址指向的是0040开头的数据可以用做大小写的变换,至于程序究竟用他来做什么,我也不知道
2006-6-16 23:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
非常感谢各位详细的分析.

2006-6-18 04:28
0
游客
登录 | 注册 方可回帖
返回
//