Windy's Journal


  • 首页

  • 归档

  • 标签

  • 分类

  • 关于

  • 搜索

Android Root环境下动态注入Java和Native代码的实践

发表于 2024-03-22 | 分类于 Android , Xposed , Ptrace , Injection

背景

在Android逆向开发中,我们通常会使用Frida工具在命令行中动态注入JavaScript代码到目标应用,编写JavaScript对Android新手来说可能会有些困难,假如能用Java代码Hook Java层方法,c/c++代码Hook native层函数指令,用起来可能会更顺手。

在Android正向开发中,我们往往需要在Release包上进行性能诊断或复杂问题的分析,然而,这并不是一件容易的事情。原因在于,Release包通常不方便调试,大型App的编译过程需要消耗大量时间,修改框架或第三方SDK代码也相对困难。因此,有时候我们就需要利用逆向工具,比如Xposed或者Frida,通过代码注入的方式来进行问题调试。

那么,如何实现在命令行中将Xposed插件动态地注入到目标应用中呢?
本文将探讨在Android Root设备上将Xposed插件动态注入到目标应用的一种实践。

阅读全文 »

Android ART虚拟机系列: 虚拟机CheckPoint机制分析

发表于 2023-07-16 | 分类于 ART , CheckPoint , 挂起

背景

在Android ART虚拟机中,GC的部分流程中会执行stop the world的操作,那么,STW在虚拟机中如何实现呢?本文就深入到ART虚拟机源码中,探寻STW的实现过程。
【本文基于android12源码分析】

CheckPoint机制

ART虚拟机中采用的是主动式挂起暂停某个线程的执行。也就是说,当GC或者其他操作需要挂起线程的时候,不直接对线程进行操作,而仅仅是简单地给线程设置一个标志,线程执行过程中主动去轮询这个标志,发现这个标志是挂起状态时,主动暂停本线程的执行。轮训检查这个标志的位置就叫做检查点(Check Point)。在JVM虚拟机(HotSpot VM)中,叫做安全点(Safe Point)。

阅读全文 »

一种基于JDWP动态注入代码的方案

发表于 2022-02-19 | 分类于 Hook注入 , Xposed , JDWP

前言

在逆向开发中,一般都需要对目标App进行代码注入。主流的代码注入工具是Frida,这个工具能稳定高效实现java代码hook和native代码hook,不过缺点是需要使用Root设备,而且用js开发,入门门槛较高。最近发现一种非Root环境下对Debug App进行代码注入的方案,原理是利用Java调试框架,通过调试器与目标虚拟机之间通讯,实现对虚拟机进程的修改。

阅读全文 »

另一种绕过Android 9以上非SDK接口调用限制的方法

发表于 2021-07-20 | 分类于 非SDK接口 , Android

前言

从Android9开始,Google开始在Android平台限制对非SDK接口的调用。只要应用使用非SDK接口,或尝试使用反射或JNI来调用非SDK接口,都会收到某些限制。而且随着Android版本的升级,这种限制越来越强,被限制的接口也越来越多。这些限制对于Android平台上的一些黑科技来说(插件化,热修复,App双开,性能监控,Art Hook等),简直就是致命的。所以,各路大神都纷纷寻找绕过这个限制的手段。

最近在翻阅Android ART虚拟机源码时,发现另外一种简单绕过限制的方法。经测试,能够在Android 9-12上稳定运行。

下面先介绍主流的绕过限制的原理,再详细介绍这种全新的绕过策略,并在最后给出完整的源码实现。

阅读全文 »

另一种绕过Android系统库访问限制的方法

发表于 2021-05-26 | 分类于 Arm汇编 , Android , 访问系统库

问题来源

从Android 7.0开始,Android系统开始阻止App中使用dlopen(), dlsym()等函数打开系统动态库。但是一些大型App在做性能监测和优化时,经常需要使用dl函数打开系统动态库。因此,有必要想办法绕过系统的这种限制。

限制App访问系统库原理

我们查阅Android11,看看dlopen()函数是怎样实现的:

阅读全文 »

非Root环境下使用Frida的一种方案

