专栏首页FreeBufAndroid静态分析之初级篇(二)

Android静态分析之初级篇(二)

接着《Android静态分析之初级篇》来,这次来看看如何在反编译后的apk包中添加一个页面,类似植入广告~

在app中进行广告植入,正常思路是:在app开始启动时增加一个广告的页面,代码里就是新建一个Activity文件,并将其设置为入口Activity。

假设我们没有原apk的源代码,那我们需要新建一个跟这个apk包一样的项目目录,包名要跟我们要插入广告页面的apk一致:

添加一个HackActivity页面,代码如下图:

效果如下:

打包,签名,反编译后,查看smali文件夹:

可以看到有两个HackActivity的smali文件,将这两个文件copy到原apk反编译后的hellosmali文件夹下:

同时,去修改它的AndroidManifest.xml文件,将入口Activity改为HackActivity:

保存,重新回编译,同样使用jarsigner进行签名,将生成的安装包安装到Android机上,看看效果:

可以看到是一个空白页,现在我们想办法给这个空白页添加点内容进去。

在我们新建的项目里添加一个页面add.xml:

重新打包,签名,并反编译,重新将反编译后的两个HackActivity的smali文件放到smali文件夹下,同时,还要把新添加的xml文件放到原apk反编译后的layout文件夹下:

然后,在R$layout.smali文件中添加add.xml的ID:

注意值不要跟前面的重复了,可以跟着最后的ID值累加。

add.xml布局文件在HackActivity文件中也有用到,我们去看看,add.xml是在onCreate方法中到的,我们去找onCreate方法:

看到一个很像ID的东东,我们修改成刚才在R$layout.smali中的值,保存。

应该没有要改的东西了,我们回编译试试,看看有没有达成效果,最终结果(丑是丑了些,大家理解意思就行哈):

好,总结一下步骤:

1、 将HackActivity.smali文件放入hellosmali文件夹; 2、 将新添加的页面add.xml放入laout文件夹; 3、 在R$layout.smali文件中添加add.xml的ID; 4、 修改HackActivity.smali文件中add.xml的ID; 5、 修改AndroidManifest.xml文件,将入口Activity改为HackActivity。

那么如何防止别人反编译我们的apk包呢?我们先使用代码混淆技术看看效果。

在build.gradle文件中可以看到设置代码混淆的参数,默认设置为false,我们修改为true再打包试试:

打包之后反编译,跟之前未开启混淆反编译的代码进行对比,直接去看smali文件夹,有明显的不同:

代码混淆后只有一个MainActivity.smali文件,直接打开看看,跟未混淆之前的来个对比(左边是混淆过的,右边是未混淆的):

我们再按照之前未混淆时候的操作步骤对正常的代码混淆过的apk进行广告页的添加,看看能不能添加成功:

1、 将HackActivity.smali文件放入hellosmali文件夹,完成; 2、 将新添加的页面add.xml放入laout文件夹,完成; 3、 在R$layout.smali文件中添加add.xml的ID,呃,没有这个文件呢,那就不要add.xml文件了,将HackActivity.kt中的setContentView注释掉 ,那第二步其实就不需要了。 4、 修改HackActivity.smali文件中add.xml的ID,这步也不需要了 5、 修改AndroidManifest.xml文件,将入口Activity改为HackActivity

回编译,签名,安装,打开,直接crash了:

Android Studio是怎么混淆的呢?

在build.gradle文件中可以看到有用到混淆文件proguard-android-optimize.txt(在\sdk\tools\proguard文件夹下):

从proguard-android-optimize.txt文件中可以看到各种混淆设置:

目前暂时卡到这里了,待我研究研究怎么破解再分享给大家~

*本文作者:梦里不知哪儿是哪儿,转载请注明来自FreeBuf.COM

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux部署hadoop2.7.7集群

    node0、node1、node2三台机器之间要设置SSH免密码登录,详细的设置步骤请参考《Linux配置SSH免密码登录(非root账号)》;

    程序员欣宸
  • Dubbo 支持哪些序列化协议?

    dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?

    李红
  • Nginx(2)——通用配置

    user 设置Nginx服务的系统用户 worker_processes 工作进程数 和硬件CPU核数一致 error_log nginx的错误日志 pi...

    羊羽shine
  • spring boot 整合 log4j2 原

    3. application.properties 中 添加 logging.config=classpath:log4j2.xml

    北漂的我
  • java应用监控之Cat集成Dubbo、Mybatis、Logback、spring boot

    cat属于代码侵入式的,集成cat需要进行相应的埋码。接入代码可以参考integration包下的代码

    用户4361942
  • ActiveMQ 的 三台服务器高可用集群搭建方案

    节点A: 与 节点B 节点C 进行消息同步, 所以节点A 节点B 节点C 都可用作消费者访问节点

    北漂的我
  • 初级代码审计之熊海 CMS 源码审计

    笔者为代码审计的小白,能看的懂 php 代码但是没有上手过,你要是和我一样的,那么我觉得这篇文章可以给你一个良好的开端。篇幅很长,所以也希望大家能够将源码下载下...

    信安之路
  • YARN 的配置

    1. 配置 /opt/hadoop-2.7.4/etc/hadoop/core-site.xml

    北漂的我
  • IntelliJ IDEA 中的 Maven 项目初体验及搭建 Spring MVC 框架

    在「详述 IntelliJ IDEA 创建 Maven 项目及设置 java 源目录的方法」一文中,我们已经将 IntelliJ IDEA 中的 Maven 项...

    CG国斌
  • 从 0 开始手写一个 Mybatis 框架,三步搞定!

    在手写自己的Mybatis框架之前,我们先来了解一下Mybatis,它的源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,才能够更深入的理解源码。...

    芋道源码

扫码关注云+社区

领取腾讯云代金券