一直不明白 hook 与 注入 有什么区别,关系

一直不明白 hook 与 注入 有什么区别,关系,第1张

注入跟hook确实有密不可分的联系,我们通常都是把这两者放到一起来谈,导致很多人认为它们是一回事。应用安全里面有一个概念叫完整性,指的是程序或数据不能被攻击者恶意篡改。根据篡改时刻的不同,我们有两类方式来破坏应用的完整性:静态和动态。在安卓上,静态的篡改方式是反编译apk,修改或添加代码后重打包,用户只要安装了这个修改过的apk,运行时攻击者的代码就会被加载到进程空间。动态的篡改方法就是hook。如果我要篡改代码,那么我要实现的就是在程序将要执行某段逻辑的时候控制它去执行我的代码,这个行为就叫hook。一个运行时的程序表现形式是进程,代码跟数据都放在自己的进程里面。那么问题来了, *** 作系统隔离了进程,我的代码在我的进程里,别人的代码在别人的进程里,别人的进程是不能跳到我的进程来执行我的代码的,这怎么办呢,所以要先想办法把代码注入到别人的进程里。之前提到的重打包也算是一种静态的注入方法,动态的注入方法在安卓上与Linux的共享库注入是类似的,这种方法网上用的最多的应该是看雪的古河发布的libinject。另外还有Xposed,它采取了一种特殊的注入方法,是动静结合的。

首先xampp的安装简单说下,点击适用于linux 的xampp以及安装步骤按照官网列出的步骤一步步就能够安装成功了。

当你安装成功之后,可能在从web访问phpmyadmin的时候遇到禁止访问的问题。这篇文章就是解决这个问题而写的,是本人自己摸索出来的解决方法。

1.首先假定你的xampp安装在了/opt/lampp/目录下。

2.打开文件/opt/lampp/etc/extra/httpd-xampp.conf

3.找到<Directory “/opt/lampp/phpmyadmin”>

4.在其中添加一行:Require all granted

5.最终的效果是:

# since XAMPP 1.4.3

<Directory “/opt/lampp/phpMyAdmin-3.4.5-english”>

AllowOverride AuthConfig Limit

Require all granted

Order allow,deny

Allow from all

</Directory>

6.这样再重新刷新一下或者重启一下浏览器就可以访问phpmyadmin了!

Linux平台SO替换可以分为静态替换和动态替换:静态替换利用文件 *** 作直接替换SO,新SO在下次加载时生效;动态替换利用代码注入替换目标进程内存空间,实现新SO的加载和替换,新SO立即生效。

静态替换

针对未被加载的SO,利用复制命令(cp new.so old.so)即可直接完成静态替换,新SO在下次加载时生效。对于已经加载的原SO,直接用新SO复制替换将会导致相应程序崩溃,此种情况可以使用删除原SO(rm -f old.so)或修改原SO名称(mv old.so oldx.so)后,再复制新SO的方法代替,新SO同样在下次加载时生效。

程序崩溃的原因是复制替换 *** 作会破坏系统访问原SO的索引节点inode,导致系统找不到原SO。系统为每个加载到内存中的文件创建对应的inode,用来管理该文件,inode包含了文件的元信息,如文件字节数、拥有者ID、读写执行权限等。系统以inode标识程 序加载的SO,不再关心文件名,修改SO名称并未改变对应inode,因此程序可以继续正常运行;删除SO只是无法查看,系统直到程序释放SO后才真正删除SO和inode,因此程序也可以继续正常运行;但是在直接复制替换时,新SO将会继承原SO的inode,程序无法继续访问原SO,从而导致程序崩溃。

动态替换

针对已经被程序加载的SO,为了实现不停止程序,替换后的SO立即生效的目的,可以采用动态替换。

动态替换的对象既可以是SO整体,也可以是SO中的特定函数。两者的区别主要是整体替换需要在特定函数替换的基础上再增加SO加载及输出函数重定位等过程。由于时间有限, 本文仅介绍特定函数动态替换的基本原理和初步实现,SO整体替换感兴趣的 读者可以自行尝试。

SO特定函数动态替换主要包括三个关键过程:控制目标进程,构造替换内容和确定替换地址,实际上依次解决的就是利用什么替换、替换什么内容和替换到哪里的问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/6252325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存