吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3790|回复: 13
收起左侧

[求助] 新手 c++逆向 遇到内存读取和写入的问题

[复制链接]
aiyingshiwo 发表于 2019-8-11 10:26
本帖最后由 aiyingshiwo 于 2019-8-11 12:31 编辑

自己写的一个辅助问题多多

QQ截图20190811094749.png

先上代码



[Asm] 纯文本查看 复制代码
void CMFCApplication6Dlg::OnBnClickedwuxianj()
{
        // TODO: 在此添加控件通知处理程序代码
        
        UpdateData(TRUE);
        DWORD pid = jinchengpid(_T("植物大战僵尸中文版"));//通过寻找进程名称函数获取进程id
        
        HANDLE hp = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);//获取进程句柄
        if (hp==NULL)
        {
                MessageBox(_T("打开进程失败"), NULL, 0);
                
                return;
        }
        DWORD daxiao = 0;
        DWORD dizhi = 0;
        if(!ReadProcessMemory(hp, (LPVOID)0x006AA00C, (LPVOID)dizhi, sizeof(DWORD), &pid)) ;//读取内存数据
        {
                printf("dizhi= %x\n", dizhi);
                MessageBox(_T("读取内存数据失败"), NULL, 0);
                CloseHandle(hp);
                return;
        }
        



调试后发现
QQ截图20190811085358.png


QQ截图20190811085904.png
读取内存失败


QQ截图20190811090226.png
进程的Pid没有错

QQ截图20190811091651.png
但是返回的地址不对 变成0了;




下面是写入的问题

先上代码


[Asm] 纯文本查看 复制代码
 __declspec(naked) void zhadan()//要写入的汇编代码
{
        __asm
        {        
                pushad
                push -1
                push  2
                mov  eax,1
                push  5
                mov ebx, ds:[0x6A9EC0]
                mov ebx, ds:[ebx + 0x768]
                push  ebx
                mov edx,0x0040D120
                call edx
                popad
                ret
        }
}



void CMFCApplication6Dlg::OnBnClickedzhuru()
{
        // TODO: 在此添加控件通知处理程序代码

        
        //1.打开目标进程
        DWORD pid = jinchengpid(_T("植物大战僵尸中文版"));

        HANDLE hp = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
        //2 在目标进程分配空间

        PVOID fenpeidizhi = VirtualAllocEx(hp, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
        
        //3 往分配内存写入代码
        DWORD daxiao = 0;
        ;
         BOOL bb= WriteProcessMemory(hp, fenpeidizhi,zhadan, 4096, &daxiao);
         
        
        //执行目标进程指定地址的代码
         CreateRemoteThread(hp, NULL, NULL, (LPTHREAD_START_ROUTINE)&fenpeidizhi, NULL, NULL, NULL);
        
        

}




调试后发现


QQ截图20190811093215.png
分配内存成功



QQ截图20190811094206.png
写入时 分配的内存地址也是正确的

QQ截图20190811094350.png
但是用OD查看此分配内存地址,没写入成功,如果写入成功应该是:
                pushad
                push -1
                push  2
                mov  eax,1
                push  5
                mov ebx, ds:[0x6A9EC0]
                mov ebx, ds:[ebx + 0x768]
                push  ebx
                mov edx,0x0040D120
                call edx
                popad
                ret

QQ截图20190811094519.png
和前面读取内存的问题一样 都是到了这一步有错误



我也翻了好多百度,还是没解决,说是权限问题,我把电脑登陆用户改成管理员权限 还是没用,VS也用管理权限登陆也没用,甚至换成了VS2015破解版 也没效果。
也添加了权限代码,但是代码是错的,因为是新手,从刚学C,C++,汇编 到现在总共才2个多月不到,所以不会改这代码
代码如下:

[Asm] 纯文本查看 复制代码
bool CMFCApplication6Dlg::quanxian()
{
        HANDLE lingpai;
        LUID sed;
        PTOKEN_PRIVILEGES tkp=0;
        //PTOKEN_PRIVILEGES* tt = &tkp;

        if (!OpenProcessToken(GetCurrentProcess(),
                TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &lingpai))
        {
                return false;
        }
                
        if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sed))
        {
                CloseHandle(lingpai);
                return false;
        }

        tkp->PrivilegeCount = 1;
        tkp->Privileges[0].Luid = sed;
        tkp->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        if(!AdjustTokenPrivileges(lingpai, FALSE, tkp /*tt*/, sizeof(tkp), NULL, NULL));
        {
                CloseHandle(lingpai);
                return false;


        }
        return true;
                
}


