首页
社区
课程
招聘
[旧帖] [求助]过了TP保护,能CE内存,OD调试,可是自己编写程序想修改它内存,却卡了 0.00雪花
发表于: 2012-4-22 19:50 1786

[旧帖] [求助]过了TP保护,能CE内存,OD调试,可是自己编写程序想修改它内存,却卡了 0.00雪花

2012-4-22 19:50
1786
经过一个多月苦战,终于过了TP保护,

可以CE内存,OD调试,自己写了一个小程序,想调用它的call,发现不行

接着不死心,简化一下代码,随便修改一下它的内存值,居然也修改不了,

以前一直都是win32程序开发,没有逆向的经验,听说看雪水深,

求教来了。。

WriteProcessMemory无法写入问题

主要代码如下

////////////
void myfunc(){

  _asm
  {
                   push ecx
      push ebx
      mov ecx,0x19B32214
      mov ebx,5000
      mov [ecx],ebx
      pop ebx
      pop ecx
  }
}

////////////////////////////////

void CGameDlg::OnBuyGoods()
{
  // TODO: Add your control notification handler code here
  
     
       DWORD procid;  
      
       HWND hwnd ;  
       hwnd =::FindWindow(NULL ,"XXXX") ;  
      
       if (hwnd ==NULL)  
         
       {  
         MessageBox("请先运行");
         
         return ;  
         
       }  
      
       ::GetWindowThreadProcessId(hwnd,&procid);//获得进程ID   
      
    HANDLE prochandle=::OpenProcess(PROCESS_ALL_ACCESS | PROCESS_CREATE_THREAD | PROCESS_VM_WRITE,false,procid);//打开进程  
       if(prochandle==NULL)  
         
       {  
         MessageBox("进程打开失败");
         return;  
         
       }         
       LPVOID baseaddr=VirtualAllocEx(prochandle,NULL,1024*4,MEM_COMMIT,PAGE_EXECUTE_READWRITE);//分配空间
      
       if(baseaddr==NULL)  
         
       {  
         MessageBox("分配空间出错");
         return;  
         
       }  
       DWORD byread;
       DWORD  m_test;

      
     ////////////////////

::ReadProcessMemory(prochandle, (LPCVOID)0x19B32214, &m_test, 4, &byread);//
       if(m_test==NULL)
       {
        MessageBox("读取内存出错");
        return ;  
       }else{
           CString aa;
          aa.Format("%d",m_test);
          MessageBox(aa);

       }
   
       if(!::WriteProcessMemory(prochandle,baseaddr,myfunc,1024*4,NULL))  
         
       {  
         MessageBox("将函数写内存出错");
         return ;  
         
       }

HANDLE tid;  
       DWORD id2;
      
       tid=CreateRemoteThread(prochandle,NULL,0,(LPTHREAD_START_ROUTINE)baseaddr,0,0,&id2);//远程调用函数   
      
       WaitForSingleObject(tid,INFINITE);//等待线程结束   
      
       VirtualFreeEx(prochandle,baseaddr,1024*4,MEM_RELEASE);  

    ::ReadProcessMemory(prochandle, (LPCVOID)0x19B32214, &m_test, 4, &byread);//
       if(m_test==NULL)
       {
         MessageBox("读取内存出错");
         return ;  
       }else{
         CString aa;
         aa.Format("%d",m_test);
         MessageBox(aa);
         
       }

      
       ::CloseHandle(prochandle);  
}
////////////////////////

上面代码,第一次MessageBox为 7,第二次,MessageBox 还是为7,且没有任何提示

不知道是什么原因??

帮忙一下。

///////////////

刚才还发狠,想认真去读一下CE源代码,可是太晕,它是delphi开发,

本人80后啊,一直都是.net开发,虽然delphi代码都看得懂,但是学新工具,

熟悉语法,调试环境等,又要痛苦一阵,唉。

////////////

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 121
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在ring0下写内存呢?
2012-4-24 08:23
0
游客
登录 | 注册 方可回帖
返回
//