Android简单应用程序破解——runtime.apk
对于《Debugging Android Application》一文中最后附上的练习,我采用了另一种静态方法绕开原有的逻辑去破解。主要的过程如下:
利用apktool将练习的runtime.apk文件反编译,生成的smali格式的反汇编代码,接着从smali文件的代码中寻找突破口,修改程序,再利用apktool重新编译生成apk文件并签名,最后运行测试。
首先安装原应用程序测试功能,当输入正确的PIN码时,就如下左图所示,而输入错误的PIN码时,就如下右图所示。
程序破解的目标是无论输入什么PIN码值,程序都反馈“Correct PIN entered”.
需要用到的工具
1.apktool.用于apk文件的反编译和重新编译
2.签名工具-signapk。重新编译打包的apk文件是没有签名的,不能安装测试,因此需要有工具对apk文件签名。
反编译apk文件
此前,我已经将apktool添加到系统的PATH环境变量中,以便直接使用。接着运行以下命令:
apktool d runtime.apk
就会生成一个新目录runtime,该目录下有以下的目录和文件
res目录存放程序中所有的资源文件,smali目录存放了程序所有的反汇编代码。
分析代码
阅读smali目录下的文件,由于该程序比较简单,可以容易猜测出主文件是\smali\com\FS\runtime1目录下的MainActivity.smali文件
打开文件需找突破口。
在先前测试原应用程序时可以发现,当输入错误的PIN码时,会弹出 "Incorrect PIN please try again later"提示,而输入正确的PIN码时,会弹出"Correct PIN entered"提示。因此,可以在代码中寻找这些关键的提示,来确定不同的逻辑代码段。
根据代码中85行和107行的提示,确定了以上两段代码,并且可以发现78行的条件跳转指令if-eqz v1, :cond_1(如果v1寄存器的值为0,则跳转到cond_1标号处),由此推断出从该指令跳转到cond_1即为输入错误PIN码的情况,而顺序执行下来的就是输入正确PIN码的情况。综上判断,指令if-eqz v1, :cond_1为程序的破解点,只要把该行删除,无论输入何值,程序都不会跳转到输出错误提示的代码段中,即达到我们破解的目标:无论输入什么PIN码值,程序都反馈“Correct PIN entered”。
重新编译并签名
保存退出后,开始重新编译打包成apk文件,在runtime的上级目录下运行命令:
apktool b runtime
编译成功。在runtime目录下有一个dist目录,里面存放着编译成功的apk文件。接下来就是为apk文件签名。我是利用了Android源码包里的签名工具signapk.jar进行签名的。同时利用源码包里的testkey.pk8和testkey.x509.pem,使用三者生成一个signapk.bat,只要将signapk.jar、testkey.pk8、testkey.x509.pem和signapk.bat放在同一目录下,并且将该目录添加到系统的PATH环境变量中,就可以直接使用了。
运行以下命令:
signapk runtime.apk
成功的话就会生成一个签名过的apk,名字叫signed.apk。
安装测试
最后进行安装测试。开启安卓模拟器后运行命令:
adb install signed.apk
安装成功。测试。
输入任意字符,点击Check按钮,都会输出提示”Correct PIN entered”
破解成功!
Android简单应用程序破解——runtime.apk的更多相关文章
- Android 开发笔记“程序安装包APK的制作”
资源来源:http://blog.csdn.net/qualcent/article/details/6959547 完成Android项目后,需要将程序打包成APK文件(Android Packag ...
- 解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法
APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...
- 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法
APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...
- 解决IE下载 apk/ipa 变成zip:Android 手机应用程序文件下载服务器 配置解决方法
解决IE apk/ipa变成zip:Android 手机应用程序文件下载服务器 配置解决方法 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Da ...
- Android破解学习之路(一)——简单的登录破解
最近突然心血如潮开始学了Android破解,初入门,便是将经验记录下来. 准备工作: 1.一个登录简单APP 在我们破解之前,我们需要做一个简单的登录APP,输入相应的账号与密码便是弹出登录成功的对话 ...
- 基于qml创建最简单的android机图像采集程序
前提是在已经搭建为android编写程序的qt平台上面,我们只需要简单几部就可以搭建最简单的android机图像采集程序 1.生成新的ququick app 2.在配置中添加 multimedia,因 ...
- Linux课程实践三:简单程序破解
一.基本知识 1. 常用指令机器码 不同版本对应机器码不同,这里以我做实验的kali(Intel 80386)为例. 指令 作用 机器码 nop 无作用(no operation) 90 call 调 ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
- 如何开发Android Wear应用程序
Android Wear是连接安卓手机和可穿戴产品的一个平台.自从今年上半年发布以来,Android Wear获得了大量关注,既有来自消费者的关注,也有来自开发商的关注,后者希望自己的应用程序已经准备 ...
随机推荐
- Jenkins联动码云自动匹配分支进行构建流水线
一.安装Generic Webhook Trigger插件 二.创建项目 创建项目之前先准备自己的项目,如果没有可以我fork的一个项目.地址是:https://gitee.com/jokerbai/ ...
- golang之method
method Go does not have classes. However, you can define methods on types. package main import ( &qu ...
- Re模块练习题
import re s = "1 -2*(60+(-40.35/5)-(-4*3))" # 获取所有数字 ret = re.findall(r"\d+", s) ...
- strut2运行流程的详解
虽然现在struts2已经慢慢淡出了视野,但是作为一个老框架,在我看来,学习价值还是有的,多阅读框架源码帮助很大,大家有空的话也可以尝试看看,好了,话不多说,今天的主题就像标题写的那样,主要探究str ...
- Python-给数字/字符串前加0
zfill方法用来给字符串前面补0
- LabVIEW动态添加控件
综述: 事例1: 未执行: 执行后:
- JDBC08时间处理
时间类型 java.util.Date 子类: -java.sql.Date无时分秒 -java.sql.Time -java.sql.Timestamp
- Git、Github习笔记01——Git本地仓库
作者:Eventi 出处:http://www.cnblogs.com/Eventi 欢迎转载,也请保留这段声明.谢谢! git简介 版本控制软件,由Linus(linux开发者)开发,最初用来对li ...
- 安卓APP承载网页(WebView)
安卓APP自身如何打开网页,如何制作一个简单的浏览器,WebView在其中将是一个重要的角色.WebView是一个基于WebKit引擎.展现Web页面的控件. Webview 是一个基于webkit引 ...
- Spring Boot定时任务运行一段时间后自动关闭的解决办法
用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运 ...