首页
社区
课程
招聘
[求助]奇怪的代码注入问题
发表于: 2012-12-1 17:49 5004

[求助]奇怪的代码注入问题

2012-12-1 17:49
5004
过了TP的保护
OD附加游戏分析了游戏的功能CALL OD的代码注入器 添加下面代码注入成功 而多次点击也没问题
push 0
push 0x220000
push 0x15e8
mov ecx,DWORD PTR [0x0103fb10]
mov ecx,DWORD PTR [ecx+0x2c]
mov eax,0x5ee5e0
call eax
ret
问题1:当我重新来过一次 没有用OD附加游戏 直接代码注入器 注入后没反应 点击多次偶尔执行一次
问题2:我用VC写远程线程注入 OD附加和没附加都是没反应 而多次会游戏退出
//////////////////////注入CAL///////////////////
DWORD _stdcall  CallXuanguai()
{
        __asm
        {
                push 0
                push 0x220000
                push 0x15e8
                mov ecx,DWORD PTR [0x0103fb10]
                mov ecx,DWORD PTR [ecx+0x2c]
                mov eax,0x5ee5e0
                call eax
                ret
        }
       
}
//////////////////远程注入////////////////////
void CzhuruDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        HWND a=::FindWindow("GEMAINWINDOWCLASS",NULL);
        if (a > 0)
        {
                //        MessageBox ("成功!!");
                DWORD PID;
                ::GetWindowThreadProcessId(a,&PID);
                HANDLE hProcess=::OpenProcess  
(PROCESS_ALL_ACCESS,false,PID);                             //打开进程
                LPVOID mFuncAddr =::VirtualAllocEx(hProcess,NULL,4096,MEM_COMMIT,PAGE_EXECUTE_READWRITE);  //申请内存空间
                ::WriteProcessMemory(hProcess,mFuncAddr,&CallXuanguai,4096,NULL);
                HANDLE hThread =::CreateRemoteThread(hProcess,0,0,(LPTHREAD_START_ROUTINE)mFuncAddr,0,0,0);
                ::WaitForSingleObject(hThread,INFINITE);                       //等待线程结束
                int JianCe =::VirtualFreeEx(hProcess,mFuncAddr,0,MEM_RELEASE);
                ::CloseHandle(hThread);
                ::CloseHandle(hProcess);
        }
        else
        {
               
                MessageBox("失败!!");
        }
}
问题3:我用SetWindowsHookEx();钩子窗口注入DLL 在DLL里创建线程CreateThread();也是一样没反应 而多次也会游戏退出
*不知道是为什么 困扰了我还几天

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 218
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov ecx,DWORD PTR [0x0103fb10]
    mov ecx,DWORD PTR [ecx+0x2c]

在VC中  
mov ecx,0x0103fb10
mov ecx,[ecx]
mov ecx, [ecx+0x2c]

这样应该就没问题了。。
2012-12-1 18:00
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2楼 我像你这样写了 还是不行
2012-12-1 19:58
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0103fb10这个地址的值应该是程序动态申请的写入的值,每次里面的值不一样!猜测
2012-12-1 20:41
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
4楼  0103fb10 是常量 基址  
push 和 mov 都是不变的
push 0
push 0x220000
push 0x15e8
mov ecx,DWORD PTR [0x0103fb10]
mov ecx,DWORD PTR [ecx+0x2c]
mov eax,0x5ee5e0
call eax
我很想知道为什么只有OD附加后 才能成功调用函数
OD附加游戏的时候对游戏做了什么 还是HOOK了什么  还是提了什么权限
2012-12-1 22:32
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
问题1,可能是代码没有注入进去,或者是远线程创建失败了,这个要详细分析,具体情况具体对待
问题2是一个语法错误,纯汇编调用,函数名前面要加关键字__declspec(naked)
DWORD __declspec(naked) CallXuanguai()
而不是_stdcall调用方式
至于问题3,就不多说了,请参考问题2
2012-12-1 23:37
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
啊 找到问题原因了 原来保护HOOK掉了R3的一个关于远程的函数 恢复后就OK了 谢谢大家
2012-12-2 20:20
0
游客
登录 | 注册 方可回帖
返回
//