移动apk逆向入门

一、apk格式简介

META-INF 签名文件,如果没有签名文件,可通过apk上上签工具生成签名文件
res 资源文件,包含不能打包进 resources.arsc 的一些资源文件,如图片、布局信息等
AndroidMainfest.xml 配置文件
classes.dex 代码块,包含了应用的整个代码逻辑
resources.arsc 应用资源文件。
在这里插入图片描述

二、apk逆向工具

Android Killer(需要jdk环境),可实现动态调试

(一)基本使用

1.修改smali代码后,编译,安装到模拟器
在这里插入图片描述
2.查看Java源码(只能查看)
在这里插入图片描述
3.字符串搜索
在这里插入图片描述
4.AndroidMainfest.xml
安卓系统从配置文件中读取包名,将包名作为程序的进程名
在这里插入图片描述

(二)smali语言

1.在一个文件内查找函数
.methon 函数开始
.end methon 函数结束
在这里插入图片描述
2.Smali语言基本类型映射表
在这里插入图片描述
3.查看工具自带提示

v代表本土寄存器,存储程序中间运算结果
p0寄存器代表this自身
p1等寄存器代表参数寄存器
在这里插入图片描述
在这里插入图片描述

三、逆向实例

在这里插入图片描述

1.搜索关键词“无效的用户名和密码”

开始时在字符串搜索框中搜索不到,于是利用工程搜索该字符串,在资源文件中找到,此程序采用了硬编码方式。
在这里插入图片描述在这里插入图片描述

2.通过资源文件中name值查找ID值

在这里插入图片描述

3.找到ID值,查看程序哪里进行了引用

在这里插入图片描述

4.搜索ID值,找到注册失败代码处

在这里插入图片描述

5.利用同样方法,查找注册成功代码处

在这里插入图片描述

6.点击咖啡杯,查看源码

发现代码有些异常,不完整,且多了$1,原因是使用了匿名内部类,而匿名内部类和原类类命名冲突,故多加了$1,此时,应找到他对应的原类。

匿名内部类咖啡杯解析
在这里插入图片描述
原类咖啡杯解析
在这里插入图片描述

7.在Java源码中查找关键代码,通过关键字查找

在这里插入图片描述

8.转为为10进制,因为咖啡杯中使用的就是10进制

在这里插入图片描述

9.发现对应Java中代码位置(咖啡杯的搜索不好用,有时搜索不到)

在这里插入图片描述

10.返回smali语言查看,发现有条件语句cond 0,在该函数中寻找cond 0

在这里插入图片描述

11.发现cond 0黄色高亮,此语句决定程序走向

在这里插入图片描述

12.处理方式:

1).通过修改代码逻辑(取反)

if-nez 修改为if-eqz
在这里插入图片描述

2)修改v0值

在这里插入图片描述

3)如果app无法修改业务逻辑(修改逻辑重新编译时报错,产生雪崩效应),则需要读懂程序算法。

读算法时,注意onClick(按钮点击)、getText(获取前端输入)等关键函数,也可定位关键代码。
研究程序代码,建议使用JEB(静态分析工具),Android Killer自带的咖啡杯对smali代码的Java翻译存在一定局限性。

题外话:
JEB使用技巧
Tab键查看Java源码
函数双击进入
右键,通过交叉引用查看函数被谁调用
在这里插入图片描述

接下来我们继续看JEB翻译的代码
发现程序中将经过一系列运算后的v5值和我们的输入作比较,如果相等,返回true,否则返回false
在这里插入图片描述

因此我们只要运行程序,看v5值即可,通过打印日志即可
由于刚才分析的代码在checkSN函数中,我们在源smali代码中查找
在这里插入图片描述
根据前述分析,我们需要查看v6的值
在这里插入图片描述
那么如何打印v6值呢?我们应该插入到v6最后一次出现的位置,因为v6寄存器有可能被多次赋值。
方式:
双击v6,出现高亮,代码往上找,找到最后一个move-result-object,结果被赋值的地方
在这里插入图片描述
在这里插入图片描述
重新编译代码,查看日志
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值