31

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

 4 years ago
source link: https://www.tuicool.com/articles/BnAZZzU
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

77BbUvv.jpg!web

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

fIRjIfN.jpg!web

效果如下:

UNvuUzR.gif

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

ENreueU.jpg!web

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

yaYVzqf.jpg!web

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

nMnyy2I.jpg!web

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

RJBrI3Z.gif

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

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

JBvAbiI.jpg!web

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

uYVFJve.jpg!web

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

jIjya2y.jpg!web

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

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

b2aEvmb.jpg!web

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

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

Bre22qR.gif

好,总结一下步骤:

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再打包试试:

B7VFraV.jpg!web

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

FNjAVny.jpg!web

6rui2ii.jpg!web

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

neyaArN.jpg!web

我们再按照之前未混淆时候的操作步骤对正常的代码混淆过的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了:

IBZfMn7.jpg!web

Android Studio是怎么混淆的呢?

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

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

VzAbQzv.jpg!web

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK