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

linuxso注入与更新原理

简介 之前写了个hookso的工具,用来操作linux进程的动态链接库行为,本文从so注入与更新入手,简单讲解一下其中的原理,配合源码阅读效果更佳。...原理 不管是更新so还是其他方式操作so,都要先注入才行。所以先考虑如何注入so。 其实往一个进程注入so的方法,很简单,让进程自己调用一下dlopen即可。...函数查找 我们知道,linux的可执行文件是elf文件格式,动态链接库其实也是elf格式。关于elf,有很多资料,这里简单讲一下elf结构。...下一步就开始具体的更新操作了。 用户函数更新 如前所述,我们可以随意注入so到某个进程,也能找到某个so的某个函数的地址。那么更新其实比较简单。这里分为了两种,分别是内部函数、外部函数。...= 0) { close_so(pid, handle); return -1; } 图示 两种替换的示意图如下: 6.png Lua绑定更新 前面我们已经完成了常见的函数更新

10.5K50

linuxso注入与更新原理 | 直播回顾

文件)在Linux中使用非常广泛,对于后台开发来说,服务器进程往往加载和使用了很多的SO文件,当需要更新某个SO时往往需要重启进程。...本课程将讲述如何做到不重启进程,而将so的修改更新生效! 原理 不管是更新so还是其他方式操作so,都要先注入才行。所以先考虑如何注入so。...函数查找 我们知道,linux的可执行文件是elf文件格式,动态链接库其实也是elf格式。关于elf,有很多资料,这里简单讲一下elf结构。...用户函数更新 如前所述,我们可以随意注入so到某个进程,也能找到某个so的某个函数的地址。那么更新其实比较简单。这里分为了两种,分别是内部函数、外部函数。...= 0) { close_so(pid, handle); return -1;} 图示 两种替换的示意图如下: 函数指针绑定更新 前面我们已经完成了常见的函数更新,对于某些项目,比如

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

Android so库的更新问题

本来想写资源的修复的,虽然方案差不多已经完成了,但是考虑到一些敏感问题,资源修复就不写了。那就来写写so修复,其原理和class的修复是一样的,但是so修复的需求并不高,就当做学习吧。...首先来总结一下Android的ClassLoader方式的更新,这种方式类的查找过程是通过BaseDexClassLoader来完成的,最终会通过成员变量DexPathList对象中的findClass...Arrays.asList(dexElementsSuppressedExceptions)); } return null; } 只需将patch的class插入到dexElements最前面即可完成更新...数组,这是一个File文件夹数组,看其文件夹下是否存在对应的so,并且是否可读,如果满足条件,则直接返回。...总结 以上所述是小编给大家介绍的Android so库的更新问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

68440

linux 什么是SO文件

下面的内容大多都是连接中的,穿插我自己的笔记 牵扯到ELF格式,gcc编译选项待补,简单实用的说明一下,对Linux下的so文件有个实际性的认识。 1.so文件是什么?...2.怎么生成以及使用一个so动态库文件? 3.地址空间,以及线程安全. 4.库的初始化,解析: 5.使用我们自己库里的函数替换系统函数: 1.so文件是什么?...———————————————————————- 链接:得到输出文件libs.so gcc -g -shared -Wl,-soname,libs.so -o libs.so libs.o -lc...这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。   .../ts 关键就在LD_PRELOAD上了,这个路径指定的so将在所有的so之前加载,并且符号会覆盖后面加载的so文件中的符号。如果可执行文件的权限不合适(SID),这个变量会被忽略。 执行:.

5.6K20

更新

什么是更新? 不停机更新,实时更新。HotUpdateHotFix Unity中需要APP重启 真正热更新不重启就做更新 为什么做更新?...Android应用的更新: 1.将要执行的代码编译为库文件assembly dll.动态链接库 通过反射的方式再Unity中加载被打包的dll文件并执行: 将dll打包成AB包,通过www加载在...(不会被压缩,持久化目录,只可读,不能坐更新) Application.datapath(asset文件夹下面的路径,也不能做更新) Application.persistentDataPath...可读可写,没有任何内容限制,从服务器上下载的AB资源,都会放到这个文件夹下进行更新) 加载资源流程 开始游戏->读取本地版本号信息->去服务器指定地址下载服务器版本号信息->对比两个版本号信息->如果不一致...ULua 基于反射 性能较差 效率低 速度慢 gcalloc频繁 停止维护只能支持到Unity3D 5.0以前 ToLua 使用的人多 维护起来快 各种静态方法效率高 要被更新文件必须使用Lua

1.8K20

Android so升级尝试

