首页 > 其他分享 >简单方法使 kernel32.dll 发生重定位

简单方法使 kernel32.dll 发生重定位

时间:2024-02-03 20:23:52浏览次数:35  
标签:定位 kernel32 dll Windows 地址 线程 加载

简单方法使 kernel32.dll 发生重定位

系统启动后 kernel32.dll 在每个进程的加载地址都相同。。。。吗?

相信很多人都知道这个,因为这个是远程线程注入的基础,类似的还有user32.dll之类的系统dll。

不过这个概念是错误的,或者说它在绝大多数时候是正确的

因为通常来说这些系统dll默认在不同进程中保持相同的地址(通过观察它们在不同进程中加载的地址可以确定这一点),不过在有些情况下可能会使得它们发生重定位,比如在这些dll还没有加载之前,如果有一个方法把加载的目标地址给占住,那么就可以使得重定位发生(ntdll.dll除外)。

当然你在中文网站上搜索基本都是告诉你,啊重启后是相同的之类的,还要给你解释一堆,当年我刚刚接触远程线程注入的时候也是在网上找到相关的资料,不过后来我想到如果把ASLR关了,然后把基址写成和kernel32.dll相同的地址它可行吗?

操作环境如下

Windows 10 Enterprise LTSC 19044.3930
Microsoft Visual Studio Professional 2022 Version 17.8.6

在我的系统上当前某个进程中kernel32.dll的地址如下

Base=771D0000
Module=kernel32.dll
Party=System
Path=C:\Windows\SysWOW64\kernel32.dll

现在用vs来新建一个项目,全部都是默认配置,但关闭ASLR和把默认基址改成0x771D0000

接下来我们将会看到神奇的一幕,0x00480000的kernel32.dll你见过吗?

Base=00480000
Module=kernel32.dll
Party=System
Path=C:\Windows\SysWOW64\kernel32.dll

重新打开一个进程,可以发现,只是当前的test.exe的kernel32.dll发生了重定位而已

而且它是完全可以正常运行的,但会不会有其它副作用很难说。

现在大家应该知道了 所谓 系统启动后 kernel32.dll 在每个进程的加载地址都相同 其实是个错误的概念,或者说以前是对的,现在已经不适用了,而且这种方法基本上除了ntdll.dll以外的所有dll都可以。

最初学习远程线程注入的时候我就注意到了这点,但我并不是什么Windows系统大神,很难去解释这是为什么,而且也很难去搜索原因,而且我也不是挂哥,很少用到这种功能,就没有去深究了,
几年前录过一个dll注入方法简介的视频也谈到过这点,即 远程线程注入获取的那个地址只是个巧合罢了,https://www.bilibili.com/video/BV1pW4y1m7gh/,当然评论区也有人给我抬杠,显然他们没真正去做过实验。

写这篇文章主要是因为今天偶然又刷到了一篇文章,还在说这件事,但是评论区有一个人的回答可能才是这个问题的真正原因所在。https://bbs.kanxue.com/thread-279591.htm

标签:定位,kernel32,dll,Windows,地址,线程,加载
From: https://www.cnblogs.com/Dir-A/p/18005137

相关文章

  • 用VB6.0封装DLL组件并在EXCEL中调用
    使用程序:1、MicrosoftOfficeExcel20032、MicrosoftVisualBasic6.0 案例:在工作表的C1单元格得出A1单元格+B1单元格的值。设计的VBA代码:SubTest()  OnErrorResumeNext  Range("C1")=Cells(1,1)+Cells(1,2)EndSub  第一部分、使用VB6.0制作DL......
  • css 相对定位与绝对定位
     这种效果,如果来实现呢?一般会有一些三方的组件,比如Icon图标 van-icon。  也可以手工写下: <divclass="container"><divclass="item_dot"></div></div>容容.container{position:relative;/*容器采用相对定位*/...}右侧角标  .item_d......
  • 安装MySQL出现由于找不到vcruntime140_1.dll,无法继续执行代码的提示
    问题描述:在安装MySQL服务的时候,执行安装命令提示如下的错误信息。解决方法:通过分析可以知道,是由于缺少了vcruntime140_1.dll动态链接库文件,这是windows缺少vc_redist.x64.exe程序导致的服务安装错误,与我们要安装的MySQL服务并没有关系。(如果您的安装过VS类型的工具,就不会提示该......
  • 关于pycharm报错:Original error was: DLL load failed while importing _multiarray_u
    前提:遇到该问题时,已重新卸载并安装numpy,但由于今日重新打开pycharm,运行相同的代码,又再次报错,故重新寻找了新的方式进行尝试。原文地址解决方法:Step1:点击run,找到EditConfigurationsStep2:在EnvironmentVariables后加入:Path=Anaconda根目录\Library\bin......
  • 全流程机器视觉工程开发(四)PaddleDetection C++工程化应用部署到本地DLL以供软件调用
    前言我们之前跑了一个yolo的模型,然后我们通过PaddleDetection的库对这个模型进行了一定程度的调用,但是那个调用还是基于命令的调用,这样的库首先第一个不能部署到客户的电脑上,第二个用起来也非常不方便,那么我们可不可以直接将Paddle的库直接做成一个DLL部署到我们的软件上呢?答案是......
  • SpringBoot中两种常用定位切点的方法
    有时候,我们使用AOP来进行放的增强,编写切面类的时候,需要定位在哪个方法上试用该切面进行增强,本文主要讲解两种在SpringBoot中定位切点的方法,一种是使用execution表达式的方法,一种则是利用自定义注解的方法。execution表达式execution表达式的方式主要是在定义切点的时候,通过表达......
  • Android原生定位
    使用LocationManager和LocationListener结合进行简单定位功能1.创建LocationManagerLocationManagerlocationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);2.创建LocationListenerprivatefinalLocationListenerlocationListener=newLocati......
  • 【UI自动化基础】元素定位
    元素定位元素定位的定义元素定位是指查找元素HTML代码的过程元素HTML代码指的是从开始标签到结束标签之间的所有代码find_element定位一个元素find_elements定位多个元素元素定位方法by_id当元素具有id属性时,可以通过by_id定位元素方法:driver.find_element_by_id('id......
  • 【APP自动化测试】APP元素定位工具
    appium做移动端自动化测试,定位元素工具uiautomatorviewerAppiumInspectorweditor前置条件:已连接真机或手机模拟器,adbdevices有显示连接的手机列表。uiautomatorvieweruiautomatorviewer是android-sdk自带的一个元素定位工具,目录D:\xxx\android-sdk-windows\tools。......
  • BDS/GNSS/GPS卫星定位SOC芯片AT6558R
    产品简介AT6558R是一款高性能BDS/GNSS多模卫星导航接收机SOC单芯片,片上集成射频前端,数字基带处理器,32位的RISCCPU,电源管理功能。芯片支持多种卫星导航系统,包括中国的北斗卫星导航系统BDS,美国的GPS,俄罗斯的GLONASS,日本QZSS系统,并实现多系统联合定位。芯片应用车载......