首页
社区
课程
招聘
[求助]messageboxw进程函数注入总是崩溃报错
发表于: 2022-10-18 13:51 6795

[求助]messageboxw进程函数注入总是崩溃报错

2022-10-18 13:51
6795

探索window逆向编程 进行初步的messageboxw函数注入,发现总会引起程序的崩溃报错,进行ollydbg调试 发现汇编代码成功注入,却执行失败,不知道是哪里出现了问题,求各路大神指教,贴出来测试源码:
HMODULE hmoudle = GetModuleHandle(L"user32.dll");
if (NULL == hmoudle) {
hmoudle = LoadLibrary(L"user32.dll");
}
FARPROC MESS1 = GetProcAddress(hmoudle, "MessageBoxW");
int add = (int)MESS1;
这是获取函数地址
//这是进行注入操作
LPVOID alloc_func = VirtualAllocEx(processid, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
//往里写入函数
BOOL res1 = WriteProcessMemory(processid, alloc_func, code1, 4096, NULL);

1
2
3
4
5
6
7
8
if (!res1) {
    MessageBox(NULL, L"写入函数失败", NULL, 0);
    CloseHandle(processid);
    return 0;
}
 
//开始进行远程代码注入 在这之前有一个必须要传递进去的参数 就是函数地址
HANDLE thread = CreateRemoteThread(processid, NULL, NULL, LPTHREAD_START_ROUTINE(alloc_func), NULL, NULL, NULL);

//这是要注入的函数 我直接把messageboxw地址写进去了 没有以传参的形式注入
declspec(naked) static void code1() {
//static void
stdcall code1() {

1
2
3
4
5
6
7
8
9
10
11
__asm {
    pushad
    push 1
    push 0
    push 0
    //push hWnd1
    mov eax,0x769c89c0
    call eax
    popad
    ret
}

}

 

最后是调试界面:
图片描述


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

最后于 2022-10-18 13:55 被mb_mhrkorjy编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (10)
雪    币: 10684
活跃值: (7602)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
messagebox地址变了吧,你跟进call eax里看看是不是messagebox就知道地址对不对了
2022-10-18 20:09
0
雪    币: 218
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
bluefish蓝鱼 messagebox地址变了吧,你跟进call eax里看看是不是messagebox就知道地址对不对了
注入进去的汇编代码是按照顺序执行的 那个写死的地址我也dd去查了 确实是messageboxw的地址 call eax 肯定call的这个地址 但是每次运行都会报地址冲突
2022-10-18 20:26
0
雪    币: 10684
活跃值: (7602)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
你call eax时好像参数给少了
2022-10-18 21:41
0
雪    币: 218
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
bluefish蓝鱼 你call eax时好像参数给少了
我在去试试 我记得这个messagebox 三个或者四个参数都可以的 不用传入句柄HWND也是可以的 很奇怪的是 我用上边那个程序去注入植物大战僵尸这个单机游戏的时候 有时候突然是会注入成功的 但是你只要点击那个对话框的时候 最后也是会崩溃的 
2022-10-18 21:51
0
雪    币: 44
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
MessageBox共4个参数,可以都为0
2022-10-19 09:38
0
雪    币: 1278
活跃值: (1265)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
MessageBox有4个参数,另外你的MessageBox的地址不一定对
2022-10-19 12:29
0
雪    币: 852
活跃值: (9821)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
8
1.MsgBox 地址不对。
2.汇编中调用函数的时候要按照参数个数传参。 比如Msgbox 需要四个参数。那么你就要push 4次(x86) 可以都为0. 
2022-10-19 15:06
0
雪    币: 218
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
TkBinary 1.MsgBox 地址不对。 2.汇编中调用函数的时候要按照参数个数传参。 比如Msgbox 需要四个参数。那么你就要push 4次(x86) 可以都为0.
谢谢提醒 我再去试下 先获取messageboxw地址 然后传参  我去试下传入句柄参数HWND再重新调用下
2022-10-19 15:19
0
雪    币: 218
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
解决了 封贴 问题一:messageboxw参数个数传入错误 问题二:当汇编传入参数地址时候,需要进行转换 把messageboxw函数地址传进去 而不是传入分配的alloc空间地址 具体汇编代码如下:
__declspec(naked) static   void   code1(int addr) {
 //static  void  __stdcall  code1() {
    
    __asm {
        pushad
        push 1
        push 0
        push 0
        push 0
        mov ebx,[addr]
        mov eax, [ebx]
        call eax
        popad
        ret
    }
}
2022-10-19 16:19
0
雪    币: 218
活跃值: (159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢楼上各位大佬的建议 非常感谢 这个问题卡了我三天 让我夜不能寐
2022-10-19 16:20
0
游客
登录 | 注册 方可回帖
返回
//