第一个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)的更多相关文章

  1. 用Kotlin创建第一个Android项目(KAD 01)

    原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...

  2. sublime text 3 license 2016.05

    补充:2016.05 最近经过测试,3个注册码在新版3103的sublime上已经不可用了. 现补充两枚新版的license key: -– BEGIN LICENSE -– Michael Barn ...

  3. 认识Activity,创建第一个android应用-Hello Word

    2016-04-05 配置好Java.eclipse和Android环境就花费了一天时间.下载SDK真是费了不少时间.现在终于找到解决SDK更新的好方法了(更新自己电脑上的hosts文件,就可以使用G ...

  4. Android Service总结05 之IntentService

    Android Service总结05 之IntentService   版本 版本说明 发布时间 发布人 V1.0 添加了IntentService的介绍和示例 2013-03-17 Skywang ...

  5. 一个Android音频文本同步的英文有声读物App的开发过程

    转发: http://segmentfault.com/a/1190000003498111 “新概念英语”.“可可英语”.“亚马逊的audible有声书”.“扇贝听力”是我目前所知道的实现英文语音和 ...

  6. 一个android参考网站,工具+源码

    Android多渠道打包工具  https://github.com/wubo/apptools Android官方培训课程中文版(v0.9.4)  http://hukai.me/android-t ...

  7. 3.创建第一个android项目

    安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 3.创建第一个android项目 1.打开Eclipse,选择File——>new——>others.. ...

  8. 创建一个Android项目

    当我们的eclipse安装了SDK后,点击Window-->Perference-->DDMS.eclipse界面立即转为DDMS界面. 这时,我们可以打开我们的服务端(安卓模拟器或者是我 ...

  9. Android开发自学笔记(Android Studio1.3.1)—2.开始第一个Android应用

    一.前言      使用Android Studio开发Android应用是一件非常简单的事情,因为它会帮你自动完成很多工作.本篇我们主要完成一个单击按钮在文本框显示当前时间的简单应用,借此来演示一下 ...

随机推荐

  1. python cookbook学习笔记 第一章 文本(2)

    1.6合并字符串 ka=list('kaluoc') #字符串转成字符串列表 print ''.join(ka) #大量的字符串相连,join是最高效的 print '%s%s something % ...

  2. 挖一下插件v1.5版本发布

    Chrome图片下载插件,支持网页截屏 v.1.5更新说明: 1.增加下载图片按日期分类保存选项,便于管理,用户可根据需要开启/关闭此设置 2.增加网页图片采集快捷键: (1)采集页面图片(Ctrl+ ...

  3. Hibernate(一)——采用Hibernate框架开发环境搭建

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员充分使用对象编程思维来操作数据库.HIbernate的移植性很好,它可以应用于任何JDB ...

  4. VS2012下基于Glut 矩阵变换示例程序:

    也可以使用我们自己的矩阵运算来实现OpenGL下的glTranslatef相应的旋转变换.需要注意的是OpenGL下的矩阵是列优先存储的. 示例通过矩阵运算使得圆柱或者甜圈自动绕Y轴旋转,可以单击鼠标 ...

  5. 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数

    一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一).对象成员及其初始化  C++ Code  1 2 3 4 5 6 7 8 9 1 ...

  6. jprofiler8使用小贴士

    说明:本文的小贴士是针对jprofiler8的,其他版本上可能有不适用的地方 贴士一:使用jpenable监控,无需增加jvm参数和重启 贴士一:使用jpenable监控,无需增加jvm参数和重启 j ...

  7. 框架基础:ajax设计方案(三)---集成ajax上传技术

    之前发布了ajax的通用解决方案,核心的ajax发布请求,以及集成了轮询.这次去外国网站逛逛,然后发现了ajax level2的上传文件,所以就有了把ajax的上传文件集成进去的想法,ajax方案的l ...

  8. java参数传递(值传递还是引用传递)

    Java中的参数传递机制一直以来大家都争论不休,究竟是“传值”还是“传址(传引用)”,争论的双方各执一词,互不相让.不但“菜鸟”们一头雾水,一些“老鸟”也只知道结果却说不出所以然来.我相信看过下面的内 ...

  9. 解决,Incorrect table definition; there can be only one auto column and it must be defined as a key

    今天在迁移项目时,操作数据库报错: Incorrect table definition; there can be only one auto column and it must be defin ...

  10. iOS软件架构——架构模式(Architectural Pattern)

    一个架构模式描述软件系统里的基本的结构组织或纲要.架构模式提供一些事先定义好的子系统,指定它们的责任,并给出把它们组织在一起的法则和指南.有些作者把这种架构模式叫做系统模式[STELTING02]. ...