使用AndroidKiller进行APK反编译
安装环境
- JDK
最好用JDK8,问就是坑太多了 - Android Studio
官网安装即可,安装教程如下
https://www.runoob.com/android/android-studio-install.html
实际上还有一些杂七杂八的东西,后面遇到的时候再安装
编写第一个Android APP
打开Android Studio
,创建一个Empty Activity
编写MainActivity.java
代码
打开activity_main.xml
,点击Design
进行可视化拖拽编程
组件的属性需要跟上面的MainActivity.java
中的对应
例如这里的用户名输入框的id是TEST_NAME
,MainActivity.java
中用户名输入框代码为:
模拟运行、手机安装
输入用户名密码正确时(admin/admin123),显示登录成功;输入用户名密码错误时(xxx/xxx),显示登陆失败
选择build apk,生成手机安装的apk文件
将生成的apk文件传给手机就能够安装运行了
Android逆向工具
安卓逆向的工具很多,这里我们使用Android Killer
链接:http://pan.baidu.com/s/1skClh3f 密码:6u0q
现在就能够正常使用该工具了
逆向初体验
将我们刚才生成的apk文件拖进Android Killer
,等待反编译结束
可以注意到这里是smali文件,smali是Android虚拟机的反汇编语言
我们都知道,Android代码一般是用java编写的,执行java程序一般需要用到java虚拟机,在Android平台上也不例外,但是出于性能上的考虑,并没有使用标准的JVM,而是使用专门的Android虚拟机(5.0以下为Dalvik,5.0以上为ART)。Android虚拟机的可执行文件并不是普通的class文件,而是再重新整合打包后生成的dex文件。dex文件反编译之后就是Smali代码,所以说,Smali语言是Android虚拟机的反汇编语言。
我们暂时不需要刻意去学习smali语法,看不懂的地方就先百度,看得多了常见的就会了
寻找smali文件中的check
方法,也就是之前我们编写用来判断用户输入用户名密码是否正确的函数,下面对该部分代码逐行讲解
# virtual methods
在smali
中函数分为两类:direct method
和virtual method
,direct method
就是private
私有方法,virtual method
就是指其余的方法。
.method public check(Ljava/lang/String;Ljava/lang/String;)V
check方法
.locals 2
指定了方法内局部变量的个数,这里是用户名和密码两个
两个变量
.line 31
表示java源文件中指定行
const-string v0, "admin"
定义常量字符串,即 v0 = admin
invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
把p1
和v0
的值进行比较
move-result v0
将上个函数的执行结果传递给v0,这里的上个函数是equals
const/4 v1, 0x0
将值0x0存到v1本地寄存器
if-eqz v0, :cond_0
如果v0等于0,则跳转到cond_0
cond_0
部分的代码为登陆失败代码
检测密码的流程也类似,当检测通过后,就会进入登录成功逻辑
所以整个逻辑就是用户名密码传递给了p1,p2,然后与硬编码的v0依次进行比较,如果不相等则v0为0,登录失败,如果用户名密码都正确,程序才会往下执行,显示登录成功
想要在不知道密码的情况下修改smali代码,从而登陆成功的方法有很多种,比如原文中给出了将if-eqz
修改为if-nez
;删除掉判断语句;使用goto语句直接跳转等方式
然后重新编译为新的apk
回编的时候报错了
出现这个问题一般是apktool.jar
的版本太老了的原因,在官网下载最新版本即可:https://ibotpeaches.github.io/Apktool/install/
将下载的jar
放置在AndroidKiller\bin\apktool\apktool
文件夹下,并且重命名为ShakaApktool.jar
,也就是将原来的那个过时jar
覆盖掉
该问题也可以编辑APKTOOL管理器来进行指定apktool.jar进行操作
重新编译时出现新的问题:
添加参数-r
删除掉C:\Users\<这里填自己的用户名>\AppData\Local\apktool\framework\1.apk
文件,重新编译,无报错,修改成功
参考链接
- 教我兄弟学Android逆向系列课程+附件导航帖
- Android逆向基础:Smali语法
- Android Killer中apktool插件更新
- AndroidKiller回编译BrutException错误
END
建了一个微信的安全交流群,欢迎添加我微信备注进群
,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注 😃
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/16405519.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!