首页
社区
课程
招聘
[求助]远程线程注入dll,dll中JMP目标函数,但dll中必须有MessageBox,否则不成功,为什么?
发表于: 2012-12-26 16:47 6329

[求助]远程线程注入dll,dll中JMP目标函数,但dll中必须有MessageBox,否则不成功,为什么?

2012-12-26 16:47
6329
远程线程注入dll,dll中JMP目标函数,但dll中必须有MessageBox,否则不成功,为什么?

        switch (ul_reason_for_call)
        {
            case DLL_PROCESS_ATTACH:
                               
                JMP目标函数();
                MessageBoxW(NULL,L"为什么一定要存在,否则不成功", L"hook",0 );
                break;
            
                ……
          }

没有这句MessageBoxW,就不成功

=======================================

我重新又尝试了几次,终于发现其实不加MessageBox,jmp目标函数()也是成功的,但jmp目标函数()中的用于表示成功的MessageBox被系统自动处理掉了(大概当异常给throw了)。
         我想jmp目标函数()中只要和界面有关系的操作都会给throw。但有没有人能告诉我,为什么在前面加了一个MessageBox(dll加载时,主动调用),是不是系统自动为这个线程加了些什么,使之后能成功调用MessageBox(调用者是被hook的目标程序,被动调用)了?
        MessageBox主动调用——成功
        MessageBox被动调用——失败

==========================================
过了半个多月,差不多把这个问题忘了,毕竟除了MessageBox弹不出对话框,其他都正常。

今天突然又想到一个可能性——MessageBoxW的第一参数我用的是null,一般情况正常,但如果多线程可能就会有问题了

也不知道是不是这个原因?

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
被hook的程序是用CreateProcessW启动,并挂起
2012-12-26 16:53
0
雪    币: 1157
活跃值: (847)
能力值: ( LV8,RANK:150 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=kankan山石;1128661]远程线程注入dll,dll中JMP目标函数,但dll中必须有MessageBox,否则不成功,为什么?

        switch (ul_reason_for_call)
        {
            case DLL_PROCESS_ATTACH:
                               
                JMP目标函数();
                M...[/QUOTE]


肯定是这里的问题,跟有没有MessageBox肯定没有关系,把你的jmp目标函数();代码拿上来
2012-12-26 17:06
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果jmp目标函数()有问题,那加一个MessageBox怎么就成功了?

目标程序是多线程
2012-12-27 12:33
0
雪    币: 3020
活跃值: (3065)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
如果是这样的话,说明Hook环境没考虑好~
2012-12-27 12:44
0
雪    币: 303
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
跳走了怎么跳回来的。
2012-12-27 13:03
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我重新又尝试了几次,终于发现其实不加MessageBox,jmp目标函数()也是成功的,但jmp目标函数()中的用于表示成功的MessageBox被系统自动处理掉了(大概当异常给throw了)。
         我想jmp目标函数()中只要和界面有关系的操作都会给throw。但有没有人能告诉我,再前面加了一个MessageBox,是不是系统自动为这个线程加了些什么,使之后能调用MessageBox了?
2012-12-27 13:08
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
所以说重点是你的jmp目标函数()中涉及到了些什么东西,才知道对环境有什么需求....
2012-12-27 16:22
0
雪    币: 196
活跃值: (96)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
你那个jmp 部分有用到user32.dll里的函数吗, 如果有MessageBox的情况下,dll的导入表里会有user32.dll 和MessageBoxW


可以试试把MessageBox换成其他user32.dll中的函数,只要让ImportTable中看到user32.dll
上传的附件:
2012-12-29 21:24
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
过了半个多月,差不多把这个问题忘了,毕竟除了MessageBox弹不出对话框,其他都正常。

今天突然又想到一个可能性——MessageBoxW的第一参数我用的是null,一般情况正常,但如果多线程可能就会有问题了
2013-1-17 22:39
0
游客
登录 | 注册 方可回帖
返回
//