1 基本介绍
Android Killer是可视化界面的一款反编译软件,省去了利用编译工具进行反编译的繁琐步骤,这里简单的说一下利用工具进行反编译的步骤:
- Apktool:谷歌提供的APK编译工具,可以反编译和回编译。APK其实就是一个压缩包,我们完全可以把.apk修改为.zip。通过这种方式来获取资源文件,但是xml会乱码。如果使用Apktool来进行反编译apk就不会出现这种问题;
- dex2jar:将dex文件转换成jar包;
- jd-gui:用来查看jar包里面的代码的一种工具。
Android Killer虽然是Android逆向方面的神器,但是Android版本更新迅速,而Android Killer早已不再更新,这不能不说是一个遗憾,而且目前AndroidKiller对高版本的编译会卡在代码的位置。
2 安装与配置
2.1 安装
首先,从网页https://down.52pojie.cn/Tools/Android_Tools/中下载AndroidKiller_v1.3.1.zip,然后解压至指定目录,双击AndroidKiller.exe打开应用程序,如图1所示。
2.2 配置
总共需要配置两个软件的路径,Java的JDK和Apktool。
对于Java的JDK,依次点击主页->配置->Java,选择Java的JDK的bin目录,如图2所示。
对于Apktool,建议从官网https://ibotpeaches.github.io/Apktool/下载最新版,这里我下载的是2.6.0版的Apktool。依次点击Android->APKTOOL管理器->添加->选择默认的Apktool版本,如图3所示。
3 篡改APK名称和图标
3.1 篡改APK名称
下载完成之后,使用Android Killer打开土豆视频APK(或者直接拖动到Android Killer里面),会自动进行反编译并分析工程文件,完成后的结果如图4所示。
在AndroidManifest.xml文件中,找到字符串android:label=”@string/tudou_app_name”,对应的就是APP的名称,如图5所示。
在工程搜索中搜索字符串tudou_app_name,然后将其值从土豆视频改为猫咪视频,如图6所示。
3.2 篡改APK图标
在AndroidManifest.xml文件中,找到字符串android:icon=”@drawable/icon”,对应的就是APP的图标,如图7所示。
可以看到android:icon=”@drawable/icon”,表示drawable文件夹下的icon图片就是APP图标,可以全局搜索icon,但是会搜出好多结果,比较麻烦。
这里有一种更快捷的方法,因为MANIFEST.MF保存的是所有文件的签名和Base64编码后的值,当然图标文件签名肯定也在里面,可以在MANIFEST.MF里面进行搜索/icon.png,结果如图8所示。
依次替换图8中所有的icon.png文件,最后,重新打包并编译为APK,依次点击Android->编译->安装,在连接的手机端即可查看到已经修改过名称和图标的APP猫咪视频,如图9所示。
本节篡改APK名称和图标的基本过程可以概况如下:
- 篡改APK名称:APP -> Android Killer -> 反编译 -> 工程搜索 -> 输入tudou_app_name -> 搜索 -> 修改 -> 编译 -> 手机端 -> 安装运行
- 篡改APK图标:工程管理器 -> AndroidManifest.xml -> 在MANIFEST.MF中搜索/icon.png -> 替换所有图片 -> 编译 -> 手机端 -> 安装运行
【注意】
- 要替换的icon.png图标一定是png格式,不能是jpg、gif或者其他文件格式强制改后缀名改成png,不然编译的时候会报错;
- 在MANIFEST.MF里面进行搜索/icon.png可以快速匹配目标文件,效率更高。
4 修改包名实现应用分身
首先还是把土豆视频APK拖到Android Killer里面,然后在AndroidManifest.xml文件中找到manifest标签中的package属性,这个属性就是APK程序的包名,原来是package=”com.tudou.android”,这里我们改为package=”com.tudou.android.pro”,然后保存,如图10所示。
改完包名之后,还得在AndroidManifest.xml里面修改ContentProvider。首先,工程搜索<provider,搜索范围选择在当前文件,在android:authorities属性的值后面全部加上1,如图11所示。
最后,所有都修改完成之后,就保存、编译、打包,安装测试,如图12所示。
本节修改APK包名和ContentProvider的基本过程可以概况如下:
- 修改APK包名:工程管理器 -> AndroidManifest.xml -> manifest标签 -> package属性的值 -> 修改 -> 回编译 -> 手机端 -> 安装运行
- 修改APK的ContentProvider:AndroidManifest.xml -> 搜索<provider字符串 -> 修改所有android:authorities属性的值 -> 回编译 -> 手机端 -> 安装运行
【注意】安装失败的几种原因和解决方法:
- 只修改APK包名会引发ContentProvider冲突;解决方案就是修改AndroidManifest.xml文件中所有android:authorities属性的值;
- 应用分身的签名信息不同导致无法运行;解决方案是使用相同的签名工具对所有分身APP进行统一签名;
- 有些APK在内部使用了包名,只修改包名会导致程序崩溃;解决方案是全局搜索应用程序包名,查看搜索结果,如果是字符串就进行替换,将所有的字符串改为修改后的包名,否则不进行替换。
5 修改资源去广告
在这里,我们对程序的修改思路主要是以下两点:
- 删除网络权限
- 修改程序入口界面
5.1 去除弹窗广告
因为广告信息是通过网络获取的,所以可以直接删除广告的网络权限,这样APP就无法通过网络获取广告信息了,从而达到去除广告的目的。这里以火柴人突击格斗 APK为例。
下载完成后,安装到手机上,打开APP,我这里没有看到弹窗广告,猜想可能是因为之前的开发者对这个APK的广告信息不再维护或者到期了,如图13所示。
其中,AndroidManifest.xml文件中与网络有关的权限如下所示:
- CHANGE_NETWORK_STATE:允许应用程序改变网络状态;
- CHANGE_WIFI_STATE:允许应用程序改变WIFI连接状态;
- ACCESS_NETWORK_STATE:允许应用程序访问有关网络的信息;
- ACCESS_WIFI_STATE:允许应用程序访问有关WIFI网络的信息;
- INTERNET:允许应用程序打开网络套接字。
【注意】INTERNET权限一定不能删除。因为游戏的更新、游戏资源文件的下载等行为都需要访问网络。
在这里,我们删除AndroidManifest.xml文件中的CHANGE_NETWORK_STATE、CHANGE_WIFI_STATE、ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE这4个权限的标签。
此时,我们已经去除弹窗的广告信息,但是APP还是有长达5秒的广告,但是对应Activity上没有广告,只有一个空白框。因此,我们下一步需要修改APP的入口界面,让其一打开就跳转到游戏的入口界面。
5.2 修改入口界面
首先,我们通过AndroidManifest.xml文件查看所有的activity,如果一个activity同时包含以下两个属性,那这个activity才是入口界面。
1 | <action android:name="android.intent.action.MAIN"/> |
然后,下一个问题就来了。我们希望的是进入这个入口页面,而不是广告页面,那怎么处理呢?
当应用程序执行完5秒广告界面后会跳转到程序的入口界面,这时可以在cmd中使用命令adb shell dumpsys activity top来捕获当前的活动页面,如图14所示。
接着,在AndroidManifest.xml文件中删除com.mosads.adslib.Splash.MosSplashActivity的MAIN和LAUNCHER属性,在org.cocos2dx.lua.AppActivity中添加MAIN和LAUNCHER属性,如图15所示。
最后,依然是保存、编译、打包、安装测试。在安装Android Killer编译好的APK时,即打开对应的游戏入口Activity界面,而没有打开广告的Activity界面,如图16所示。
6 参考文献
[1]https://blog.csdn.net/freeking101/article/details/105234804
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。