WINDOWS黑客基础(4):查找进程运行的基址
从WINDOWS VISITA开始以后,windows已经开始支持随机基址的关系,也就是说以前我们的进程基址都是从0x40000开始的,如果一个变量在我们第一次运行的时候地址为0x50000,那么以后也都会在这个位置
而VS2008后开始提供随机基址的功能,在WINDOWS VISITA后的版本也都支持这个功能,这样进程的基址将不会再固定从一个地方开始,变量的地址也会随着基址的不同而不同,加大了我们对一个进程修改的难度,我们每次修改一个变量不能再将变量写死,而是要根据基址+数据偏移量来算出数据的地址,那么,我们怎么去获得一个进程的基址呢??
在我们程序运行的时候,我们进程自己的HINSTANCE或者HMODULE就是我们这个进程的基址,当然,DLL的HMODULE或者HINSTANCE则是该DLL的基址,这样我们大概就知道怎么获取进程的基址了
1.GetModuleHandle
通过GetModuleHandle,我们可以获取一个进程的基址,我们可以直接传入一个NULL就可以直接拿到该进程的基址,但是这种方法我们只能拿到自己进程的基址,所以不是很方便
当然我还有一个想法就是可以把获取进程基址的代码注入到另外一个进程,然后通过其他方法传送出来,除了SOCKET,文件,管道等正常通讯外,我们还可以利用VirtualAllocEx,在对方内存开辟一块地址后,我们把代码复制进去(如同上一章的代码注入),记得,我们申请内存的大小除了需要放置代码,还需要放置我们计算完以后的结果,我们计算完了后把结果放在这块内存,就可以通过另外一个进程去取了
比如我们A进程向B进程申请了100字节的内存区域C,并且复制了50字节的代码到C,我们这50字节的代码执行了后,可以获取B进程的基地址,并且取得基地址后,他会把这个值放到区域C地址偏移为80的位置,这样我们A进程就可以通过读取区域C再往后面偏移80个,这个值就是进程的基址
这个方法也适用于注入代码与原进程的通讯,简单的来讲就是通过在对方内存开辟一块专门放置计算结果的内存,然后再由另外一个进程去取数据,有点类似于内存映射,后面将会有专门的一节讲这个
2. 给我们的进程拍加载模块的快照
windows有专门的TLHELP32这个库,就是给我们的电脑拍快照用的,比如DLL快照,比如电脑进程表的快照,CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,ProcessID),这样的话,第一个DLL将会是我们要查找的DLL
3.利用EnumProcessModules
psapi库里面也有提供一些进程状态的API,其中EnumProcessModules的库就可以枚举对应进程加载的所有模块,枚举的第一个就是我们要查看进程对应的地址
后面的两个方法都会比较简单,所以简单讲解一下,以上代码都在
https://github.com/linyilong3/hacker-tutorial
里面的ModuleBaseAddr我们这一章的代码,代码在WIN7 64位下也均可以通过编译和运行正确,本人水平所限,有不足之处希望大家指教
WINDOWS黑客基础(4):查找进程运行的基址的更多相关文章
- WINDOWS黑客基础(3):注入代码
有使用过外挂的朋友应该知道,我们在玩游戏的时候,有很多辅助功能给你使用,比如吃药,使用物品等功能,这个时候我们就是使用注入代码的技术,简单的来将就是我们让另外一个进程去执行我们想让它执行的代码,这中间 ...
- WINDOWS黑客基础(5):利用内存来进行获取计算结果
在前面的注入代码的章节中,我们利用了VirtualAllocEx来在对方的进程开辟了一块内存,并且将代码复制进对方进程的内存里面,从而执行那段内存的代码,但是这里有一个问题,就是代码不是执行在我们进程 ...
- Linux基础命令---查找进程id
pidof pidof可以查找指定名称的进程的pid,将结果送到标准输出.pidof有两种返回值:0,找到至少一个进程:1,没有找到进程.pidof实际上与killall5相同:程序根据调用它的名称进 ...
- Linux 查找进程运行位置
1.通过ps或者top命令查看运行的进程的pid ps -aux|grep php-fpm #或者 top 2. 获取进程的pid后,然后使用命令ls -l /proc/${pid},这个命令可以列出 ...
- WINDOWS黑客基础(6):查看文件里面的导入表
int main(void) { HANDLE hFile = CreateFile("D:\\Shipyard.exe", GENERIC_READ, FILE_SHARE_RE ...
- 【黑客基础】Windows PowerShell 脚本学习(上)
视频地址:[黑客基础]Windows PowerShell 脚本学习 2019.12.05 学习笔记 1.$PSVersionTable :查看PowerShell的版本信息. 2.PowerShel ...
- 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素
[源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中 ...
- windows中根据进程PID查找进程对象过程深入分析
这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的. 句柄是针对进 ...
- pgrep---以名称为依据从运行进程队列中查找进程
pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id.每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行.对于每个属性选项,用户可以 ...
随机推荐
- java script 闭包
闭包的概念真的是很绕,我就来点实际的代码. 当我用下面的代码的时候 发生了闭包,当执行onclick事件的时候,变量一直引用了外部函数的变量,结果i总是4 function newLoad() { / ...
- spring学习笔记---第三方SDK(Rest API)和Jaskson的巧用
前言: 其实我以前一直不懂电商, 以及电商中所涉及的业务概念. 对于SKU等名词, 觉得有些玄乎. 对其背后的数据模型, 也有莫名的未知恐惧感: 庞大而理不清头绪. 不过最近有机会接触了微商(有赞), ...
- Js 操作Json
JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合json标准的字符串,后者将符合json标准的字符串转化为js对象. parse方法相当于eval()方法 ...
- 标准盒模型与ie盒模型
ff(标准的盒模型) Box的宽高包括 padding .border.margin.content区域 ie Box的宽度包括 margin content区域(content区域包含paddi ...
- leetcode 102 Binary Tree Level Order Traversal ----- java
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- Hibernate设置派生属性(formula)
一.Customer中包含的字段: private static final long serialVersionUID = 1L; private Integer id; private ...
- 1-2 ISO/OSI七层模型简介
相关名词解释: ISO:国际标准化组织 OSI:开放系统互联模型 IOS:苹果操作系统, 但是在计算机网络中,IOS是互联网操作系统,是思科公司为其网络设备开发的操作维护系统 <1>OSI ...
- 关于kafka连接不上别的机器问题Connection refused
1.确认config里面的server.properties 正确(包括IP+端口2181记得看清,用hostname的话记得etc/hostnames下面查看全部配置上没,建议用hostname方便 ...
- 越狱Season 1- Episode 22: Flight
Season 1, Episode 22: Flight -Franklin: You know you got a couple of foxes in your henhouse, right? ...
- 黑马程序员——JAVA基础之数组
------- android培训.java培训.期待与您交流! ---------- 数组: 数组的定义: 数组是相同类型数据的集合, 描述的是相同类型的若干个数据按照一定的先后顺序排列组合而成,其 ...