发表于 2020-05-28 | 分类于 Firda , Xposed , Android逆向 , Xpatch

前言

在Android逆向过程中,除了Xposed,还有一个必不可少的Hook神器,那就是Frida。而且,Firida比Xposed功能更加强大,不仅可以实现Java层Hook,还可以实现native层Hook。但是在使用过程中,只能在Root设备才能实现代码的hook。那么是否有免Root使用Frida的方案呢?

关于免Root使用Frida,业内也有一些方案,大致有以下几种:

  1. 使用Apktool反编译Apk,修改smali文件和manifest文件,实现Firda的加载。
    这种方案原理比较简单,实现起来也不算复杂。这篇英文文档中,对此有非常详细的介绍:
    Using Frida on Android without root
    这种方案的本质就是将frida-gadget.so放到反编译后的apk so目录下,并修改反编译后的smali文件,插入System.loadLibrary("frida-gadget")对应的smali代码,从而实现frida的加载。
阅读全文 »

免Root 实现App加载Xposed插件的工具Xpatch源码解析(二)

发表于 2019-07-27 | 分类于 Xposed , Android逆向 , Xpatch

前言

Xpatch是笔者开发的一款破解Android App工具,源码地址:

https://github.com/WindySha/Xpatch

本文接着上一篇Xpatch源码解析文章,继续分析Xpatch的实现原理。

Xpatch加载Xposed插件流程

查找插件Apk

加载Xposed插件之前,首先需要遍历所有安装的应用,根据Xposed插件的特征,找到其中的Xposed插件。

那什么样的应用才是Xposed插件呢?

阅读全文 »

免Root 实现App加载Xposed插件的工具Xpatch源码解析(一)

发表于 2019-07-27 | 分类于 Xposed , Android逆向 , Xpatch

前言

Xpatch是一款免Root实现App加载Xposed插件的工具,可以非常方便地实现App的逆向破解(再也不用改smali代码了),源码也已经上传到Github上,欢迎各位Fork and Star。

本文主要介绍Xpatch的实现原理。由于其原理比较复杂,所以分二篇文章来详细讲解。

由于Xpatch处理Xposed module的方法参考了Xposed框架部分源码,所以本文先介绍Xposed框架加载Xposed模块原理,再详细讲解Xpatch如何兼容Xposed模块。

阅读全文 »

Xpatch: 免Root实现App加载Xposed插件的一种方案

发表于 2019-04-18 | 分类于 Android

源码

Github: https://github.com/WindySha/Xpatch

基本原理

Xpatch的原理是对Apk文件进行二次打包,重新签名,并生成一个新的apk文件。
在Apk二次打包过程中,插入加载Xposed插件的逻辑,这样,新的Apk文件就可以加载任意Xposed插件,从而实现免Root Hook任意App的Java代码。

1.0~1.4版本,Hook框架使用的是Lody的whale
2.0版本开始,Hook框架底层使用的是ganyao114的SandHook。稳定性和兼容性更好。

阅读全文 »

Android App接入Facebook分享SDK时,无法启动Facebook客户端的问题分析

发表于 2018-12-20 | 分类于 Android , 问题分析

问题来源

由于我司的android app产品主要是面向海外,因此,app中的分享功能接入facebook分享是必不可少的。最近在接入facebook android sdk进行分享时,发现一个非常奇怪的现象,明明手机上已经安装了facebook客户端,但却经常出现无法调起客户端分享,而是调起了facebook sdk内置的网页分享。

在网页端分享时,用户又需要重新输入账号密码才能分享(客户端不用,因为一般都已经登录过)。这样用户体验就非常差,进而会导致很多用户会因为要输入账户密码而放弃分享。因此,这是一个严重影响体验的问题,需要紧急修复。

本文主要就是介绍该问题的分析思路,然后给出一个比较完美的解决方案,给同样遇到此坑的程序员们提供一个思路。

阅读全文 »
12
Windy

Windy

用技术撬动地球

20 日志
29 分类
47 标签
RSS
GitHub 简书
© 2024 Windy
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4
  |  本站总访问量次   |  本站访客数人次