作者:张志伟 团长:腾讯移动品质中心TMQ 一、So升级尝试 在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。...即使能够加载到同一地址,如果升级造成so文件变化,那函数地址也是不准确的。所以要使新的so工作,那我们也必须要设法更新虚拟机已经保存的函数指针,将其指向新加载so的正确地址。...[gm2rXUV.png] 使用RegisterNatives注册后,即使so的地址发生变化,也能够更新虚拟机中记录的函数地址。...[Ir8RGSx.png] 本篇小结 如果想要在运行时更新so,则新的so文件必须要实现JNI_Onload函数,并且在JNI_Onload中调用系统提供的RegisterNatives注册所有的JNI...CRASH 卸载so后,除了JNI函数的指针,其它指向so地址的指针也都会失效,包括指向静态变量,常量,native函数的指针等。所有引用到该so地址的指针都需要更新

1.6K00

Android so升级尝试

一、So升级尝试 在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。但和Android的许多特性一样,只提供了加载,而没有卸载和更换等功能。...二、卸载及重新加载 如果想要提供热升级的能力,首先要做的是关闭已打开的so文件。但Android虚拟机没有提供unloadLibrary这样的接口,因此需要我们自己自己实现。...即使能够加载到同一地址,如果升级造成so文件变化,那函数地址也是不准确的。所以要使新的so工作,那我们也必须要设法更新虚拟机已经保存的函数指针,将其指向新加载so的正确地址。...本篇小结 如果想要在运行时更新so,则新的so文件必须要实现JNI_Onload函数,并且在JNI_Onload中调用系统提供的RegisterNatives注册所有的JNI函数,不能使用自动查找JNI...CRASH 卸载so后,除了JNI函数的指针,其它指向so地址的指针也都会失效,包括指向静态变量,常量,native函数的指针等。所有引用到该so地址的指针都需要更新

1.5K20

Webpack多入口文件更新等体验

用manifest实现js库的增量更新 如果输出文件名包含hash值,需要引入以下两个插件: HashedModuleIdsPlugin:算hash值 利用CommonsChunkPlugin配置,他是...manifest配置模块所有的依赖抽象,如果mainfest不更新,则html会找不到js文件。...autoprefixer:一个postcss的插件,用于css3的兼容前端处理 browsers:配置浏览器的版本,如:browsers:['last 2 versions'] 四、更新 安装 webpack-dev-server...更新的概念 利用websocket实现,websocket-server识别到html、css和js的改变,就向websocket-client发送一个消息,websocket-client判断如果是...inline: true, /*无效*/ historyApiFallback: true }); server.listen(8080); } 说明: hot:启动更新

2.6K60

🤔 如何隐藏你的更新 bundle 文件

我们的更新平台和出事的 APP 原理相似,所以也存在着拒审危险。那么我们就要想一些办法,隐藏更新 bundle,不被审核人员发现。...对于更新技术,Apple 在 2017 年封杀过一次 JSPatch[1] 这个更新框架,导致很多的 APP 被拒审,根据 Apple 官方给出的理由,主要有三点: 更新代码没有做好加密和校验,...其实对于 Apple 官方来说,对与动态化更新的态度向来是不赞成也不反对,和 JSPatch 比起来,React Native 和游戏更新这两种应用场景还是被允许的,主要还是体现在三点: 网游这种重运营的场景还是需要更新维持活动热度的...我们在传输更新 bundle 文件时,可以把 bundle 文件隐写在一张图片里,这样审核人员在做流量监控的时候,抓包看到的是一张图片,如果不检查图片的二进制编码,是不会发现里面隐藏了数据的。...,虽然我们是良民,但是一定程度上还是要隐藏一下更新 bundle,规避不必要的麻烦;隐藏更新 bundle 我们可以从信源加密和信道加密两个角度去思考,综合来看就是灵活利用密码学知识,对网络数据进行加密

2.5K21

flutter更新

flutter更新更新flutter页面,我们首先要搞明白我们到底需要动态替换一些什么?...因此这里需要对flutter构建的产物有一定的了解了,怕有些小伙伴不太明白,这里也简单的带一下;如上图所示,实际上,我们只需要copy一些aar文件so文件到native工程lib目录,就可以已aar...当然是进行修复了,那么修复,我们要提供那些文件出来呢,都需要提供吗?...答案是,并不需要都提供,如果是逻辑问题,而且这是我们大概率会遇到的问题,切发生的最多的线上问题,并不涉及到资源的话,我们只需要替换libapp.so即可实现更新。...Flutter加载 libapp.so,换句话说,就是想办法让flutter加载tinker为我们准备好的修复后的so

2.9K80

Java更新

