安卓反编译smali代码注入第三方广告

最近研究了下反编译smali代码注入 实现自己的功能 

简单的注入Toast  log代码  比较简单  网上都是  但是没有找到加入第三方广告sdk的例子  下面就以hao123广告注入说下自己的经验  其实规律很简单

hao123广告 需要的代码 (此处只是为了知道哪些地方改变了)

1.AndroidManifest.xml 权限 以及活动 服务 广播

2.res-drawable-xhdpi 新加一张图片

3.res-layout 新加两个布局文件

4.res 目录下 新加个raw文件 里面包含hao123cid.ini文件

5.MainActivity追加 HaoAgent.getInstance(this).init();初始化调用代码


准备工作 新建个最简单的hello_world工程  反编译  同时 hello_world工程加入hao123广告代码  反编译  对比不同

应用市场下载个apk文件(没有混淆) 用apktool反编译


1 首先这里的清单文件追加需要的代码    <original文件夹中的清单文件无需理会>

2 original --- META-INF文件夹中通常有

CERT.RSA   CERT.SF   MANIFEST.MF三个文件


前面两个文件是安卓项目签名文件 最后那个自行百度 我就不多说了

这三个文件可以全部删除 


3.根目录 res文件夹

这里对应的文件夹追加对应的资源文件  直接拷贝即可 <如果没raw文件夹  整个文件夹拷贝即可>


重点来了 打开values文件 


在ids.xml文件中追加改变的代码

<item type="id" name="fapk_bimg_bg_background">false</item>
    <item type="id" name="fapk_img_bg_background">false</item>

在public.xml文件下追加需要的代码

此处要重点注意

如:

<public type="layout" name="activity_main" id="0x7f030000" />    
<public type="layout" name="hao123_notification_fapk_bimg_bg" id="0x7f030001" />
    <public type="layout" name="hao123_notification_fapk_img_bg" id="0x7f030002" />


代码 activity_main是都有的 下面的两个layout是需要新加的  看出变化了没  对 简单的id自增即可

如果没有的文件  比如我反编译的apk这里没有raw 但是我们又需要新追加raw 那这个id怎么办呢  

简单  你可以自己新加个Id  比如layout全是 0x7f03开头   那么0x7f04即可

这里的id很重要 必须唯一  可以理解为安卓工程中的r文件

4.返回根目录 下面需要修改smali里面的代码了

 在com里面把baidu文件夹全部拷贝过来  baidu文件夹既是hao123广告里面的jar包

5 在smali中  搜索R$layout.smali文件 即可找到项目的资源文件  一般项目的资源文件都在一起  这里需要注意根据目录区分是库文件的资源文件 还是项目本身的资源文件



找到这个资源文件 

打开追加自己的代码  比如hao123多了两个布局文件  那么我们在R$layout.smali里面 

追加这两个布局文件    注意 此处的id即为上面public.xml里面我们写入的id  id一定要一致!

依次完成其他代码的追加 比如 R$drawable.smali   R$id.smali等

同时这里需要注意一点  R.smali和R$raw.smali文件

没有R$raw.smali文件  那么直接拷贝  但是需要注意更改项目路径  同时  R.smali 追加raw引用代码

5.到这里  那么就差最后一步了   没错 即是MainActivity中的代码!

根据清单文件  查看项目启动活动 的路径  可以直接找到这个活动文件  (此处看你想把代码加在那个地方了)

找到onCreate方法   这里你可能会头大吧   看不懂这个代码啊   没关系 只要了解基础语法就行了

 

 .line 16
    invoke-static {p0}, Lcom/baidu/hao123/union/HaoAgent;->getInstance(Landroid/content/Context;)Lcom/baidu/hao123/union/HaoAgent;


    move-result-object v1


    invoke-virtual {v1}, Lcom/baidu/hao123/union/HaoAgent;->init()V


    .line 18
    const-string v1, "Hao123\u8054\u76df\u670d\u52a1\u542f\u52a8\uff01"


    const/4 v2, 0x1


    invoke-static {p0, v1, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;


    move-result-object v0


我要追加的代码就是上面的了 <对比找出>  直接丢进oncreate中  同时记得  oncreate方法的第一句.locals 3 即是这个方法声明3个内存空间  p0 v0  v1 自行百度smali的基本语法


OK!成了  重新用apktool打包  APKSign重新签名 那么就可以运行了  

反编译的代码怎么整   什么规律  以后有时间研究下 

当然请尊重别人的果实 以上代码只是个人兴趣  随意而为


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
说明: =================================================================== 1). dex 转 jar 用的 enjarify,比目前常用的 dex2jar(d2j) 要稳定可靠得多,尤其是在处理重度混淆过的apk时 2). 用于对apk进行代码修改,扫描目标apk中函数,并在指定函数的开头部分 添加 调用自定义静态函数的代码 3). 省略 jarsmali 再回转的步骤,转而使用 objectweb.asm(ow2) 直接对 jar 文件进行 smali 注入 4). dex2jar 的步骤使用的是 google 自家的 enjarify 工具,没使用老掉牙的、对部分混淆apk处理极不准确极不稳定的 dex2jar(d2j) 5). jar2dex 使用的是 android studio 自带的 dx.bat 工具,貌似 dex2jar(d2j) 在做jar回转的时候也是调用dx.jar 6). 手机无需 root 要求: =================================================================== 已安装 jdk1.7 或 jdk1.8 已安装 Android Studio 已安装 pypy3 或者 python,pypy3 下载地址:http://download.csdn.net/detail/jizhitp/9902691 步骤: =================================================================== 1). 使用 jeb、jadx、jd 等静态分析工具分析源apk,确定要注入代码的类及函数 2). 用记事本打开 main.bat,设置正确的路径,以及源apk文件名 3). 在当前文件夹空白处点一下,然后按 shift + 右击,选择 "在此处打开命令行窗口" 4). 编辑静态类源文件:SmaliInjector\android\StaticClass.java,这个类将会被包进目标apk中 5). 编辑注入器源文件:SmaliInjector\pc\Injector.java,这是注入器关键文件,作用是调用ow2.asm来对目标jar中特定类的特定函数进行代码注入 6). 运行 main.bat即可 错误处理: =================================================================== 1). 此工具默认使用pypy来运行py脚本,若想使用 python 请打开 google_enjarify\enjarify.bat 把 pypy 改成 python 2). 安装重包后的apk时,若出现 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 错误,请将手机中原有的应用卸载后再安装 3). android.jar 最好选用跟目标手机版本一致的,否则重包后的apk几乎100%闪退 4). 若在 jar 转加 dex 的过程中出现 java.lang.OutOfMemoryError: GC overhead limit exceeded 的错误,请调大 main.bat 中的 -Xmx 和 -Xss 其它: =================================================================== 1). pypy3 比 python 快蛮多,推荐使用 2). enjarify 有两种模式: 默认的模式,转换出来的代码阅读性比较好,但比较慢 --fast 快速模式 3). main.bat 内有两个便捷开关,赋值表示启用,参数留空表示开关不启用 Resign_Only 是否只做 重签名 的动作,可用于验证目标 apk 有没有做签名保护 SkipDex2jar 是否跳过 dex 转 jar 的步骤,转换很耗时,第二次调用 main.bat 时可以选择跳过,能省蛮多时间

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值