从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):查找进程运行的基址的更多相关文章

  1. WINDOWS黑客基础(3):注入代码

    有使用过外挂的朋友应该知道,我们在玩游戏的时候,有很多辅助功能给你使用,比如吃药,使用物品等功能,这个时候我们就是使用注入代码的技术,简单的来将就是我们让另外一个进程去执行我们想让它执行的代码,这中间 ...

  2. WINDOWS黑客基础(5):利用内存来进行获取计算结果

    在前面的注入代码的章节中,我们利用了VirtualAllocEx来在对方的进程开辟了一块内存,并且将代码复制进对方进程的内存里面,从而执行那段内存的代码,但是这里有一个问题,就是代码不是执行在我们进程 ...

  3. Linux基础命令---查找进程id

    pidof pidof可以查找指定名称的进程的pid,将结果送到标准输出.pidof有两种返回值:0,找到至少一个进程:1,没有找到进程.pidof实际上与killall5相同:程序根据调用它的名称进 ...

  4. Linux 查找进程运行位置

    1.通过ps或者top命令查看运行的进程的pid ps -aux|grep php-fpm #或者 top 2. 获取进程的pid后,然后使用命令ls -l /proc/${pid},这个命令可以列出 ...

  5. WINDOWS黑客基础(6):查看文件里面的导入表

    int main(void) { HANDLE hFile = CreateFile("D:\\Shipyard.exe", GENERIC_READ, FILE_SHARE_RE ...

  6. 【黑客基础】Windows PowerShell 脚本学习(上)

    视频地址:[黑客基础]Windows PowerShell 脚本学习 2019.12.05 学习笔记 1.$PSVersionTable :查看PowerShell的版本信息. 2.PowerShel ...

  7. 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素

    [源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中 ...

  8. windows中根据进程PID查找进程对象过程深入分析

    这里windows和Linxu系列的PID 管理方式有所不同,windows中进程的PID和句柄没有本质区别,根据句柄索引对象和根据PID或者TID查找进程或者线程的步骤也是一样的.   句柄是针对进 ...

  9. pgrep---以名称为依据从运行进程队列中查找进程

    pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id.每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行.对于每个属性选项,用户可以 ...

随机推荐

  1. 三步搞定ISO/GHO安装系统 - imsoft.cnblogs

    高清互动安装系统附件:重装系统视频教程.7z

  2. Dreamweaver_CS6安装与破解,手把手教程

    Dreamweaver_CS6安装与破解,手把手教程 | 浏览:11495 | 更新:2015-12-31 10:28 1 2 3 4 5 6 7 分步阅读 Adobe Dreamweaver是一款非 ...

  3. 1.PHP站内搜索 分类: PHP开发实例 2015-07-31 22:48 4人阅读 评论(0) 收藏

    PHP站内搜索:多关键字.加亮显示 1.SQL语句中的模糊查找 $sql = "SELECT * FROM `message` WHERE `content`like '%$k[0]%' a ...

  4. Linux系统编程@多线程编程(一)

    多线程编程 涉及操作系统原理概念 时间片 进程状态 上下文: 对进程来说,就是进程的执行环境,具体就是各个变量和数据,包括所有的寄存器变量.打开的文件.内存信息等. 进程的写时复制:由于一般 fork ...

  5. GCC编译器

    详见<gcc中文手册> 编译过程 预处理器cpp 编译器gcc 汇编器as 链接器linker file.c   -------------> file.i  ----------- ...

  6. C++面向对象要点

    先说说面向对象思想的一个总体认识 对象通常会有行为,这些行为是靠信息支撑,这些信息包括外部信息和内部信息,对象行为会维护其中的一部分信息 因此对象可以看成是这样一种实体,它获取信息,然后决定自己的行为 ...

  7. ADC 分辨率和精度的区别

    分辨率和精度这两个,经常拿在一起说,才接触的时候经常混为一谈.对于ADC来说,这两样也是非常重要的参数,往往也决定了芯片价格,显然,我们都清楚同一个系列,16位AD一般比12位AD价格贵,但是同样是1 ...

  8. java_linear list

    1.线性表的顺序存储结构,类似ArrayList package collectionsFramework.linearlist; import java.util.Arrays; /** * @Pa ...

  9. Unity3D研究院之Editor下监听Transform变化

    美术有可以直接在Editor下操作Transform,我想去修正他们编辑的数值,所以我就得监听Transform.       C#   1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  10. show table status

    SHOW TABLE STATUS works likes SHOW TABLES, but provides a lot of information about each non-TEMPORAR ...