Android逆向分析(一) - 反编译看看手Q口令红包的实现原理

本文是《Android软件安全与逆向分析》的实践笔记,介绍了如何反编译APK,通过Apktool和jadx探索手Q口令红包的实现原理。通过字符串、类/函数名和常量的搜索方法,逐步揭示红包的内部逻辑,包括红包数据结构和判断流程。
摘要由CSDN通过智能技术生成

原文:http://blog.zhaiyifan.cn/2016/02/09/android-reverse-1/

本系列文章是《Android软件安全与逆向分析》的实践笔记(一些工具的版本和用法已经不同了),同时笔者希望系统性地记录一下逆向方面的文字和想法。

逆向工程(又称反向工程),是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是,在不能轻易获得必要的生产信息下,直接从成品的分析,推导出产品的设计原理。

逆向工程可能会被误认为是对知识产权的严重侵害,但是在实际应用上,反而可能会保护知识产权所有者。例如在集成电路领域,如果怀疑某公司侵犯知识产权,可以用逆向工程技术来寻找证据。 —— [ 维基百科 ]

第一篇作为开始,先讲讲简单的反编译。
因为没带kvm回来,mbpr屏幕太小,所以下文环境为windows。

反编译

让我们从实战开始,先实践一下怎么去反编译一个apk,看看某些功能的实现,甚至打一个包吧。毕竟没有实践的原理都是耍流氓。

准备

工具
- Apktool
- jadx

安装包
- 手机QQ 6.2.3 (目标就设定为看看口令红包是怎么做的吧)

Apktool的使用

首先确保你安装了java 7或以上,并能直接在命令行调用java

  1. 下载 windows用wrapper脚本 (mac使用这个)。
  2. 下载最新的apktool
  3. 重命名上面下载的apktool jar文件为apktool.jar
  4. 把apktool.bat和apktool.jar放在同一个目录下,并加入PATH环境变量。
  5. 现在你可以直接通过命令行调用apktool并查看使用方式了。
Apktool v2.0.3 - a tool for reengineering Android apk files
with smali v2.1.0 and baksmali v2.1.0

usage: apktool
 -advance,--advanced   prints advance information.
 -version,--version    prints the version then exits

usage: apktool if|install-framework [options] <framework.apk>
 -p,--frame-path <dir>   Stores framework files into <dir>.
 -t,--tag <tag>          Tag frameworks using <tag>.

usage: apktool d[ecode] [options] <file_apk>
 -f,--force              Force delete destination directory.
 -o,--output <dir>       The name of folder that gets written. Default is apk.out
 -p,--frame-path <dir>   Uses framework files located in <dir>.
 -r,--no-res             Do not decode resources.
 -s,--no-src             Do not decode sources.
 -t,--frame-tag <tag>    Uses framework files tagged by <tag>.

usage: apktool b[uild] [options] <app_path>
 -f,--force-all          Skip changes detection and build all files.
 -o,--output <dir>       The name of apk that gets written. Default is dist/name.apk
 -p,--frame-path <dir>   Uses framework files located in <dir>.

jadx的使用

  1. 下载jadx
  2. 运行gradlew dist编译。
  3. jadx\jadx-gui\build\install\jadx-gui\bin下有可运行的gui
  4. jadx\jadx-cli\build\install\jadx\bin是命令行程序
  5. 可以都加入PATH环境变量,以便直接命令行调用。

分析APK文件

First Try

虽然我们可以用jadx直接打开apk傻瓜式地去查看源代码,但是为了更理解反编译的过程和工作原理,以便以后在碰到一些问题(比如加壳)的时候可以自己解决,这里我们先装逼一下,使用Apktool去进行分析。

D:\dev\reverse>apktool d -o qq mobileqq_android_6.2.3.apk
I: Using Apktool 2.0.3 on mobileqq_android_6.2.3.apk
I: Loading resource table...
Exception in thread "main" brut.androlib.AndrolibException: Multiple res specs: attr/name
        at brut.androlib.res.data.ResTypeSpec.addResSpec(ResTypeSpec.java:78)
        at brut.androlib.res.decoder.ARSCDecoder.readEntry(ARSCDecoder.java:248)
        at brut.androlib.res.decoder.ARSCDecoder.readTableType(ARSCDecoder.java:212)
        at brut.androlib.res.decoder.ARSCDecoder.readTableTypeSpec(ARSCDecoder.java:154)
        at brut.androlib.res.decoder.ARSCDecoder.readTablePackage(ARSCDecoder.java:116)
        at brut.androlib.res.decoder.ARSCDecoder.readTableHeader(ARSCDecoder.java:78)
        at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:47)
        at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:544)
        at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:63)
        at brut.androlib.res.AndrolibResources.getResTable(Androl
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值