这节正式开始破解编写的第一个Android工程,打开Android Killer,把第一节自己编写的Android apk拖入Android Killer。

PS: 如果Android Killer不能编译成APK,或者反编译失败,应该是apktool等工具版本低了,参见AndroidKiller高版本反编译失败解决

把APK拖到Android Killer界面,把apk文件拖到Android Killer界面,工具自动开始反编译,反编译完成后点击左侧入口处即可打开MainActivity。(如果卡在正在反编译APK源码请稍等..,关闭Android Killer重新打开即可)

  先思考下,破解这个程序的关键点是什么: 当我们填写错误的激活码时会提示 “非法的激活码,注册失败”,填写正确激活码提示“激活码合法,已注册”。

我们分别找到这二句代码处,把执行注册失败地方的代码修改为去执行注册成功的代码不就破解了吗?OK,思路有了就开始吧。

  点击Android Killer的工程搜索标签页,输入 非法的激活码,注册失败,点击Aa图标 -> 文本转Unicode,点击搜索,来到对应的smali代码处。搜索注册成功的方法同上,如图:

看到提示成功和失败二个地方都在confirmJHM方法里,都是把字符串传给v0寄存器,然后使用invoke-static调用makeText方法显示。

成功的逻辑在上面,如果没有跳转的话是不会执行失败的逻辑的,肯定是跳转绕过了成功部分。

往上找,发现37行 if-eqz v0, :cond_0  即:如果v0等于0,就跳转到cond_0执行,就提示失败;即如果v0不等于0就提示成功。

继续往上分析代码可知,31行const-string v0,"abc"存储正确的激活码abc,33行把我们填写的激活码p1跟abc做比较,如果不想等就返回0,35行把函数返回值给v0寄存器。

现在我们知道了,只要我们不让程序跳转到cond_0执行就可以提示成功了,怎么办呢?修改办法有很多,只要实现我们想要的效果就可以了。这儿我们直接注销低37行的smali代码即可。

ctrl+s保存修改,点击左上角的Android标签页->编译。编译完成后生成新的apk。重新测试下,输入错误激活码也能显示注册成功

Android逆向 破解第一个Android程序的更多相关文章

  1. Android逆向破解表单注册程序

    Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...

  2. Android逆向破解表单登录程序

    Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...

  3. Android工程:引用另一个Android工程的方法详解

    本篇文章是对在Android中引用另一个Android工程的方法进行了详细的分析介绍.需要的朋友参考下   现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新 ...

  4. Android逆向——破解水果大战

    最近公司需要测试安卓app安全,但安卓基本上0基础,决定开始学习下安卓逆向根据吾爱破解上教程 <教我兄弟学Android逆向系列课程+附件导航帖> https://www.52pojie. ...

  5. 【Android实验】第一个Android程序与Activity生命周期

    目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...

  6. Android学习笔记_70_一个应用程序启动另一个应用程序的Activity

    第一种(我自己写的) :之前在网上看来一些,很多不是我要的可以启动另外一个应用程序的主Activity. //这些代码是启动另外的一个应用程序的主Activity,当然也可以启动任意一个Activit ...

  7. 零开始Android逆向教程(一)——初探Android逆向

    这段时间因为某些业务驱动,开始研究一些逆向相关的东西,浏览了下其所包含的大致内容,发现真是一个新大陆,跟之前耳听目染过的一些门面介绍完全不是一个层级的,真正的印证了下手难这一说法.   谨此以本文开始 ...

  8. Creating an Android Project(创建一个android项目)

    一个android项目包含了你的应用程序中的所有源代码文件,我们可以通过android sdk tools轻松地创建一个拥有默认文件跟文件夹的android项目. 这部分课程我们将展示两种创建andr ...

  9. 如何把一个android工程作为另外一个android工程的lib库

    http://zhidao.baidu.com/question/626166873330652844 一个工程包含另一个工程.相当于一个jar包的引用.但又不是jar包反而像个package 在网上 ...

随机推荐

  1. JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox

    JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox <html> <head> </h ...

  2. Apache Oltu 实现 OAuth2.0 服务端【授权码模式(Authorization Code)】

    要实现OAuth服务端,就得先理解客户端的调用流程,服务提供商实现可能也有些区别,实现OAuth服务端的方式很多,具体可能看 http://oauth.net/code/ 各语言的实现有(我使用了Ap ...

  3. spring 资源访问

    spring 资源访问 Resource resource=null; //访问网络资源 resource=new UrlResource("file:bool.xml"); // ...

  4. 在linux下实现mysql自动备份数据

    使用的系统为CentOS,mysql版本为5.6 备份功能主要利用以下功能实现: mysql命令中的mysqldump命令 linux下脚本编写 linux下crontab定时任务的使用 首先确定你要 ...

  5. Ajax初始接触

    演示JS对象的属性,方法和事件的使用 (1)window.location.href (2)form.submit() <form action="" method=&quo ...

  6. INSERT INTO IF EXISTS

    INSERT INTO books (name) SELECT 'MySQL Manual' FROM dual WHERE NOT EXISTS (SELECT id FROM booksWHERE ...

  7. [Python学习笔记-001] 内置函数getattr()

    如果某个实例foo有多个方法, 当对foo的每一个方法我们都需要使用try ... except ...进行包装的时候,内置函数getattr()可以用来精简代码. 1. getattr()的用法 # ...

  8. Unity3D第一战:软件安装与代码调试

    1.软件的安装 Unity3D可以轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,功能非常强大. 最新版下载地址:http://unity3d.com/u ...

  9. LVS专题-(3) 虚拟ip理解

    1.虚拟IP是什么? 要是单讲解虚拟 IP,理解起来很困难,所以干脆把 动态 IP .固定 IP .实体 IP 与虚拟 IP都讲解一下,加深理解和知识扩展 实体 IP:在网络的世界里,为了要辨识每一部 ...

  10. Docker基础教程(常用命令篇)

    1.查看docker信息 # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2.启动容器 # 交互式 $docker run -it ...