从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. memcache 线程深入理解分析 及 源码研究

    http://blog.csdn.net/huithe/article/details/8006186

  2. jquery中prop()方法和attr()方法的区别

    最近在用jquery的时候遇到一个问题,那就是attr()方法,发现这个方法有时候使用会有一些说不出原因的问题.翻翻自己之前笔记发现,还有个函数prop(). 这两个函数都可以用来获取属性. jque ...

  3. uboot完全手册---14

    1. u-boot介绍 本次移植采用的是U-Boot-1.2.0版本. 3. U-Boot源码分析 3.1 源码入口的解释 可能大多数的同学上网查资料后都了解到,stage1阶段的启动代码,主要就在s ...

  4. leetcode 124. Binary Tree Maximum Path Sum ----- java

    Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...

  5. 1-3-2 Windows应用程序常用消息

    主要内容:介绍Windows编程中常用的消息 1.WM_LBUTTONDOWN产生单击鼠标左键的消息 lParam: 低字节包含当前光标的X坐标值 X = LOWORD(lParam); 高字节包含当 ...

  6. Android—菜单

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  7. 深入理解javascript的闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...

  8. 【BZOJ1007】【HNOI2008】水平可见直线

    依旧看黄学长代码,不过这回是看完后自己写的 原题: 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例 ...

  9. 如何在远程计算机上运行PowerShell

    问题: 不能在WORKGROUP里面的远程计算机里运行PowerShell指令,报错为用户名密码错 解决方法: 把两台机器上(远程计算机其和本机)都加入到trustedhosts 具体请参考 http ...

  10. postgresql downgrade issue

    Q: Dear Support Team, If we use ubuntu server to install postgresql9.4, how can we keep original dat ...