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