调试后发现的错误
QQ截图20190811100330.png


希望知道问题的大大回答下,谢谢,也是从这论坛才开始学的编程,前面学的还顺,就是这内存读写的函数这两天搞得我头大



同样的函数 WriteProcessMemory 另外两个 无cd 和 大嘴 花cd的两个按钮却能成功的在内存写入代码

4555557.png

内存地址00461565 和 00461566  成功的改写了


经过刚刚的调试

545555555.png


6666667884231.png

写入的内存地址还是没问题



写入的函数地址也没问题

3523689.png

6798889.png


但是却在该内存地址没写成功
8864545.png

总结
应该是此函数写得有问题
0999999.png
此函数的汇编代码没能注入成功应该和 返回的类型 或者 返回类型前面的代码有关,我不知道,请大大帮改改看哪的代码错了
6666666.png
3523689.png
6798889.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dushiyu 发表于 2019-8-11 10:58
ReadProcessMemory(进程句柄HANDLE,要读取的内存地址(LPCVOID),存放读取信息的变量,读取的内存大小sizeof(),0)。
你参数用错了   Write的那个也错了  。可以去MSND看看函数用法。
如果是权限问题启动编程软件时直接右键,以管理员身份启动就可以了。

bester 发表于 2019-8-11 11:01
本帖最后由 bester 于 2019-8-11 11:03 编辑

zhadan这个函数 不是应该用&取地址转指针吗?如果不是,你在VS里面调试一下,看一下写入和读取的参数,看是否为这个zhadan的函数的地址

delphi 是  WriteProcessMemory(hp, Pointer($00401000), Pointer(@wd), 1, wds); 用@取地址用pointer转指针
 楼主| aiyingshiwo 发表于 2019-8-11 11:14
dushiyu 发表于 2019-8-11 10:58
ReadProcessMemory(进程句柄HANDLE,要读取的内存地址(LPCVOID),存放读取信息的变量,读取的内存大小si ...

最后一个参数我之前也改过 出的问题还是一样
 楼主| aiyingshiwo 发表于 2019-8-11 11:25
bester 发表于 2019-8-11 11:01
zhadan这个函数 不是应该用&取地址转指针吗?如果不是,你在VS里面调试一下,看一下写入和读取的参数,看是 ...

这个问题之前也想到了,甚至之前函数所有参数都用&来传,还是一样没效果,所以头才大
333333.png

C:\Users\Administrator\Desktop\333333.png
进入该内存地段,全是空的
 楼主| aiyingshiwo 发表于 2019-8-11 11:51
本帖最后由 aiyingshiwo 于 2019-8-11 11:54 编辑

通一个函数 WriteProcessMemory ,但是 无CD 大嘴花 无CD的这两个按钮却成功改写内存地址,所以我怀疑我写的类型有错误,但是学得比较浅,不懂真正问题出在哪
4555557.png
内存地址00461565 和 00461566   处,按钮成功改写
        




苏紫方璇 发表于 2019-8-11 13:30
写入成功但写入不正确应该是编译选项是debug的问题,选release可以解决,函数调用错误可以用返回值和调用GetLastError来判断原因
 楼主| aiyingshiwo 发表于 2019-8-11 16:41
本帖最后由 aiyingshiwo 于 2019-8-11 16:49 编辑
苏紫方璇 发表于 2019-8-11 13:30
写入成功但写入不正确应该是编译选项是debug的问题,选release可以解决,函数调用错误可以用返回值和调用Ge ...

谢谢,果然是dedug的问题,但是前面读取还是不成功,之前读取也试过用Release编译,没成功,就以为写入也不是这个问题,请问一下 我要读取这段地址要怎么做
QQ截图20190811164256.png
0x006AA00C是基址
我想要找它指向的地址,然后偏移地址  
现在返回的地址是错误的
bester 发表于 2019-8-11 17:21
aiyingshiwo 发表于 2019-8-11 16:41
谢谢,果然是dedug的问题,但是前面读取还是不成功,之前读取也试过用Release编译,没成功,就以为写入也 ...

最后那个参数不应该是0吧?他里面是实际读取的字节,如果读取成功 这个参数的值应该是4,也就是一个DWORD单位,所以这个应该也是一个指针或者是变量吧?
 楼主| aiyingshiwo 发表于 2019-8-11 18:06
bester 发表于 2019-8-11 17:21
最后那个参数不应该是0吧?他里面是实际读取的字节,如果读取成功 这个参数的值应该是4,也就是一个DWORD ...

我之前传参没错,因为Pid的类型就是DWORD的
4444.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 02:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表