`

Android inject详解

 
阅读更多

本篇Blog源于我在上一家互联网公司工作中的一项任务,前几天原来公司的一个同事让我整理个文档出来学习一下。

今天写完文档后我决定再分享到Blog上一份。希望对需要的人有所帮助,或者能够激发读者的创意。

(本文为原创。如需转载,请勿修改,且注明作者shensy及出处:http://shensy.iteye.com/blog/1484798)

-------------------------------------------------------------------

1、

将你要注入的apk包放在相同路径下如(下面的Apk是我随便找的一个游戏):

E:\apk\apktool\Dino.v1.2_signed.apk

cmd中将命令行切换到E:\apk\apktool\下。

执行:apktool d E:\apk\apktool\Dino.v1.2_signed.apk shensy

执行之后,会看到apk解包并生成了shensy文件夹。

2、

(1)AndroidManifest.xml中,找到主界面类(步骤略过),这里是com.kongzhong.dino_zhcn.DinoGameNoAdsActivity

(2)进入smali文件夹,将你需要注入的界面的smali文件复制到里面:

进入shensy\smali文件夹,将你需要注入的界面的smali文件复制到里面:比如你的界面是ehook.apk,你使用apktool解包ehook.apk后,取出其中界面类的smali程序复制到Dino.v1.2_signed.apk生成的shensy\smali文件夹中。

(3)根据包路径找到DinoGameNoAdsActivity对应的smali文件DinoGameNoAdsActivity.smali,打开该文件。找到onresume方法,直接照下面写就行:

.method protected onResume()V

.locals 1

       .prologue

invoke-super  {p0}, Landroid/app/Activity;->onResume()V

const-string  v0, "${stringcontent}”

invoke-static  {p0, v0},

L${package/classname};->${methodname}(Landroid/app/Activity;Ljava/lang/String;)V

return-void

.end method

1行修改寄存器的个数: .locals后面的值,在原来的值上加1即可(原来是0就改为1)

4行是要添加的内容:传入调用方法的字符串指令。

567行其实是一行(这里太长了所以换行),注意不要换行,是要添加的内容:

${package/classname}是注入界面的类名后面的 ${methodname} 就是注入界面类调用的方法名,此处是静态方法(可以调用非静态方法)。

修改完以上内容后保存一下(注意使用editplus等编辑器保存后会生成一个tmp临时文件,一定要删掉)。

3、

cmd中将命令行切换到E:\apk\apktool\下,执行:apktool b shensy

将刚才生成的shensy文件夹打包,如果成功会在shensy文件夹下找到一个dist目录,里面是打好的apk

4、

上面打好的包是未签名的包,需要用签名工具对apk签名(这里不再介绍)。

 (全文完)

 

PS:关于Android应用的注入,网上搜索了一下还有另外2篇资料(目前只看到这些,不断更新中):

(1)http://www.docin.com/p-201009356.html 这篇文档作者的注入思路感觉是直接通过dex注入,但没有写具体细节,个人感觉直接修改dex文件要对Dalvik虚拟机十分熟悉。

(2)http://bbs.sdapk.com/archiver/tid-485.html 这篇文章的作者通过代码注入的方式打印出序列号,不错的文章。但在工作中发现有些应用不修改寄存器的个数注入后的程序会出现异常。

最近补充:

(3)命令行打包编译.apk包含第三方.jar 的方法:

http://snmoney.blog.163.com/blog/static/440058201181011468397/  

(4)将jar文件与dex文件的转换:http://blog.csdn.net/huigezhang/article/details/6658029

(5)Android 命令行手动编译打包详解:http://jojol-zhou.iteye.com/blog/729254

 

分享到:
评论
2 楼 shensy 2012-07-31  
简而言之,就是可以在没有源码的情况下修改程序逻辑。
1 楼 jingyening 2012-07-31  
这个注入 有什么用啊?楼主给举个例子

相关推荐

    Android 跨进程模拟按键(KeyEvent )实例详解

    在`AndroidManifest.xml`中添加`<uses-permission android:name="android.permission.INJECT_EVENTS" />`后,仍然无法解决问题,这是由于Android的安全机制,系统会检查调用进程的PID和UID,如果不是系统级别,注入...

    methodinject,面向android卓aop框26550;的MethodInject.zip

    【标题】MethodInject是一款面向Android平台的AOP(面向切面编程)框架,它主要用于简化在Android应用中插入方法调用的过程。通过AOP技术,开发者可以在不修改原有代码的情况下,方便地添加日志、性能监控、权限检查...

    AndroidKiller超好用反编译工具.zip

    《AndroidKiller:一款强大的安卓应用反编译工具详解》 在移动开发领域,尤其是在安卓应用的安全分析和逆向工程中,反编译工具扮演着至关重要的角色。AndroidKiller,正如其名,是一款专为安卓应用设计的高效反编译...

    android&java的注解详解demo

    4. **依赖注入**:如`@Inject`注解(来自Dagger框架),帮助自动管理对象的依赖关系,简化代码。 5. **元注解**:`@Retention`用于控制注解的生命周期,`@Target`定义注解可以应用到哪些程序元素上。 四、Android...

    Android-Magnet是Android的依赖注入库

    **Android依赖注入库Magnet详解** 在Android应用开发中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它能够帮助我们实现代码的解耦,提高可测试性和可维护性。Magnet是一款专为Android平台设计的轻...

    AndroidKiller_v1.3.1.zip

    《AndroidKiller逆向软件详解》 在移动操作系统领域,Android以其开源性和灵活性深受开发者喜爱。然而,这种开放性也带来了安全挑战,恶意软件、隐私泄露等问题时有发生。为了解决这些问题,或者为了深入理解应用...

    Android-KOIN-一个智能的Kotlin依赖注入框架

    **Android Koin 框架详解** 在 Android 开发中,依赖注入(Dependency Injection,简称 DI)是一种重要的设计模式,它有助于提升代码的可测试性和可维护性。Koin 是一个专门为 Kotlin 开发的轻量级、智能的依赖注入...

    详解Dagger2在Android开发中的新用法

    "Dagger2 在 Android 开发中的新用法" Dagger2 是一个非常流行的依赖注入框架,在 Android 开发中被广泛应用。随着 Android 生态系统的发展,Dagger2 也在不断演进,出现了新的用法。本文将详细介绍 Dagger2 在 ...

    Android-Dagger2MVP小例子

    **Android Dagger2 MVP小例子详解** 在Android应用开发中,我们常常面临的问题是如何有效地组织代码,使其具有良好的可测试性和可维护性。`Dagger2` 和 `MVP`(Model-View-Presenter)模式是两个强大的工具,可以...

    Android xUtils框架解析

    **Android xUtils框架解析** xUtils是一个轻量级的Android开发框架,由知名开发者吴成峰(花神)创建。这个框架集成了多种功能,包括网络请求、图片加载、数据库操作、视图注入等,旨在简化Android应用的开发流程,...

    安卓Android源码——roboguice-master.rar

    《深入剖析Android源码:RoboGuice框架详解》 在Android开发中,依赖注入(Dependency Injection,简称DI)是一种常见的设计模式,它能够帮助我们解耦代码,提高可测试性和可维护性。RoboGuice是Google Guice框架的...

    世上最全面的android权限大全,还等神马?

    ### Android权限详解 #### 1. android.permission.EXPAND_STATUS_BAR 此权限允许应用扩展状态栏,通常用于显示额外的信息或操作选项,如音乐播放器的控制按钮。 #### 2. android.permission.FACTORY_TEST 这是一个...

    详解Android Studio安装ButterKnife插件(手动安装)

    Android Studio 安装 ButterKnife 插件(手动安装) Android Studio 是 Android 应用程序开发的官方 IDE,而 ButterKnife 是一个流行的视图注入库,能够简化 Android 应用程序的开发过程。下面将详细介绍如何在 ...

    libinject2-64:android所以为arm64注入

    《libinject2-64:Android为ARM64架构注入技术详解》 在移动设备领域,Android系统以其开源和灵活性赢得了广泛的应用。然而,对于开发者来说,深入理解系统的内部运作和进行性能优化往往需要借助一些特殊的工具和...

    Android xUtils更新到3.0后的基本使用规则详解

    【Android xUtils 3.0 基本使用规则详解】 xUtils 是一个强大的 Android 开发框架,它集成了多种实用工具,包括文件上传、HTTP 请求、ORM 模型以及事件处理等。在3.0 版本中,xUtils 进行了大幅度的重构,虽然依然...

    cpp-一个工具用于检查转储修改搜索和注入库至Android进程

    《Android进程操作:cpp工具详解》 在移动设备开发领域,尤其是Android系统中,开发者们经常需要对应用程序的运行过程进行深入的分析和调试。在这个过程中,有一种名为"cpp"的工具,它提供了检查、转储、修改以及...

    AndroidManifest.xml中含盖的安全问题详解

    AndroidManifest.xml 中含盖的安全问题详解 AndroidManifest.xml 是每个 Android 程序中必须的文件,它位于整个项目的根目录,提供了应用程序到 Android 系统的基本信息,系统必须具有该信息才能运行任何应用程序的...

    xtuils框架引用方式

    ### xtulils框架引用方式详解 #### 一、概述 xtuils 是一款针对 Android 开发的高效便捷的工具库,旨在简化开发流程并提高代码的可读性和可维护性。该框架支持多种功能,包括但不限于 XML 注入、`onCreate` 方法的...

    Android中巧妙的实现缓存详解

    使用`@Inject Lazy<SQLiteOpenHelper>`,我们可以在实际需要时才创建`SQLiteOpenHelper`实例,而不是在应用启动时就立即创建。这样可以避免不必要的资源消耗,并且`Lazy`接口保证了线程安全。 除此之外,对于需要从...

Global site tag (gtag.js) - Google Analytics