第一个Android crackme(2016-05)
第一个Android crackme
0x00 背景
最近在学习Android的逆向,把基本的环境搭好后,看了看《第一行代码--Android》,然后就按照非虫大牛的《Android软件安全与逆向分析》开始了第一个apk的crack。
这篇文章权当是记录,没有什么技术含量。
0x01初探
首先来看看要crack的apk长啥样儿,启动一个安卓虚拟机,然后使用adb将apk安装到虚拟机中,命令如下:
可以看到虚拟机中已经安装了该apk:
启动这个apk,输入任意的用户名和注册码,点击注册按钮,可以看到有一个Toast消息:
Toast的文本内容为"无效用户名或注册码",记录下这个反馈信息。
0x02反编译
利用apktool将apk反编译,生成Smali格式的反汇编代码,这一步可以使用很多带有GUI的工具比如apk改之理、AndroidKiller等,目前鉴于初学,为了更好的搞清楚整个过程,所以还是使用apktool的命令行来操作。
在反编译输出的文件夹outdir中找到strings.xml,使用任意文本编辑器打开:
这里可以看到刚才Toast的文本内容,对应的名字为"unsuccessed"。String.xml文件中的所有字符串资源都在然后在"gen</packagename>/R.java"文件的String类中被标识,每个字符串都有唯一的int类型索引值,使用apktool反编译apk文件后,所有的索引值都保存在string.,xml文件同目录下的public.xml文件中。查看public.xml文件:
unsuccessed对应的id为 0x7f05000b,搜索反编译出来的所有文件内容,发现只有MainActivity$1.smali文件对0x7f05000b有一处引用:
即使对smali语法不熟悉,看到调用的函数也能猜测出,这是在调用Toast函数对unsuccessed的文本内容进行显示。在引用0x7f05000b之前一点,可以看到有一个判断跳转的指令:"if-nez v0,cond_0",如果不跳转则Toast unsuccessed,否则跳转到cond_0处执行,查看cond_0处的代码:
代码的结构和引用0x7f05000b处的类似,利用相同的方法可以找到0x7f05000c对应的是字符串"恭喜您!注册成功"。所以如果能让这个跳转成功的话,也就意味着注册成功了。所以代码"if-nez v0,:cond_0"是程序破解的关键,将"if-nez"改为相反的指令"if-eqz"保存退出。
0x03重新编译
接下来使用apktool将修改后的文件重新进行编译打包成apk文件,命令如下:
生成的apk文件是在dist文件夹下,和原apk同名。
编译生成的crackme02.apk没有签名还不能进行安装,使用signapk.jar对这个apk进行签名。
接下来测试一下修改后的apk是否起效了,先在虚拟机里面卸载刚刚安装的crackme应用:
然后使用adb install将修改后的apk安装到虚拟机中:
可以看到,输入任意的用户名和注册码,Toast消息显示注册成功了。
by:会飞的猫
转载请注明:http://www.cnblogs.com/flycat-2016
第一个Android crackme(2016-05)的更多相关文章
- 用Kotlin创建第一个Android项目(KAD 01)
原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...
- sublime text 3 license 2016.05
补充:2016.05 最近经过测试,3个注册码在新版3103的sublime上已经不可用了. 现补充两枚新版的license key: -– BEGIN LICENSE -– Michael Barn ...
- 认识Activity,创建第一个android应用-Hello Word
2016-04-05 配置好Java.eclipse和Android环境就花费了一天时间.下载SDK真是费了不少时间.现在终于找到解决SDK更新的好方法了(更新自己电脑上的hosts文件,就可以使用G ...
- Android Service总结05 之IntentService
Android Service总结05 之IntentService 版本 版本说明 发布时间 发布人 V1.0 添加了IntentService的介绍和示例 2013-03-17 Skywang ...
- 一个Android音频文本同步的英文有声读物App的开发过程
转发: http://segmentfault.com/a/1190000003498111 “新概念英语”.“可可英语”.“亚马逊的audible有声书”.“扇贝听力”是我目前所知道的实现英文语音和 ...
- 一个android参考网站,工具+源码
Android多渠道打包工具 https://github.com/wubo/apptools Android官方培训课程中文版(v0.9.4) http://hukai.me/android-t ...
- 3.创建第一个android项目
安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 3.创建第一个android项目 1.打开Eclipse,选择File——>new——>others.. ...
- 创建一个Android项目
当我们的eclipse安装了SDK后,点击Window-->Perference-->DDMS.eclipse界面立即转为DDMS界面. 这时,我们可以打开我们的服务端(安卓模拟器或者是我 ...
- Android开发自学笔记(Android Studio1.3.1)—2.开始第一个Android应用
一.前言 使用Android Studio开发Android应用是一件非常简单的事情,因为它会帮你自动完成很多工作.本篇我们主要完成一个单击按钮在文本框显示当前时间的简单应用,借此来演示一下 ...
随机推荐
- Android自定义组合控件内子控件无法显示问题
今天自定义了一个组合控件,与到了个奇葩问题: 我自定义了一个RelativeLayout,这个layout内有多个子控件.但奇怪的是这些子控件一直显示不出来.调试了一下午,竟然是因为在获取(infla ...
- MySQL 的 phpmyadmin上传大小限制(转)以及 MySQL server has gone away 的解决办法
phpmyadmin上传大小限制 原帖地址:http://www.hmidc.com/home/news/?13914.html 时间:2011-6-21 11:17:57 作者:红帽之家 来源: ...
- Android开发(19)---常见dialog对话框的运用
Dialog是android开发过程中最常用到的组件之一,Dialog的创立办法有两种: 一是直接new一个Dialog目标,然后调用Dialog目标的show和dismiss办法来操控对话框的显现和 ...
- ON COMMIT PRESERVE ROWS
定义声明式全局临时表的每个会话拥有自己的独特的临时表描述.当会话终止时,表行和临时表描述均会被删除. 有如下选项,可控制commit后临时表的状态: ON COMMIT DELETE ROWS:在执行 ...
- php中traits学习笔记
traits学习 越来越多的框架和代码开始使用traits方式去组织一些功能,这是非常高效的代码组织结构. 通过trait来减少不必要的类继承关系,让代码更加复用,形成可以拔插的代码集合. 通过逗号分 ...
- ADO.NET初学习
①System.Data → DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint,DataColumnMapping,DataT ...
- Cloudera Manager 5.9 和 CDH 5.9 离线安装指南及个人采坑填坑记
公司的CDH早就装好了,一直想自己装一个玩玩,最近组了台电脑,笔记本就淘汰下来了,加上之前的,一共3台,就在X宝上买了CPU和内存升级了下笔记本,就自己组了个集群. 话说,好想去捡垃圾,捡台8核16线 ...
- 间隔Ns请求某函数并且有timeout
实现方案: 1. 递归调用 2.timer:apply_interval() 3.gen_server来写 时间timeout怎么实现: 1.开始时间存入ets表中 2.put,get方法放入进程字典 ...
- Composer入门
摘要 本文介绍Composer的入门知识,包括require和autoload部分. Java有Maven, Node.js有npm, ROR有gem, 这些语言的程序员在开心地使用包管理工具加速开发 ...
- 【C#】【SHARE】The registering of global hotkeys
I remember that when I was still using VB6 sereval years ago, if global hotkeys are required, a mass ...