赞
踩
逆向——包括但不限于通过反编译、Hook 等手段,来解析一些功能的实现过程。
逆向在很多领域都有应用,比如如今爬虫技术已经遍地走,甚至不用写代码都可以爬取数据,导致前端开发的反爬意识也逐步提升。因此 JS、Android 等领域的逆向,已经成为爬虫开发者必备的技能之一。
这里介绍下关于 Android 的逆向准备:
介绍一下本文逆向的步骤:
当然,用三步概括,看上去像“把大象塞进冰箱分为几步”。逆向作为一项与应用开发者对抗的网络安全技术,其手段花样多端,有时甚至不需要代码也可以完成逆向,所以这个概括仅对应文中的遇到情况。
相信点击进入这篇博客的小伙伴都知道并且搞过App
逆向,不过有时候会遇到各种加壳的App
,不让你反编译。但是道高一尺,魔高一丈
,有正向加密
,就有逆向解密
。此篇博客博主带大家搭建脱壳环境,并且手动脱一个加了某60的壳的App
。
脱壳需要用到的工具,对Android系统是有要求的:环境需要一个Android
系统,需要root权限、版本不能高于Android8.0。这样的真机现在已经很难找到了,还是模拟器方便一些。建议使用虚拟机/模拟器
,不然你还要获取root
权限,容易搞坏真机。我这里用的是网易模拟器,Android
系统的版本为6.0.1
.
需要root
权限,虚拟机直接允许即可,真机要用第三方工具获取,网上有很多教程。
Xposed Installer
官网地址:https://repo.xposed.info/module/de.robv.android.xposed.installer
Xposed Installer
下载完毕后,直接拖入模拟器安装即可。然后打开这个App
由于我之前安装过,所以没提示要root权限,第一次安装的时候会提示授权的,授予即可。
反射大师是一个支持一键脱壳的神器,貌似什么壳都能脱,不过后面更新的壳会不会添加检测机制就说不清了。。。
下载地址:https://www.lanzous.com/i6x1kaf
https://www.duote.com/android/1048782.html
直接拖入模拟器中进行安装,然后打开。会提示让你激活Xposed。
然后重启模拟器!
首先在模拟器中安装好待脱壳的软件,用MT管理器可以查看软件加的是什么壳。(反射大师
不区分壳类型,是壳都可以脱。)
先把软件选中,然后打开待脱壳的App。
jadx工具可以将dex反编译成java代码。
安居客app脱壳文件
经过上一步的脱壳操作,我们获取到了多个dex文件,接下来这些dex文件我们可以直接一个一个拖入jadx进行分析,在jadx中可以直接看到其内部的java代码。但是这样对于我们而言太麻烦了,像上面安居客的例子,我们获得了 16个dex,假如我们一个一个拖进jadx中分析,将会耗费我们大量的精力,因此我们需要对这些dex文件进行二次加工,加工细分为以下两个方向:
1、将多个dex使用jadx合并为单个sources文件,然后使用IDE软件进行查看(java层代码静态分析)
2、将多个dex使用baksmali.jar转为smali代码,结合apktool得到项目文件,替换相关smali文件后可用于动态调试
准备工作
1、jadx文件
jadx文件我们可以通过直接在github项目中下载,如图下载最新版本的jadx-x.x.x.zip,解压后的bin目录中即可看到
2、Dex2Java脚本
该脚本用于将多个dex合并为单个sources文件
自编写如下:
Dex2Java.py
import os, sys if __name__ == "__main__": if len(sys.argv) < 2 : print("start error!start need 2 arguments!") sys.exit() print(sys.argv[1]) path = os.path.split(__file__)[0] + '\\' print(path) files= os.listdir(path) for file in files: if file.find(".dex") > 0: sh = sys.argv[1] + ' -j 1 -r -d ' + path + " " + path + file print(sh) os.system(sh)
ps:该python脚本执行时需要传入jadx文件的绝对路径
具体使用
1、我们使用反射大师获取了多个dex文件,我们将Dex2Java.py
放入这些dex文件的同一个文件夹中
2、该目录下执行Dex2Java.py
并传入jadx的绝对路径,我这里为C:\Users\admin\Desktop\jadx\bin\jadx
Dex2Java.py C:\Users\admin\Desktop\jadx\bin\jadx
3、执行完毕后,相同目录下将会得到一个sources文件夹,该文件夹能直接用IDE工具打开查看其java代码
准备工作
1、apktool
apktool用于将apk文件反编译为项目文件,下载地址:https://www.pcsoft.com.cn/soft/57847.html
2、baksmali.jar文件
basksmali.jar文件用于将dex文件转为smali代码,下载地址:https://bitbucket.org/JesusFreke/smali/downloads/
3、Dex2Smali脚本
该脚本用于将dex文件转为smali代码
自编写如下:
Dex2Smali.py
import os, sys if __name__ == "__main__": if len(sys.argv) < 2 : print("start error!start need 2 arguments!") sys.exit() path = os.path.split(__file__)[0] + '\\' files= os.listdir(path) for file in files: if file.find(".dex") > 0: prefix = file.split('.')[0] print(prefix) sh = 'java -jar ' + sys.argv[1] + ' disassemble -o smali_' + ('' if 'classes'==prefix else prefix) + ' ' + file print(sh) os.system(sh)
ps:该python脚本执行时需要传入baksmali.jar文件的绝对路径
具体使用
1、我们使用反射大师获取了多个dex文件,我们将Dex2Smali.py
放入这些dex文件的同一个文件夹中
2、该目录下执行Dex2Smali.py
并传入baksmali.jar的绝对路径,我这里为E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar
Dex2Smali.py E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar
3、执行完毕后得到多个classes文件
4、使用apktool反编译目标apk,得到apk同名项目文件夹
将apk拖入apktool脚本所在文件夹,cmd执行以下命令apktool -r d anjuke.apk -only-main-classes
脱壳只是第一步,后面还有修改、调试、回编译,工作量都很大,以上就是脱壳环境搭建与脱某60壳实战的主要内容。壳确实脱了,但是没有修复步骤,比如修改Apk中的xml、程序入口等操作。这主要是由于不同的壳,修复步骤不同。
分析代码这个步骤,完全是考验你的 Java 基本功 + 耐心,二者缺一不可。
不过不要退缩,我们只要遵循一些技巧,就可以大幅减少工作量。由于分析过程比较繁琐,这里就不结合具体代码了,只做一些理论总结:
1、从目标 API 开始入手,跟踪执行流程: 比如我们刚才已经搜索到关键词代码,那就从那一行开始,通过 IDEA 查看方法功能,可以一路向下点击。
2、只分析涉及代码块,缩小分析范围: 请求过程通常会构建 Request 对象,那参数加密一定就在构建对象之前,我们只要找到构建 Request 对象的代码,然后查看加密参数被传入之前都经过了怎样的处理,其他代码全部无视。
3、将部分代码块复制出来进行执行: 虽然反编译的项目代码无法被整体执行,但对于冗长难懂的方法代码,我们可以连同相关代码一起复制到一个新项目中,进行编译执行,方便我们调试。
4、尝试搜索一些关键词: 代码并不会所有都被混淆,可以尝试全局搜索一些关键词。比如 Java 常用的加密算法,我们可以搜索 RSA、AES、MD5、Encrypt、public_*key 这些关键词和正则匹配,能搜到再好不过了。
当你找到了加密方法,那么可以复制出来独立执行,然后自己构建参数传入加密,通过模拟请求,看接口是否正常返回。
需要注意,如果不能正常请求,并不一定是你找错了地方,也有可能代码本身有误,反编译的代码是有几率会出现这种情况的,导致你执行的和 APK 执行的结果不同。遇到这种情况,只能通过其他手段来修正代码,如阅读 Smali 代码、通过 Hook 等手段,这种情况比较复杂。
参考:https://blog.csdn.net/qq_41855420/article/details/106276824
https://blog.csdn.net/dannyxycheung9665/article/details/130254095
App 爬虫必备技能:三步完成 Android 逆向:https://zhuanlan.zhihu.com/p/80733843
http://www.newxtc.com/article.php?id=227
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。