首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原创Paper | StealthHook - 一种在不修改内存保护的情况下挂钩函数的方法

作者:The_Itach1@知道创宇404实验室 日期:2022年12月23日 最近看了一下x86matthew关于hook方法的一篇文章https://www.x86matthew.com/view_post...此hook方式,实际上并没有去hook目标函数,而是通过目标函数内的子函数,去获取了进入目标函数时,栈上保存的返回地址,通过修改这个地址,即可劫持执行流程,在函数返回前,执行我们的代码。...接着,我们本来会调用CreateFile内部的一个子函数,但是其已被我们hook现在变成了HookStub()函数,我们在HookStub()打断点,发现其对栈偏移100处进行了修改,这个地址保存的就是原...然后在CreatFile函数内部最后的ret指令处打个断点,发现返回地址已被修改,不会跳转到main函数了,而是跳转到ModifyReturnValue()。...,打上了硬件断点,这个异常会被我们自己的异常处理函数所捕获,获取了esp寄存器的值,并且在返回地址处又打了个硬件断点。

66821
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python基础学习16----模块

    模块(Module)的引入 import 模块名 调用模块中的函数的方式为 模块名.函数名 这种方式引入会相当于将模块中代码执行一遍,所以如果引入的模块中有输出语句,那么只写import 模块名,运行也会显示输出...若想只引入模块中的某个函数,可以使用如下方法 from 模块名 import 函数名 这样可以直接使用函数名调用函数 但是有一个问题需要注意,这样虽然只引入了所需要的函数,但是如上所说,若模块中有输出语句...3.默认路径,由安装过程决定的 搜索路径都存储在 system 模块的 sys.path 变量中,若我们想要寻找到我们自定义的不再当前目录的模块,那么我们可以在sys.path中 添加程序文件所在的路径...)#yes 然后还有一种特殊的情况 for i in config["bitbucket.org"]: print(i) 一般人会认为这里输出的是bitbucket.org中的键,但其实输出的是...") config.write(open ("example.ini","w")) 判断是否存在 print(config.has_section("bitbucket.org")) 修改 config.set

    44020

    面向对象相关模块

    (摘要算法,检测一个字符串是否发生了变化) 应涂:1.做文件校验    2.登录密码       密码不能解密,但可以撞库,用‘加盐’的方法就可以解决撞库的问题。...,这样日志会被存储在指定的文件中。...4 filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。 5 format:指定handler使用的日志显示格式。...,也可以输入到屏幕 可以同时在几个文件中输出 1 import logging 2 def mylogger(filename,file=True,stream=True): 3 logger...Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。

    25710

    Python全栈开发-常用模块学习

    文件(文件名:test.py,模块名就是:test)   包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个init.py文件)   2)导入方法:   import module_name   ...等同于把该模块下的所有代码复制到当前主程序。不推荐使用该方法,是因为可能会和主程序中的某些函数重名,而被覆盖。所以不推荐使用该方法。   ...# 这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。 # list, tuple, 字符串都属于sequence。...path所指向的文件或者目录的最后修改时间 5、sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时...模块 用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。

    85730

    初窥dep

    这里,我也打算“尝尝鲜”,在本篇文章中和大家一起窥探和试用一下dep。 一、Go包管理的演进历史 1、go get 在管窥dep之前,我们先来简单看看Go语言包管理的演进历史。...在编译时(godep go build)godep通过临时修改GOPATH环境变量的方法让go编译器使用缓存在Godeps/_workspace下的项目依赖的特定版本的第三方包,这样保证了项目不再受制于依赖的第三方包的...constraint)写入项目根目录下的Gopkg.toml文件中; - 将项目依赖的所有第三方包(包括直接依赖和传递依赖transitive dependency)在满足Gopkg.toml中约束范围内的最新...version依旧是v1.4.0,并没有修改。...第一种情况,我们称之为dep init的network mode,即dep发现本地GOPATH下面没有zap,于是dep init通过network到upstream上查找zap,并“Dep will

    1.8K80

    非root安装Lefse软件及其数据分析「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 说明 Lefse软件是宏组学物种研究常用软件,一般大家用在线版本即可。但要搭建在Linux集群环境中有点烦,记录一下折腾过程。...lefse下载地址:https://bitbucket.org/nsegata/lefse/src/default/。这个网站有丰富的学习内容和教程,包括MetaPhIAn等流程,有时间去好好看看。...lefse放在了bitbucket上,克隆一下到集群: hg clone https://bitbucket.org/nsegata/lefse 完成后有如下文件: 目录下有个requirement.txt...python的大部分模块也没问题,难就难在了rpy2。...我看它这里rpy2版本也有较高要求,于是下载了个2.9版本的(各旧版本 ),结果还是太高,你特么不是python2写的吗!不支持python2。

    1.3K20

    爬虫 (二十二) 最常见的文件操作模块(值得收藏) (十三)

    返回path所指向的文件或者目录的最后修改时间 ?...:将path进行组合,若其中有绝对路径,则之前的path将被删除 >>> os.path.split('D:\\pythontest\\ostest\\Hello.py') >>> os.path.split...os.path.getmtime(path):文件或文件夹的最后修改时间,从新纪元到访问时的秒数 os.path.getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数 os.path.getctime...、路径在不同操作系统中的表现形式参数,如: >>> os.sep '\\' >>> os.extsep '.' >>> os.pathsep ';' >>> os.linesep '\r\n' 8 在读文件的时候往往需要遍历文件夹....html 情况一:在一个目录下面只有文件,没有文件夹的时候,这个时候可以使用os.listdir 情况二:在递归的情况,一个目录下面既有目录也有文件,使用os.walk 9.1 情况1详解 在我们的桌面上有一个

    96730

    Python之几种常用模块

    st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 st_atime: 上次访问的时间。 st_mtime: 最后一次修改的时间。...比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来。...= f['key'] f.close() print(existing) 由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存...如果假定用户无法修改登录名,就可以通过把登录名作为Salt的一部分来计算MD5,从而实现相同口令的用户也存储不同的MD5。 摘要算法在很多地方都有广泛的应用。...FiledHandler,这样日志会被存储在指定的文件中。

    1.4K70

    在NVIDIA Jetson TX2上安装TensorFlow

    刷机的操作按照官方教程即可,比较容易。这个过程中有一点需要注意:Jetson TX2和宿主机Host必须连接在同一个路由器之下。...刷机开始的时候需要将TX2设置到RECOVRY MODE,设置方法在安装过程中会给出提示,请仔细阅读该提示即可完成操作。...中修改TF源码关于NUMA的部分。...可能在你修改的时候,你会发现有所不同,文件tensorflow/stream_executor/cuda/cuda_gpu_executor.cc中的TryToReadNumaNode()函数源码中已经添加了对...否则,请阅读下面内容,完成类似修改由于TX2的ARM架构不支持NUMA,所以在build TensorFlow之前需要修改一下clone到本地的源码,具体中添加如下两行内容,避免后面使用TF的时候出现错误

    1.9K20

    在 OS X 上使用 Docker

    在终端中使用以下的代码来获取示例程序: git clone https://bitbucket.org/ariya/docker-hellogo.git cd docker-hellogo 下面是仓库中的...对那些使用 OS X 系统的用户来说,我们幸运的找到了至少两个可能的方法来实现以上的这些步骤,而不需要创建一个 Linux 虚拟机并在虚拟机中运行这些教程。...第二个选择是使用一个 运行 Linux 的虚拟机,然后在虚拟机中使用 Docker。尽管这里额外引进了一个层级并因此导致了一些额外的开销,但在很多情况下这个方法都能很好的工作。...为了说明这一点,在我们提供的 git 仓库中有一个 Vagrantfile 文件: VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION...然后,在 Ubuntu 系统内,又有着一个运行着 CentOS 6.5 的容器。一个简单的基于 Go 语言的 HTTP 服务器正运行在这个容器内容。这一切很好玩,不是吗?

    3.3K80

    在OS X上的Docker

    我已经在bitbucket.org/ariya/docker-hellogo 准备了一个演示,你可以跟随这个演示。...挺明确的,不是吗? 第二个选择是让虚拟机运行Linux并从那里使用Docker。这确实是一个额外的层面和一些额外的开销,但在很多情况下,它仍然工作得很好。...为了说明这一点,在Git的回复中有一个Vagrantfile: VAGRANTFILE_API_VERSION =“2” Vagrant.configure(VAGRANTFILE_API_VERSION...您的OS X机器在基于VirtualBox的虚拟机中运行Ubuntu 14.04系统。现在,在这个Ubuntu系统中,还有一个CentOS 6.5系统在容器中运行。...简单的基于Go的HTTP服务器正在该容器中执行。很有趣,不是吗? 最后但是最重要的一点,全新的Vagrant 1.6版本对Docker作为一个新的提供者有正式的支持。

    1.4K80

    在OS X上运行Docker

    我已经在bitbucket.org/ariya/docker-hellogo准备了一个演示,你可以跟着操作。...现在你可以像上面说的一样运行docker build以及docker run命令了(请去掉sudo)。挺简单的,不是吗? 第二个选择是让虚拟机运行Linux然后在其中使用Docker。...这确实增加了一些额外的步骤和性能开销,但在很多情况下,这个方法仍然工作得很好。很显然,手动创建虚拟机不是你通常会做的事情。我们可以利用Vagrant和VirtualBox。...为了说明这一点,在Git仓库中有这样一个Vagrantfile文件,内容如下: VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION...而简单的基于Go的HTTP服务器正在该容器中执行。这很有意思,不是吗? 最后但同样重要的一点,新版的Vagrant 1.6版本作为一个提供者正式支持了Docker。

    1.9K60
    领券