首页
社区
课程
招聘
[求助]如何自己写个程序,给某个EXE下断点,
2008-12-13 13:47 6080

[求助]如何自己写个程序,给某个EXE下断点,

2008-12-13 13:47
6080
如何自己用C写个程序,给某个EXE下断点,
1.如何下断点,是指令 int 3 (CC) 吗?
2.如何知道程序运行到了断点处?程序处理后还要恢复,继续运行下去的。

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

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 2071
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 4 2008-12-13 13:57
2
0
123456
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
萧泪血 2008-12-13 20:51
3
0
将要中断地方的指令修改成int 3.并且将原来的机器吗保存起来。
当程序运行到int 3时,自动中断下来。
OD就是这么工作的。
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
bujin888 4 2008-12-13 20:54
4
0
前提是你自己的程序需要使用一套的调试指令 让程序中断到调试环境里
不然 直接写CC 程序会死掉
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2008-12-13 21:26
5
0
用带有DEBUG_PROCESS标志的参数去调用CreateProcess,新创建的进程就以你的进程为调试器。在发生异常时,操作系统会首先通知调试器,调试器可以选择处理异常,或交给子进程自行处理,如果子进程的SEH链没有找到异常处理函数,则调试器会再得到一个通知。

这便是Win32调试器的基本原理,OD也是一样。

下断点的一般方法就是用0XCC替换原来的指令,当程序执行这条指令时便会引发一个“调试断点异常”,调试器便得到处理异常的控制权。进行完必要的操作,要让程序继续执行,就把原来的指令字节写回,然后ContinueDebugEvent即可。
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
apollone 2008-12-14 13:01
6
0
网上找到一段程序

        DEBUG_EVENT   DBEvent;
        STARTUPINFO   sif={0};
        sif.cb=sizeof(sif);
        PROCESS_INFORMATION   pi={0};
       
        BOOL   STOP=0;

        CreateProcess(NULL, _T("notepad.exe"),NULL,NULL,NULL,
                DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&sif,&pi);
        do{
                WaitForDebugEvent(&DBEvent,INFINITE);
                DWORD   dwState=DBG_EXCEPTION_NOT_HANDLED;
        switch(DBEvent.dwDebugEventCode)
        {
                case   EXCEPTION_DEBUG_EVENT:
                        {
                                switch(DBEvent.u.Exception.ExceptionRecord.ExceptionCode)
                                {
                                case     EXCEPTION_BREAKPOINT:
                                        {
//是不是在这里处理?
                                                dwState=DBG_CONTINUE;
                                                break;
                                        }
                                }                 
                                break;
                        }
                case   EXIT_PROCESS_DEBUG_EVENT:
                        {   
                                STOP=TRUE;
                                break;
                        }
        }                  
                if(!STOP)
                {ContinueDebugEvent(pi.dwProcessId,pi.dwThreadId,dwState);}
        }while(!STOP);
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
skylly 4 2008-12-15 08:43
7
0
看下一块三毛钱的那篇精华。
雪    币: 211
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Tase 1 2008-12-15 12:56
8
0
如果是下一个条件断点如何去做呢?

例如我在CreateFile 函数上下一个断点,也就是说原理上将函数入口的机器码改成int 3,这个动作可以在程序加载完后实现,但断点事件发生后,我根据参数判断是否满足我的断点条件,满足当然好办,将int 3恢复成保存的机器码,但如何不满足,继续运行那么恢复后的机器码什么时候再修改成 int 3呢?
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snailxp 2008-12-15 12:58
9
0
if语句可以
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
blackboy 2008-12-16 18:51
10
0
网上有很多Loader模板,仔细研究看看就明白了
雪    币: 204
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rekingchai 2008-12-16 19:31
11
0
强,学习一下~~
游客
登录 | 注册 方可回帖
返回