首页
社区
课程
招聘
[旧帖] [求助]OD调试中断在kifastsystemcallret 0.00雪花
发表于: 2009-11-23 09:57 18825

[旧帖] [求助]OD调试中断在kifastsystemcallret 0.00雪花

2009-11-23 09:57
18825
我用OD打开exe文件后直接中断在kiFastSystemCallRet,
   请问是怎么回事
   谢谢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
把你的exe传上来看看,
一般用OD打开exe后,ntdll.KiFastSystemCallRet地址保存在edx寄存器里面
上传的附件:
  • 1.PNG (19.29kb,319次下载)
2009-11-23 12:02
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我用OD打开程序后的界面如下
上传的附件:
2009-11-23 15:12
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

EIP指向KiFastSystemCallRet...看你给的信息,应该是程序出错被系统终止(暂停)进程(ZwTerminateProcess)后调用KiFastSystemCallRet的,
你这是用OD附加进程的吧?一般用OD附加进程后会断在ntdll.DbgBreakPoint上,Alt+F9后EIP就指向KiFastSystemCallRet了,跟你上述情况一样
2009-11-23 16:35
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
驱动,OD没法调试;
非PE文件,OD打不开,
那你程序入口点怎么落在内核ntdll里呢,答案只有一个,就是你用OD附加在一个正在运行的进程上,使进程中断在ntdll.DbgBreakPoint,然后Alt+F9就回到ntdll.KiFastSystemCallRet了...我是这么理解的...
2009-11-23 16:48
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢追风傲雪的回答。
我是用OD直接打开该EXE文件后就出现上面我给的图中的情况,不是先运行EXE文件后用OD附加进程。
我要如何才能解决这个问题而进入要调试的程序领空。
PS:有没有可能是该程序有反调试而出现这种情况呢?我用附加进程的方法调试时程序直接退出了。
2009-11-23 17:01
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
方便把程序上传来看看吗?难道真是反调试... 你试用IDA静态反汇编看看,看看它的程序入口点在哪
2009-11-23 17:05
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
2楼的正解..

呵呵..
2009-11-24 12:26
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我用HideOD插件,现在可以进入要调试的程序,
直接遇到的代码是jmp  addr,
但我在这里一按F7就进入ntdll.7C92E480.
ntdll.7C92E47C开始是KiUserExceptionDispatcher函数,
请问这又可能是什么原因呢?
2009-11-26 09:33
0
雪    币: 2513
活跃值: (545)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
进入异常分发函数了
2009-11-26 09:53
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
是的,我在调试选项里把异常选项卡里设置不忽略任何异常后可以正常执行了。
但是遇到指令xchg  dword ptr [ebx],ebp时,epb=0012F9C0,ds:[00000000]=???.
这个问题又要如何解决呢?
2009-11-26 10:12
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
截图上来看看执行到xchg  dword ptr [ebx], ebp的时候,各寄存器和堆栈的情况
2009-11-26 10:29
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13


PS:ds:[00000000]=???是不是内存非法访问了,为什么会出现这种情况?
上传的附件:
2009-11-26 11:10
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
2楼正解   。。。。进入寄存器
2009-11-26 11:25
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
xchg  dword ptr [ebx], ebp指令是把ebx与ebp寄存器的数据对换
你把ebx的值00000000赋给ebp?系统会把00000000当作一个指针赋给栈基址指针,在任何情况下访问地址00000000都是违规的!
2009-11-26 12:49
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
根据程序指令推测,在你执行到xchg  dword ptr [ebx], ebp时,ebx的值应该为0012FXXX(必须处于堆栈段)才对
2009-11-26 13:03
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
刚才跟踪了发现ebx是在ntdll.RtlCreateHeap函数的xor ebx,ebx中被置为0,之前ebx=77BEF2A1.
RtlCreateHeap函数:


PS:程序还没执行到外壳的入口点…
上传的附件:
2009-11-26 15:07
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
根据你上面提供的图片,你程序运行到这里已经进入异常处理机制了,想要找到程序入口点,还得往上找 触发异常的地方
2009-11-26 16:48
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
“还得往上找 触发异常的地方”
你是指已经过了程序的入口点吗 ?可是我对.data和.rsrc段设断点,这两个段都没有被访问。
2009-11-26 17:30
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不是已经过了程序入口点,你现在还是处于“外壳”中,还没到真正的程序入口点...
在外壳程序里被外壳程序检验你现在正在调试它,因而引发异常,让程序退出
(以上只是个人观点)
2009-11-26 17:35
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
進寄存器了啦
2009-11-26 17:49
0
游客
登录 | 注册 方可回帖
返回
//