TC官方合作论坛

标题: 动态库调用ReadProcessMemory 求高手帮帮忙 [打印本页]

作者: jandan520    时间: 2016-8-20 00:33
标题: 动态库调用ReadProcessMemory 求高手帮帮忙
动态库调用ReadProcessMemory 求高手帮帮忙

作者: dear    时间: 2016-8-20 01:23
http://bbs.tyuyan.net/thread-63792-1-1.html
这个帖子给你回答了。
作者: jandan520    时间: 2016-8-20 22:23
dear 发表于 2016-8-20 01:23
http://bbs.tyuyan.net/thread-63792-1-1.html
这个帖子给你回答了。

游戏没有保护 可就是读不出来
  
作者: dear    时间: 2016-8-20 23:46
jandan520 发表于 2016-8-20 22:23
游戏没有保护 可就是读不出来

读什么类型的数据?长度多少?
作者: jandan520    时间: 2016-8-21 23:07
dear 发表于 2016-8-20 23:46
读什么类型的数据?长度多少?

就是 0到5的数字
作者: dear    时间: 2016-8-22 11:51
jandan520 发表于 2016-8-21 23:07
就是 0到5的数字
  1. var 进程句柄=?? //这个你需要自己添,一般TC的 进程信息 这个函数就可以用窗口句柄获取到。要2次调用
  2. var 想要读取的内存地址=#444444 //16进制的地址。看着改
  3. var 返回内存地址上的内容
  4. var 要读取的长度=1 //0~5之间的数字 长度就是1咯。
  5. var 返回实际读取的内容
  6. 调试输出(dllcall("kernel32.dll","long","ReadProcessMemory","long",进程句柄,"long",想要读取的内存地址,"plong",返回内存地址上的内容,"long",要读取的长度,"plong",返回实际读取的内容))//这行调试1 说明成功了。0说明失败了
  7. 调试输出(返回内存地址上的内容)//你要的内容
  8. 调试输出(返回实际读取的内容)//内容的长度
复制代码

作者: jandan520    时间: 2016-8-24 00:07
本帖最后由 jandan520 于 2016-8-24 00:11 编辑
dear 发表于 2016-8-22 11:51


功能 内存读取操作()
    //座位号内存基址"00111654"
    变量 进程ID
    变量 进程句柄
    变量 座位号
    变量 返回内存地址上的内容
    变量 实际读取的内容
    变量 内存基址 = 00111654
    窗口句柄 = 窗口查找("QQ游戏 - 连连看角色版","")
    动态库调用("user32.dll","long","GetWindowThreadProcessId","long",窗口句柄,"plong",进程ID)
    进程句柄 = 动态库调用("Kernel32.dll","long","OpenProcess","long",2035711,"long",假,"long",进程ID)
    调试输出(窗口句柄)
    调试输出(进程ID)
    //进程句柄 = 进程获取句柄("QQ游戏 - 连连看角色版")
    调试输出(进程句柄)
    调试输出(dllcall("kernel32.dll","long","ReadProcessMemory","long",进程句柄,"long",00111654,"plong",返回内存地址上的内容,"long",1,"plong",实际读取的内容))//这行调试1 说明成功了。0说明失败了
    // 座位号 = 动态库调用("Kernel32.dll","long","ReadProcessMemory","long",进程句柄,"long",内存基址,"plong",内存地址上的内容,"long",4,"plong",实际读取的内容)
    //编辑框设置文本("编辑框2",座位号)
    //调试输出(座位号)
    调试输出(返回内存地址上的内容)//你要的内容
    调试输出(实际读取的内容)
结束

[attach]23914[/attach]




作者: dear    时间: 2016-8-24 00:15
jandan520 发表于 2016-8-24 00:07
功能 内存读取操作()
    //座位号内存基址"00111654"
    变量 进程ID

0表示读取内存失败。
你确定是没保护的话,那就是你进程句柄弄错了。
作者: dear    时间: 2016-8-24 00:20
另外一点 就是你参数写错了
//座位号内存基址"00111654"
这个是十六进制的,你写十进制的。
作者: jandan520    时间: 2016-8-24 23:30
dear 发表于 2016-8-24 00:15
0表示读取内存失败。
你确定是没保护的话,那就是你进程句柄弄错了。

谢谢高手耐心帮忙 原来是我把这个十六进制的,当成十进制了
作者: jandan520    时间: 2016-8-26 21:24
dear 发表于 2016-8-22 11:51

    byte chessdata[11][19]                DWORD byread;
        LPCVOID pbase=(LPCVOID)0x0012A508; //棋盘数据基址
        LPVOID  nbuffer=(LPVOID)&chessdata;    //存放棋盘数据
        ::ReadProcessMemory(processH,pbase,nbuffer,11*19,&byread);


这是C++的源代码 请高手帮帮忙转换TC代码谢谢
作者: dear    时间: 2016-8-28 01:11
jandan520 发表于 2016-8-26 21:24
byte chessdata[11][19]                DWORD byread;
        LPCVOID pbase=(LPCVOID)0x0012A508; ...

这个跟我之前跟你说的 没多大区别,就一条读进程内存。
作者: jandan520    时间: 2016-8-28 10:11
dear 发表于 2016-8-28 01:11
这个跟我之前跟你说的 没多大区别,就一条读进程内存。

byte chessdata[11][19]  我是不知道这个数组如何在TC6.1里面写出




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1