开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3590|回复: 3
收起左侧

[改进提议] 关于内存操作中搜索 添加按模块名进行筛选搜索的功能

[复制链接]
结帖率:67% (8/12)
发表于 2019-1-2 10:15:28 | 显示全部楼层 |阅读模式   安徽省铜陵市
  
子程序名返回值类型公开备 注
搜索整数型 某些情况,需提升权限(返回结果数目,失败返回0)
参数名类 型参考可空数组备 注
进程ID整数型进程ID
搜索内容字节集欲搜索的内容  其他类型-需自行转换为字节集类型
模块名文本型
结果数组整数型用来保存搜索的结果
变量名类 型静态数组备 注
长度整数型 
操作句柄整数型 
内存地址整数型 
内存块信息精易_内存属性 
数据缓冲区字节集 
读取结果逻辑型 
找到地址整数型 
是否模块搜索逻辑型 
模块信息精易_模块信息0
i整数型 
模块结束地址整数型 
清除数组 (结果数组)
长度 = 取字节集长度 (搜索内容)
操作句柄 = OpenProcess ( #PROCESS_ALL_ACCESS, 0, 进程ID)  ' 取得操作句柄
如果真 (取反 (是否为空 (模块名)))
是否模块搜索 = 真
进程_ID取模块 (, 模块信息)
计次循环首 (取数组成员数 (模块信息), i)
如果真 (到小写 (到文本 (模块信息 [i].模块文件名)) = 到小写 (模块名))
内存地址 = 模块信息 [i].模块句柄
模块结束地址 = 模块信息 [i].模块句柄 + 模块信息 [i].大小
跳出循环 ()

计次循环尾 ()

判断循环首 (VirtualQueryEx (操作句柄, 内存地址, 内存块信息, 28) ≠ 0)  ' 取得内存块信息
如果真 (内存块信息.当前属性 ≠ 16 内存块信息.当前属性 ≠ 1 内存块信息.当前属性 ≠ 512)  ' 判断保护状态
数据缓冲区 = 取空白字节集 (内存块信息.区域长度)
读取结果 = ReadProcessMemory_字节集 (操作句柄, 内存地址, 数据缓冲区, 内存块信息.区域长度, 0)
判断循环首 (读取结果 ≠ )
找到地址 = 寻找字节集 (数据缓冲区, 搜索内容, 找到地址)  ' 查找是否有要搜索的数据
如果 (找到地址 = -1)  ' 跳出 进行下次循环
跳出循环 ()

加入成员 (结果数组, 到数值 (内存地址 + 找到地址 - 1))
找到地址 = 找到地址 + 长度
判断循环尾 ()
内存地址 = 内存地址 + 内存块信息.区域长度  ' 搜索下一内存块
如果真 (是否模块搜索)
如果真 (内存地址 > 模块结束地址)
跳出循环 ()


处理事件 ()
判断循环尾 ()
CloseHandle (操作句柄)
返回 (取数组成员数 (结果数组))

结帖率:100% (32/32)

签到天数: 1 天

发表于 2019-1-12 15:22:47 | 显示全部楼层   湖北省武汉市
https://bbs.125.la/forum.php?mod=viewthread&tid=13936841&page=1#pid15026023
回复 支持 反对

使用道具 举报

发表于 2019-1-3 23:59:52 高大上手机用户 | 显示全部楼层   北京市北京市
能搞个搜64位进程的吗
回复 支持 反对

使用道具 举报

结帖率:67% (8/12)
 楼主| 发表于 2019-1-2 10:21:17 | 显示全部楼层   安徽省铜陵市
  1. .版本 2

  2. .子程序 搜索, 整数型, 公开, 某些情况,需提升权限(返回结果数目,失败返回0)
  3. .参数 进程ID, 整数型, , 进程ID
  4. .参数 搜索内容, 字节集, , 欲搜索的内容  其他类型-需自行转换为字节集类型
  5. .参数 模块名, 文本型, 可空
  6. .参数 结果数组, 整数型, 参考 数组, 用来保存搜索的结果
  7. .局部变量 长度, 整数型
  8. .局部变量 操作句柄, 整数型
  9. .局部变量 内存地址, 整数型
  10. .局部变量 内存块信息, 精易_内存属性
  11. .局部变量 数据缓冲区, 字节集
  12. .局部变量 读取结果, 逻辑型
  13. .局部变量 找到地址, 整数型
  14. .局部变量 是否模块搜索, 逻辑型
  15. .局部变量 模块信息, 精易_模块信息, , "0"
  16. .局部变量 i, 整数型
  17. .局部变量 模块结束地址, 整数型

  18. 清除数组 (结果数组)
  19. 长度 = 取字节集长度 (搜索内容)
  20. 操作句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程ID)  ' 取得操作句柄
  21. .如果真 (取反 (是否为空 (模块名)))
  22.     是否模块搜索 = 真
  23.     进程_ID取模块 (进程ID, 模块信息)
  24.     .计次循环首 (取数组成员数 (模块信息), i)
  25.         .如果真 (到小写 (到文本 (模块信息 [i].模块文件名)) = 到小写 (模块名))
  26.             内存地址 = 模块信息 [i].模块句柄
  27.             模块结束地址 = 模块信息 [i].模块句柄 + 模块信息 [i].大小

  28.             跳出循环 ()
  29.         .如果真结束

  30.     .计次循环尾 ()



  31. .如果真结束

  32. .判断循环首 (VirtualQueryEx (操作句柄, 内存地址, 内存块信息, 28) ≠ 0)  ' 取得内存块信息
  33.     .如果真 (内存块信息.当前属性 ≠ 16 且 内存块信息.当前属性 ≠ 1 且 内存块信息.当前属性 ≠ 512)  ' 判断保护状态
  34.         数据缓冲区 = 取空白字节集 (内存块信息.区域长度)
  35.         读取结果 = ReadProcessMemory_字节集 (操作句柄, 内存地址, 数据缓冲区, 内存块信息.区域长度, 0)
  36.         .判断循环首 (读取结果 ≠ 假)
  37.             找到地址 = 寻找字节集 (数据缓冲区, 搜索内容, 找到地址)  ' 查找是否有要搜索的数据
  38.             .如果 (找到地址 = -1)  ' 跳出 进行下次循环
  39.                 跳出循环 ()

  40.             .否则
  41.                 加入成员 (结果数组, 到数值 (内存地址 + 找到地址 - 1))
  42.             .如果结束
  43.             找到地址 = 找到地址 + 长度
  44.         .判断循环尾 ()
  45.     .如果真结束
  46.     内存地址 = 内存地址 + 内存块信息.区域长度  ' 搜索下一内存块
  47.     .如果真 (是否模块搜索)
  48.         .如果真 (内存地址 > 模块结束地址)

  49.             跳出循环 ()
  50.         .如果真结束

  51.     .如果真结束

  52.     处理事件 ()
  53. .判断循环尾 ()
  54. CloseHandle (操作句柄)
  55. 返回 (取数组成员数 (结果数组))
复制代码


上面写错了 写成了取自进程的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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