首页
社区
课程
招聘
[旧帖] [求助]可能问题有点菜 0.00雪花
发表于: 2009-8-6 00:25 1431

[旧帖] [求助]可能问题有点菜 0.00雪花

2009-8-6 00:25
1431
问个问题
我用OD查找表达式 如64d731 能找到 我想看它上边的代码 可是以改变位置 这个地址就消失了 显示成64d730的一个表达式了 且长度大于2 刚好覆盖住64d731
如果我想查看64d731之前的该如何查看(切不想让64d731被改变)??

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你这样问问题,估计很少有人能够回答你,因为我们根本就不知道你在说什么,至少要有你正在查看的文件(.exe)才行嘛!
2009-8-6 09:40
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感觉没必要。首先,2个地址的代码你都看得到
            其次,首先你要判断是你自己的问题还是代码的问题

LZ究竟要知道什么呢?
2009-8-6 10:19
0
雪    币: 98
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼上两位
是这样 我单步到一个retn 返回到程序空间的0064D731
单步进入 显示
0064D731    68 5877F4CB     push CBF47758

我想看0064D731 上边的代码找call
但是我一向上看 就变成
0064D72F    236B 68         and ebp,dword ptr ds:[ebx+68]
0064D732    58              pop eax

我想知道 这是怎么回事 哪个正确 应该怎么看
2009-8-6 10:47
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
求解  高手快来
2009-8-6 15:47
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
引用“但是我一向上看 就变成
0064D72F    236B 68         and ebp,dword ptr ds:[ebx+68]
0064D732    58              pop eax   ”
这种原因一个可能就是      0064D730以及前几个机器码是花指令。(我自己的代码加入了一些花指令就会出现这样的情况。)
当你运行到
0064D731    68 5877F4CB     push CBF47758
的时候,这个代码是真的。而且应该是变成OD中反汇编代码窗口的第一行代码。
你要往上看,那么就变成楼主说的那样了,闪一下 0064D731的代码就变花了。

因为是花指令,所以0064D730(包括以上N个指令)处的代码不会运行的。你非要看,反而被误导。

虽然我也是个菜鸟加新手,但是看着不少新手被花指令迷惑说明
基本的汇编语言需要加强学习,尤其应该看一看没加壳的正常软件反汇编后的代码是什么样的。
2009-8-6 16:11
0
雪    币: 159
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
假设程序这么执行的:
Call A
x1...
...
...
...
0064D72F    236B 68         and ebp,dword ptr ds:[ebx+68]
0064D732    58              pop eax
label1:
0064D731    68 5877F4CB     push CBF47758
A proc
   ....  ;刚进来的时候[esp + 4]是x1处,也就是ret后的返回地址,应该返回到call后
   mov [esp + 4], offset label1;假设中途有个这种操作,通过堆栈这里改了返回地址
   ....
   ret ;
A endp

就有可能出现这种情况了,代码随便写的,只提供一个思路。要看他中途是否动过返回地址。
也有可能是楼上说的花指令的情况,具体要看反汇编代码
2009-8-6 16:13
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
7楼说的正确,我本想写下这个可能。tufuzi说的可能有点不太好懂。
给汇编不熟的新手简单说明下,tufuzi的代码可以写成:
    push  offset  label1 ;相当于mov [esp + 4], offset label1
    .......                        ;这里要保证堆栈平衡,也可以没有任何代码。
    ret
label1:
    ........

      上面的代码意思就是跳到label1处执行。这个例子告诉我们看到 ret不一定前面有call
2009-8-6 16:30
0
雪    币: 93
活跃值: (55)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
有可能是加壳了。
我脱ASPack2.12时遇到过类似情况,你可以找找脱壳的教程。

看看有没有经过这样一个call(伪代码):

//call begin
  pop eax
  inc eax
  push eax
  retn
//call end

经过这样一个call后,od里显示的代码就可能有问题了。

不过我不知道解决方法,只能建议你查查ASPack的资料。

记得有篇讲广义ESP定律的文章说到过。
2009-8-6 16:30
0
雪    币: 159
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=怀特迈恩;667221]7楼说的正确,我本想写下这个可能。tufuzi说的可能有点不太好懂。
给汇编不熟的新手简单说明下,tufuzi的代码可以写成:
    push  offset  label1 ;相当于mov [esp + 4], offset label1
    .......              ...[/QUOTE]

其实我先也准备写push的,不过脑袋还在想那inline hook就给忘记了
2009-8-6 16:35
0
雪    币: 98
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢 大家 我现在有个思路了
2009-8-6 19:32
0
雪    币: 93
活跃值: (55)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
12
使用Ctrl+Shift+上键Ctrl+Shift+下键应该可以
2009-8-7 22:54
0
游客
登录 | 注册 方可回帖
返回
//