作业
学会使用apktool, keytool, jarsigner等工具
1. 为后一位同学编写一个点击按钮出现Toast的app,并以apk的形式发送给学号后一位同学(最后一位同学发给第一位同学)
2. 对前一位同学发来的apk进行逆向,并将Toast中的文字改为自己的学号+姓名。
附加题:进一步修改前一位同学apk,将app名字改为自己的学号。
评分标准:基本功能(80),附加题(+10),其余分数根据报告质量
apktool下载地址和说明:https://ibotpeaches.github.io/Apktool/install/
将所存放的文件夹路径加入环境变量中,在cmd中可以输入apktool命令。
准备apk文件
新建First_Re项目,选择Empty Activity。Java代码如下:
MainActivity.java文件中添加按钮实例和监听:
Button button1 = (Button)findViewById(R.id.button);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "你好啊,小沈", Toast.LENGTH_SHORT).show();
}
});
把项目打包成APK文件:
工具栏点击“Build”,在下拉栏选择“Generate Signed Bundle /APK”,在弹出的对话框中选择APK。在弹框中任意填写信息,此处口令填写为123456。Build Variants选择release,勾选V2,点击Finish完成。
app-release.apk文件默认保存在First_Re\app\release\目录下。
把.apk文件发送到华为手机,安装应用程序并成功运行,点击按钮会输出“你好啊,小沈”。
逆向分析
逆向工具APKTool
Apktool 是一个反编译Android Apk的第三方工具。它可以反编译资源,并在进行修改之后重新打包Apk。
功能:将资源解码成原形式,比如png和xml。将解码资源重新打包成apk/jar等。
安装地址:https://ibotpeaches.github.io/Apktool/install/
开启代理,下载apktool.bat,下载apk-tool_2.4.1.jar,重命名为apktool.jar,把apktool.bat和apktool.jar剪切到C:\Windows目录下,就可以在命令行运行apktool软件啦。
值得一提的是,apktool.jar依赖Java1.8或更高版本。apktool.bat的作用是可以直接在命令行输入apktool使用软件,重命名是因为bat里面写的是apktool.jar。没有此脚本时需要输入java -jar apktool.jar。
运行命令:apktool
反编译APK文件:apktool d test.apk
将反编译后的文件重新打包:apktool b test
逆向简单程序
先把.apk文件拖拽到夜神模拟器6.6尝试运行,提示“应用安装失败”。把apk文件发送到华为手机,成功运行,点击按钮输出“Hello”。
对.apk文件进行反编译,得到同名目录apk-debug,目录文件如下:
执行反编译命令:apktool d apk-debug.apk
疑问:如何修改安卓程序的资源文件?
方式:Android Studio打开项目,使用“Find in Path”全局搜索指定字符串。
打开项目,右键点击项目,选择“Find in Path”。已知点击按钮会输出“Hello”字符串,App名称为Seven。
搜索app_name,修改为<string name=“app_name”>1820030116</string>。
搜索“Hello”,修改为“1820030116_zkx”,搜索时AS是不区分大小写的。
完成修改后,对项目进行重新打包。在项目文件夹的/dist目录下产生修改后的apk,此时在手机上安装该apk会报错,还需要对apk设置证书。
生成证书abc.keystore,使用证书对apk文件签名。安装签名后的apk,安装报错“更新包与已安装应用的签名不一致”,删除原来的软件即可安装成功,运行程序效果图如下。
重新打包命令:apktool b app-debug(项目文件夹)
生成证书:keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore
对apk进行签名:(把test.apk替换为自己的apk名称,此处是app-debug.apk)
jarsigner -verbose -keystore abc.keystore -signedjar test.apk test.apk abc.keystore
****
参考
《android studio生成apk教程》
https://jingyan.baidu.com/article/22a299b583606b9e19376acf.html
《apktool 工具介绍》,2019.01
https://www.jianshu.com/p/7f47bd328797
《Apktool 使用教程》,2020.03
https://www.jianshu.com/p/6ba8b826c138
《Android Studio 全局搜索字符》,2019-03
https://blog.csdn.net/Cricket_7/article/details/88883935
《利用apktool反编译apk,并且重新签名打包》,2018-05
https://blog.csdn.net/ycdyx/article/details/80501521