应用安全里面有一个概念叫完整性,指的是程序或数据不能被攻击者恶意篡改。根据篡改时刻的不同,我们有两类方式来破坏应用的完整性:静态和动态。
在安卓上,静态的篡改方式是反编译apk,修改或添加代码后重打包,用户只要安装了这个修改过的apk,运行时攻击者的代码就会被加载到进程空间。
动态的篡改方法就是hook。如果我要篡改代码,那么我要实现的就是在程序将要执行某段逻辑的时候控制它去执行我的代码,这个行为就叫hook。
一个运行时的程序表现形式是进程,代码跟数据都放在自己的进程里面。那么问题来了, *** 作系统隔离了进程,我的代码在我的进程里,别人的代码在别人的进程里,别人的进程是不能跳到我的进程来执行我的代码的,这怎么办呢,所以要先想办法把代码注入到别人的进程里。之前提到的重打包也算是一种静态的注入方法,动态的注入方法在安卓上与Linux的共享库注入是类似的,这种方法网上用的最多的应该是看雪的古河发布的libinject。另外还有Xposed,它采取了一种特殊的注入方法,是动静结合的。
要在一个没有源码的程序里添加一个没有的项,这点不太现实,但是你可以用替换的方法改变原有选项的功能,比如说"文件"菜单里有"打开文件"这个选项,你可以使用汇编打内存补丁的方式来替换原来的功能,需要比较高的汇编技术,至于你说的HOOK,这里说一下,HOOK分2种,1种是Windows的消息HOOK,所能执行的功能相当有限,包括窗口消息,键盘,鼠标等等,还有一种就是函数HOOK,编写得当的话可以HOOK基本上的所有函数,至于使用哪种方式还得要看你需要执行什么样的 *** 作,比如说,原来你点击"关闭"这个按钮是退出程序的,可以使用Windows的消息HOOK把退出程序改成d出对话框楼上的那位说的什么接口,一般指的是DLL,不是EXE
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)