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分开,默认的分割字符串是一个新行.对于每个属性选项,用户可以 ...
随机推荐
- PE安装原版XP系统(含高版本PE安装选项灰色处理办法)
PE 安装 XP 镜像流程准备原版 XP 安装光盘镜像放到硬盘非 C 盘. 可解压到本地经行安装, 也可以使用虚拟光驱载入安装 (本教程主要讲 PE 内虚拟光驱载入安装) 第一步:用 U 盘或硬盘/光 ...
- Python 结巴分词
今天的任务是对txt文本进行分词,有幸了解到"结巴"中文分词,其愿景是做最好的Python中文分词组件.有兴趣的朋友请点这里. jieba支持三种分词模式: *精确模式,试图将句子 ...
- poi 合并单元格 无边框问题
public void merge(int startrow,int endstartrow,int startColumn,int endColumn){ sht.addMergedRegion(n ...
- 260. Single Number III
Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...
- puppet安装配置及使用
puppet安装前准备 一.服务器信息 master端:10.10.10.201 master.fansik.com slave端:10.10.10.156 slave.fansik.com 三台机 ...
- P235 实战练习(集合类)
将1~100之间的所有正整数存放在一个List集合中,并将集合中索引位置是10的对象从集合中移除. package org.hanqi.practise; import java.util.*; pu ...
- Python笔记本
Python 的主提示符( >>> )和次提示符( ... ).主提示符是解释器告诉你它在等你输入下一个语句,次提示符告诉你解释器正在等待你输入当前语句的其它部分. 下划线(_)在解 ...
- [hdu 3605]Escape
这题的做法非常直观,却又非常不直观 先容许我吐一下槽吧~作者你的英语是读到火星上去了喵? 题目大体是说人类要移民,然后有 n 个人, m 个星球 每个人都有 m 个 0 . 1 数码表示他能否移民到该 ...
- 【转】iOS开发拓展篇—静态库
原文网址:http://www.cnblogs.com/wendingding/p/3893095.html iOS开发拓展篇-静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码 ...
- c++语法集锦
1.指针的引用 他也是引用,引用是特定内存块的别名 2.变量定义 更准确的说是内存使用约定,并为该约定命名 命名3.指向常变量的指针和常指针 有点拗口,都是指针,但对于所在内存块的使用约定不同.常变量 ...