背景 最近参与开发一个java项目,每次修改调试时就需要重启进程,由于工程较大,进程初始化任务较多,重启较慢,严重影响了开发效率,因此花了点时间研究java更新机制,在项目中引入更新后,...本文会先简单介绍更新需要使用到的技术:代理、动态字节码修改,然后分别讨论开源更新工具SpringLoaded和商用更新工具Jrebel的使用,最后总结下自己破解最新版Jrebel的方式。 2....Java更新 目前Java更新主要有三种方式: 定义不同的ClassLoader,当监听到文件变化后,通过新的ClassLoader加载新文件,已有对象的状态需要更新,如果有类的相关依赖还需要手动设置...Jrebel Jrebel是一款商用的更新工具,收费标准是每年550刀,通过监听指定目录中class文件的变化进行更新,能够实时增删改方法、属性。...agentpath:指定官网下载的jrebel压缩包中的liejrebel64.so路径,更时需要用到压缩包中的其他文件,如jrebel.jar,需要保持该压缩包的完整性。

1.6K40

什么是.so文件_安卓so文件作用

so文件Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据 linux下何谓.so文件: 用过windows的同学应该都知道 .dll文件吧, 这二者有什么共通之处呢,其实 .so文件就跟....dll文件差不多 一般来说.so文件就是常说的动态链接库, 都是C或C++编译出来的。...与Java比较就是:它通常是用的Class文件(字节码) Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库 那么.so文件是怎么用的呢?...for example:  (1) 动态库的编译 这里有一个头文件so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so...(2) 动态库的链接 这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test: 命令:$ gcc test.c -L.

3.1K30

Lua更新

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。...若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) r+ 以可读写方式打开文件,该文件必须存在。...w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。...a+ 与a类似,但此文件可读可写 b 二进制模式,如果文件是二进制文件,可以加上b + 号表示对文件既可以读也可以写 io.input(file) -- 设置默认输入文件为 test.lua print...这也就可以说:Unity中更新开发,尽量不要去用自动垃圾回收 对所有代码都严格审核规范 数据类型知识点 多脚本执行 面向对象 对每一个知识点都做细节 lua知识点覆盖,并能够应用于学习和工作当中

3.1K10

linux中把.c的文件编译成.so文件

linux中共享库以so为后缀(shared object),与Windows下的DLL类似,是在程序运行时动态连接。多个进程可以连接同一个共享库。...以下以编译mylib.c为例讲如何编译.so文件。 首先,编译mylib.c: $gcc -c -fPIC -o mylib.o mylib.c -c表示只编译(compile),而不连接。...-o选项用于说明输出(output)文件名。gcc将生成一个目标(object)文件mylib.o。 注意-fPIC选项。PIC指Position Independent Code。...生成共享库: $gcc -shared -o mylib.so mylib.o 库文件以lib开始。共享库文件以.so为后缀。-shared表示生成一个共享库。...总结 以上所述是小编给大家介绍的linux中把.c的文件编译成.so文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

9.2K93

so文件在线加固加密_安卓so文件解密

大家好,又见面了,我是你们的朋友全栈君 这篇是一系列的关于SO文件保护的自我理解,SO文件保护分为加固,混淆以及最近炒的比较火的虚拟机...加固就是将真正的so代码保护起来,不让攻击者那么轻易的发现,至于混淆,由于ART机制的介入,使得O-LLVM越来越火,这以后有机会再分析,这次主要是基于有源码的so文件保护,下次介绍无源码的so文件保护...} _error: fclose(fp); return ret; } 在这里重点解释这个解密函数: 首先看到的是getLibAddr()这个函数:在介绍这个函数之前首先了解一个内存映射问题: 和Linux...ok,以上编写完以后就编译生成.so文件。...2.对得到的.so文件进行加密:这一块也是一个重点,大致上逻辑我们可以这么认为:先找到那个我们自己所定义的节,然后找到对应的offset和size,最后进行加密,加密完以后重新的写到另一个新的.so文件

3K40

Unity3d更新之xLua更新

毕竟有些地方还是有些区别的获取全局变量其实获取全局变量还是比较容易的,首先在项目的Lua文件中创建两个lua脚本-- main.luaprint("主lua脚本_main.lua_文件启动")require...test.luaprint("test.lua脚本调用")testNumber=1testBool=truetestFloat=1.25testString="123" 下面就可以直接用c#来获取lua文件夹中的...callBackOne(); //到这里就完成了lua中的方法的调用通过Unity3D自带的委托来实现函数的调用//初始化lua解析器LuaMgr.GetInstance().Init();//执行lua文件...解析器自带的来实现函数的调用Lua解析器也是提供了获取函数的方式,但是官方也有提到这种方式会造成一些垃圾,因此建议少用//初始化lua解析器LuaMgr.GetInstance().Init();//执行lua文件...return a+1end这里对于有参数或者有返回的用法是有一些不一样的,因为对于无参无返回是系统内置好的,但是对于有参有返回,多返回以及不定参数,由于系统并未自带,因此需要点击这时在xLua/Gen文件夹中会生成相应的文件

2.8K20
领券