对于《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的更多相关文章

  1. Android 开发笔记“程序安装包APK的制作”

    资源来源:http://blog.csdn.net/qualcent/article/details/6959547 完成Android项目后,需要将程序打包成APK文件(Android Packag ...

  2. 解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...

  3. 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...

  4. 解决IE下载 apk/ipa 变成zip:Android 手机应用程序文件下载服务器 配置解决方法

    解决IE apk/ipa变成zip:Android 手机应用程序文件下载服务器 配置解决方法 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Da ...

  5. Android破解学习之路(一)——简单的登录破解

    最近突然心血如潮开始学了Android破解,初入门,便是将经验记录下来. 准备工作: 1.一个登录简单APP 在我们破解之前,我们需要做一个简单的登录APP,输入相应的账号与密码便是弹出登录成功的对话 ...

  6. 基于qml创建最简单的android机图像采集程序

    前提是在已经搭建为android编写程序的qt平台上面,我们只需要简单几部就可以搭建最简单的android机图像采集程序 1.生成新的ququick app 2.在配置中添加 multimedia,因 ...

  7. Linux课程实践三:简单程序破解

    一.基本知识 1. 常用指令机器码 不同版本对应机器码不同,这里以我做实验的kali(Intel 80386)为例. 指令 作用 机器码 nop 无作用(no operation) 90 call 调 ...

  8. 微信5.0 Android版飞机大战破解无敌模式手记

    微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...

  9. 如何开发Android Wear应用程序

    Android Wear是连接安卓手机和可穿戴产品的一个平台.自从今年上半年发布以来,Android Wear获得了大量关注,既有来自消费者的关注,也有来自开发商的关注,后者希望自己的应用程序已经准备 ...

随机推荐

  1. 使用python绘制世界人口地图及数据处理

    本篇我们来说:下载和处理json格式的文件,并通过pygal中的地图工具来实现数据可视化 ------------------------------------------------------- ...

  2. 初识CoAP协议

    前言 本文介绍什么是CoAP,以及如何在物联网设备上使用它.CoAP是一种物联网协议,具有一些专门为受约束的设备而设计的有趣功能.还有其他一些可用于构建物联网解决方案的IoT协议,例如MQTT等. 物 ...

  3. vue项目兼容ie

    一.兼容ES6 Vue 的核心框架 vuejs 本身,以及官方核心插件(VueRouter.Vuex等)均可以在 ie9 上正常使用.但ie不兼容es6,所以需要安装插件将“Promise”等高级语法 ...

  4. Spring DI使用详解

    Spring DI使用详解 一.介绍 DI的定义:依赖注入,为类里面的属性设值.例如,我们之前的setName方法就是在为name属性设值. IOC与DI的关系:IOC进行对象的创建,DI进行值的注入 ...

  5. C#实现前向最大匹、字典树(分词、检索)

    场景:现在有一个错词库,维护的是错词和正确词对应关系.比如:错词“我门”对应的正确词“我们”.然后在用户输入的文字进行错词校验,需要判断输入的文字是否有错词,并找出错词以便提醒用户,并且可以显示出正确 ...

  6. 我的linux学习日记day8

    链接文件 linux中链接有两种,一种是硬链接,一种是软链接 一.硬链接 硬链接是指通过索引节点来进行链接创建硬链接的方法如下:ln 源文件 硬链接文件具有相同inode号的多个文件互为硬链接文件删除 ...

  7. MYSQL8 常用操作

    开启root账号远程访问 方法1 mysql'; //修改密码认证方式为mysql_native_password mysql> GRANT ALL ON *.* TO 'root'@'%'; ...

  8. Spring初学笔记(二):Bean的注入

    关于Bean的注入 在上一篇中,已经说到虽然注入确实可以降低类与类之间的耦合,但并没有解决调用者必须知道类的创建方法的问题,也可以说是没有实现调用者与类实现的解耦,我们也提到,为了实现两者的解耦,可以 ...

  9. 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  10. 8.4 Go select

    8.4 Go select Go语言引入了select关键字,用于处理异步IO问题,语义和switch特别相似.语法由select开始,每个条件由case语句来描述.每个case语句必须是IO操作. ...