首页
社区
课程
招聘
[求助]前一条指令在哪?可以这样跟踪不?
发表于: 2012-11-23 13:18 5387

[求助]前一条指令在哪?可以这样跟踪不?

2012-11-23 13:18
5387
跟踪一个易程序,bp exitprocess
来到 exe 领空
00424DA0   55               PUSH EBP                                 ; //退出
00424DA1   8BEC             MOV EBP,ESP
00424DA3   8B45 08          MOV EAX,DWORD PTR SS:[EBP+0x8]
00424DA6   50               PUSH EAX
00424DA7   B9 204F5C00      MOV ECX,exe.005C4F20
00424DAC   E8 6F86FFFF      CALL exe.0041D420
00424DB1   8B4D 08          MOV ECX,DWORD PTR SS:[EBP+0x8]
00424DB4   51               PUSH ECX
00424DB5   FF15 D4624700    CALL DWORD PTR DS:[<&KERNEL32.ExitProces>; kernel32.ExitProcess
00424DBB   5D               POP EBP
00424DBC   C3               RETN

都不知  00424da0前一句的指令是什么,堆栈中找不到,alt+k也找不到。

想用run跟踪,运行中断后,打开跟踪,设置条件(ctrl+t) 让eip在exe领空,跟踪也没有记录。不知道这样设置跟踪方法对不对?

菜鸟,不好意思。
也不知道发在这里合适不,见谅。

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不好意思,实在没看明白;
2012-11-23 14:42
0
雪    币: 168
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
恩,菜得没办法。问题都描述不清。

再来一遍,
执行到 00424DA0   55               PUSH EBP                                 ; //退出
我想知道前面一句的指令,上面好几行都是int 3

不知道用run 跟踪可以查到 打印出 cpu执行序列不?

因为是易语言写的程序,分析不出语法,所以RUN追踪没有 “添加所有函数入口”和"添加选定代码",那么我的想法就是在条件里添加 401000<EIP <40feff,希望能把这里的所有执行的指令全部记录下来,查看之,分析之。

理论是调试应该有这个功能,但是我不会用,所以来发贴请教。

谢谢。
2012-11-23 15:38
0
雪    币: 61
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看明白了,你只是想看push EBP的 上一条指令是吧?  这是个函数,你要看上一条指令,那么意思就是要找调用这个函数的代码。有两种方法,一种是假如你是断点断在这里i的,那么  ctr+f9  执行到返回,第二种,你不想继续执行,只想看代码,那么 就在寄存器窗口看ebp的值,  然后 查看[ebp + 4]出的值, 因为上层函数调用这个和函数的时候 call XXX  的时候会把下条指令的地址压栈,而在你当前这个函数里面,就放在[ebp + 4]的地方。你取出这个地址以后  ctr + g    到这个地址。。就能看到了 。。。不过着实不懂 你要看它前面的指令 有什么意义
2012-11-23 16:06
0
雪    币: 168
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=TzdnerC;1120308]看明白了,你只是想看push EBP的 上一条指令是吧?  这是个函数,你要看上一条指令,那么意思就是要找调用这个函数的代码。有两种方法,一种是假如你是断点断在这里i的,那么  ctr+f9  执行到返回,第二种,你不想继续执行,只想看代码,那么 就在寄存器窗口看ebp的值,  然后 查看[ebp ...[/QUOTE]

感谢你的回答,其实在堆栈中没有上条指令。也找不着,所以我想通过exitprocess向上回溯,故想通过run跟踪的办法,但可能是我的跟踪方法不对,或都OD里没有这种办法吗?

谢谢。

假如举这么个例子:

asm
  jmp @exit;//1
  jmp @exit; //2
  int 3;nop;....
@exit: call exitprocess
end
怎知道是从1还是2跳到 @exit呢?
2012-11-23 18:26
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我是只小菜鸟,但是很想帮助楼主。
是用OD么?如果是,好像OD里面可以在函数上面右键,查找,所有引用来看到对该函数的调用处,一个个下断点就再运行就知道了。
还有就是OD如果在一个地方下断点的话,那么断点触发的时候,EIP指向的不是断点位置,而是前面一个指令地址。那么可以在上面的@exit处下断点,再看EIP就知道是哪里跳过来的了。不过这个是本人凭印象的,因为现在在图书馆没法尝试OD……
说的不对的话,望谅解:)
另祝楼主好运:)
2012-11-24 09:59
0
雪    币: 168
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
EIP是当前指令吧。

我学习逆向也是三天打渔两天晒网,脑子不好苦了一辈子啊。

不知有没有别的方法,run跟踪似乎不行。 假如把这些指令放到一个代理(虚拟机?)中执行,然后逆向追踪呢?

高手们看着不要笑啊,小女子想想而已。
2012-11-25 01:28
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
int3 上面就是调用者jmp @exit,OD找到jmp @exit 断下,然后看到堆栈返回的地方,就是调用这个jmp @exit的地方
2012-11-25 01:57
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
貌似他研究的对象为vmp
2012-11-25 11:51
0
雪    币: 168
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
可能你说对了。

算了,不弄了,打毛线去算了。

打毛线不需要逆向。
2012-11-26 15:34
0
游客
登录 | 注册 方可回帖
返回
//