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

【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态文件操作 | 注入动态 加载 业务动态 | 业务动态启动 | pthread_create 线程开发 )

动态注入工具 使用 ptrace 函数强行向远程进程 注入动态 , 这种方法侵入性极大 , 会破坏远程进程的运行环境 , 因此该动态越简洁越好 ; 注入动态 就执行一个操作 , 就是加载...包含真正的逆向业务逻辑的 libnattive.so 动态 , 然后启动该动态即可 , 执行完毕后 , 马上在远程进程中销毁注入的 libbridge.so 动态 ; 一、加载 libnattive.so...动态 ---- 通过 注入工具 , 将 libbridge.so 注入到远程进程 后 , 远程进程中 , 会 为 libbridge.so 动态分配一块内存 , 并将其运行起来 ; libbridge.so...动态的主要操作是 加载 libnattive.so 动态 , 并执行该动态的 invoke 方法 ; libbridge.so 动态对应的 bridge.c 源码如下 : #include <...---- 在 libnattive.so 动态中 , 不能长时间维持 , 因为 注入工具 还要 获取到远程进程的控制权 , 退出 ptrace 函数调试状态 , detach 解除注入工具对远程进行的附着操作

81920

Android安全-SO动态注入

0x06 调用dlsym函数,获取SO中要执行的函数地址; 0x07 调用要执行的函数; 0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态注入...; (注:实际上,0x06和0x07并不属于SO动态注入的步骤,然而仅仅注入是完全没有意义的,通常我们需要执行SO中的函数) 0x3 实现 0x01 获取目标进程的pid,关联目标进程...0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态注入: 调用ptrace_writedata(pid, (uint8_t *)saved_regs.ARM_sp...uint8_t *)sbuf, sizeof(sbuf))恢复堆栈,调用ptrace_setregs(pid, &saved_regs)恢复寄存器值,调用ptrace_detach(pid)解除关联,完成SO动态注入...dlopen error\n"); ptrace_getregs(pid, ®s); uint32_t r0 = regs.ARM_r0; DPRINTF("[+2]\t注入动态成功

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

    【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入动态注入 | 静态注入两种方式 | 修改动态重打包 | 修改 dataappxxlibs 动态 )

    文章目录 一、注入本质 二、静态注入动态注入 三、静态注入两种方式 ( 修改动态重打包 | 修改 /data/app/packageName/libs/ 下的动态 ) 一、注入本质 ---- 进程注入本质...分析应用结构 | 定位动态位置 | 定位动态中的修改点 | 修改动态 | 重打包 ) 博客 , 修改了 Unity3D 的一个动态的汇编代码指令 , 然后将修改后的动态重打包回 APK 文件中...中的动态注入方式 是 静态注入 , 修改静态的动态文件 ; 使用 ptrace 函数 , 在程序运行后 , 向进程内存中注入 动态 , 动过注入动态 查询 修改内存 , 这种方式是 动态注入...; 三、静态注入两种方式 ( 修改动态重打包 | 修改 /data/app/packageName/libs/ 下的动态 ) ---- 静态修改的两种方式 : 方式一 : 直接修改 APK 中的动态..., 然后进行重打包 ; 方式二 : 如果遇到不能进行重打包 , 还想要静态注入的情况 , 可以修改 /data/app/包名/libs/ 目录下的动态 , 这个动态可以进行修改 ;

    1.1K20

    Go标准plugin源码分析----动态使用

    但还有些场景,如需要以插件形式加载,方便动态更新,热重启等情况。这些场景的需求,就带来了plugin动态加载。 那么先看看plguin这个的文档。文档为1.10版本 ?...文件很少,就只有两个(其实源码里有三个文件) 只提供了两个接口 Open:加载so文件 Lookup:查找对应符号(包括func,var等) 文档中的示例 ?...两个接口的使用,Open加载文件,Lookup查找符号 示例中,有一个var,有一个func 那么再看下例子 ? 这个里面多了一个init 使用 ? 好了,下面看源码 源码目录 ?...这个是linux种标准的动态链接加载接口。 当然plugin只实现了封装了dlopen,dlsym,两个函数。这个和文档中所提供的接口和描述是符合的。 只提供了加载,并没有提供关闭。 继续看源码 ?...全局变量 pluginsMu:全局锁 plugins:保存加载的动态 open ? 进入函数,一开始是一些字符串的转换。 重点是加锁后,会判断是否已经在加载,或者已经加载过的plugin。

    1.3K30

    一个静态注入动态的工具: luject

    luject是一个静态注入动态的工具,它可以实现对mac, ios, linux, windows的可执行程序,动态程序进行修改,来插入指定动态实现注入和加载。...另外luject也实现了对ios的ipa包,android的apk包自己macOS的.app包的动态注入,重打包和重签名支持。...注入技术简介 我们可以通过ptrace附加或启动一个程序,然后将指定的动态注入进去,但很多情况下需要root权限才行。...除了通过动态注入,我们也可以通过设置DYLD_INSERT_LIBRARIES等环境变量的方式,来注入指定的动态,mac/ios程序就可以使用这种方式来简单快速地实现注入,例如: $DYLD_INSERT_LIBRARIES...这里luject就是利用了这个,通过修改可执行文件,插入动态加载路径,来实现静态注入,例如: auto elf_binary = std::unique_ptr

    1.5K10

    Tomcat Filter之动态注入

    前言 最近,看到好多不错的关于“无文件Webshell”的文章,对其中利用上下文动态注入Filter的技术做了一下简单验证,写一下测试总结,不依赖任何框架,仅想学习一下tomcat的filter。...简单记录一下我的理解: 过滤器(Filter):用来对指定的URL进行过滤处理,类似.net core里的中间件,例如登录验证过滤器可以用来限制资源的未授权访问; 过滤链(FilterChain):通过URL匹配动态将所有符合...找到最开始的ApplicationFilterChain位置,调用者是StandardWrapperValve的invoke,再观察invoke代码不难看出是用ApplicationFilterFactory动态生成的...ApplicationFilterChain filterChain = factory.createFilterChain(request, wrapper, servlet); createFilterChain根据xml配置动态生成一个过滤链...可知所有的filter信息都是从context(StandardContext)获取到的,所以假如可以获取到这个context就可以通过反射的方式修改filterMap和filterConfig从而达到动态注册

    1.3K30

    动态Shellcode注入工具 – Shellter

    Shellter是什么 这是一款真正意义上的动态Shellcode注入工具。“动态”二字就能够说明注入代码不可能存在于规则严格的地方,例如可执行文件的入口点等。...如何选择注入注入点是基于可执行文件的执行流程,实际上Shellter会追踪应用程序的用户空间执行流程,记录下这些指令,可执行文件发生注入的位置区间。...完成追踪之后,Shellter将基于注入代码的大小过滤执行流程,并且有多种过滤参数可得出有效的注入点。 Shellter还提供了其他特性 对于反病毒软件绕过来说,避免使用静态注入点是非常重要的。...(输入及输出) 没有静态PE模板,框架包装等 支持所有32位的有效载荷(通过metasploit生成或用户定制) 支持所有的编码 支持用户创建的自定义编码 废弃代码多变引擎 用户可自定义多变代码 利用动态线程背景信息防止静态分析...--目前仅手动模式 检测自修改代码 追踪单线程或多线程应用程序 基于执行流程的位置进行动态注入 反汇编向用户显示可用注射点 用户可自主选择如何注入,何时注入,在哪里进行注入 命令行注入 最重要的是免费

    1.1K10

    用expect脚本实现Xcode对越狱设备的动态注入

    越狱设备的动态注入 熟悉越狱开发的同学都知道只要动态放到越狱设备的/Library/MobileSubstrate/DynamicLibraries/目录中并配备一个同名的plist文件就可以实现任意应用程序启动时加载这些动态的能力...你可以借助一些第三方工具来创建一个Tweak程序,也可以在Xcode直接创建动态。...编辑这个plist文件,这个plist文件用于过滤加载动态的应用程序列表,里面具体的格式和内容定义请参考Tweak相关的教程。 构建出动态的真机运行版本。...工程示例 为了更好的演示通过expect脚本直接实现动态注入处理,我在github中建立了一个项目: https://github.com/youngsoft/YSCameraInjectTest...这个项目实现的功能就是简单的通过动态注入方法,在相机应用的拍照界面按钮上植入一个笑脸的图标。

    1K30

    【C 语言】动态封装与设计 ( 动态调用环境搭建 | 创建应用 | 拷贝动态相关文件到源码路径 | 导入头文件 | 配置动态引用 | 调用动态中的函数 )

    文章目录 一、在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二、拷贝 xxx.lib、xxx.dll、xxx.h 到源码路径 三、导入 xxx.h 头文件 四、配置动态引用...五、调用动态中的函数 一、在 Visual Studio 2019 中创建 " 控制台应用 " 程序 ---- 欢迎界面中 , 选择 " 创建新项目 " , 选择创建 " 控制台应用 " 项目类型...动态的 描述文件 xxx.lib , 动态文件 xxx.dll , 动态头文件 xxx.h , 拷贝到 项目的源码路径中 , 注意就是主函数源码所在的目录 ; 三、导入 xxx.h 头文件 --..." 选项 , 在弹出的对话框中 , 选择拷贝过来的 xxx.h 头文件 ; 此处 xxx.h 头文件 出现在 源文件 中 ; 将 xxx.h 头文件手动拖动到 " 头文件 " 中 ; 四、配置动态引用...导入头文件 , 即可调用动态中的函数 ;

    2.1K30

    【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入动态 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一、dlclose 函数简介 二、关闭注入的 libbridge.so 动态 三、恢复寄存器 四、脱离远程调试附着 一、dlclose 函数简介 ---- dlclose 函数的作用是 卸载一个...指定句柄 的动态 ; 包含头文件 : #include 函数原型 : int dlclose (void *handle); 参数说明 : void *handle : dlopen...函数返回的句柄 ; int 返回值 : 返回 0 说明成功 , 其它失败 ; 二、关闭注入的 libbridge.so 动态 ---- 参考 【Android 逆向】Android 进程注入工具开发...( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 ) 博客 , 调用 dlclose 函数 ; 首先 , 获取 目标进程 linker 中的 dlclose...直接设置远程进程的寄存器值 ; /* restore 恢复寄存器 */ ptrace_setregs(target_pid, &original_regs); 四、脱离远程调试附着 ---- 注入工具最后一步操作是

    57510

    动态

    格式的讲解(请看下方tdb格式说明) -> 动态在链接的时候, 只需要知道你所需符号所在的一个位置就行,不需要知道源码. -> 错误之所以存在就是链接的时候没有问题, 在运行的时候找不到了 动态与framework...-> 动态路径不对 解决Library not loaded错误 编译链接生成动态的时候, 去保存动态的路径 -> 动态的Macho文件Load_Command去保存自己的路径 进入动态目录...最好是在生产动态的时候, 路径就修改好 -> 改动态的脚本 -> 最后链接生成动态的时候 -> 添加参数-install_name 相对路径 查看@rpath定义(下方有做说明) -> 修改路径...loader_path说明,动动链接 可执行文件 -> 链接了一个动态, 但是同时我这个动态库里面 -> 链接的有其他的动态 注意: 此时编译应该从后往前编译 -> 即先编译最里面的动态 (01...它的作用是用于记录动态的一些信息, 包括导出的符号, 动态的架构信息, 动态的依赖信息. 用于避免在真机开发过程中直接使用传统的dylib.

    1.1K30

    vs生成动态及使用动态

    动态(.dll):动态又称动态链接英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的,DLL不是可执行文件。...DLL 是一个包含可由多个程序同时使用的代码和数据的。Windows下动态为.dll后缀,在Linux在为.so后缀。...(引自百度百科) 区别:静态动态是两种共享程序代码的方式,它们的区别是:静态在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用...使用动态的优点是系统只需载入一次动态,不同的程序可以得到内存中相同的动态的副本,因此节省了很多内存。...3、添加工程引用的dll动态:把引用的dll放到工程的可执行文件所在的目录下。

    2.5K30

    Linux 编译动态_makefile编译动态

    动态链接简介 动态又叫动态链接,是程序运行的时候加载的,当动态链接正确安装后,所有的程序都可以使用动态来运行程序。...动态是目标文件的集合,目标文件在动态中的组织方式是按特殊的方式组织形成的。在动态中函数和变量的地址是相对地址而不是绝对地址,其真实地址在调用动态的程序加载时形成的。...将 动态链接放到这三个中任意个目录都可以。 3. 动态链接的配置文件 一般情况下,动态链接不能随意使用。..../ -lstr -L : 指定链接动态的路径 -lstr : 制定链接的动态名称 这里需要注意的是: 编译的链接动态和运行的动态链接并不一致。...运行时的动态链接需要放到系统搜索路径下。 6. 动态加载的使用 动态加载动态链接不同的是, 一般的动态链接需要在程序启动的时候就要寻找动态链接,找到库函数。

    6.1K20
    领券