安卓逆向|记录第一次完整安卓逆向过程笔记
文章目录
- 前言
- 一、安卓逆向的准备
- 二、刷机+配置+安装app
-
- 1.安卓系统版本
- 2.手机root+面具安装
- 3.xposed安装
- 三.逆向app
- 总结
前言 作为新时代爬虫er,逆向技能是必不可少的,在博主精心学习了几个月js逆向之后,又把矛头指向了安卓逆向,同为逆向,虽然相同点很多,都是不同点也不少,这里记录一下博主初学安卓逆向步入的几个大坑,和完整逆向的过程,希望能够帮助到安卓逆向新人,望周知!!
一、安卓逆向的准备
工欲善其事,必先利其器
,这里给大家推荐一下我在本文中使用过的工具(都在网盘链接里,都给你们安排好了
):adb
: 操作手机的命令,百度非常多教程,这里我不说了jadx
:jadx打开文中.dex的工具,神器apktool
: 观察app内容的利器,当然通过改名zip解压也行,但是还是缺少内容,本文用来观测到该app是加固过的fdex2
: 脱壳工具,利器xposed
: 好东西,不解释magisk
: 俗称面具,好东西twrp
: 一种大佬开发的东西,不了解,但是要用
提取码:pypy
当然了还有我们逆向使用的安卓手机,这里博主的是
pixel 1
手机 加上一根数据线,注意有些数据线只有充电功能,要确定能连电脑usb的数据线哦
二、刷机+配置+安装app 1.安卓系统版本 像我这种菜鸡做逆向,当然不能硬刚最新的安全产品,所以得按老的来,加上前辈大佬们为我们铺的老路,会让我们的逆向之路更加安稳,刷机前注意备份自己重要的数据。下载自己想要刷的安卓版本的包,这里博主下载的是
pixel
7.12的安卓包,注意!!!要找到自己对应手机的包下载,否则手机变砖我可不负责!!!
注意!!!要找到自己对应手机的包下载,否则手机变砖我可不负责!!!
注意!!!要找到自己对应手机的包下载,否则手机变砖我可不负责!!!
:https://developers.google.cn/android/images#sailfish
文章图片
其他机型请自己百度下载对应的包,
在下载好之后,我们使用cmd输入
adb reboot bootloader
进入
fastboot
模式,点击下载好解压后的包里的flash-all.bat
等待刷机完毕即可,开机之后进入设置—>关于手机,多次点击版本号,打开开发者模式,打开usb调试,弹出窗口是否同意该计算机控制调试,选择同意2.手机root+面具安装 root是个好东西,所以我们也要弄,再次进入
fastboot
模式,然后在对应文件路径下输入fastboot boot twrp-3.3.0-0-sailfish.img
进入临时
TWRP
,然后将面具也就是magisk
传输到手机中adb push Magisk-v17.2.zip /sdcard/#或者其他路径
滑动解锁,点击install进入文件夹,选择刚刚传入的包,滑动安装,安装完毕后点击reboot重启,然后cmd输入
adb shell
,进入之后输入su
,这时手机会提示是否同意超级用户权限,同意之后,无报错,即root成功,记住magisk
千万千万千万不要更新,不小心点到了就重新来吧,博主因为magisk
版本原因,重刷了好多次3.xposed安装 经过了之前的努力,我们终于来到了
xposed
面前,到现在才是困难的开始,因为xposed
开发者的原因,xposed
不支持高版本的安卓系统,这也是博主选择7.12系统的原因,但是博主在安装xposed
遇到各种困难的时候,遇见了edxposed
博主又去搞
edxposed+magisk
的方法逆向学习,又遇见了magisk
版本不对的问题,edxposed依赖riru
检测不到的问题/版本问题,而且edxposed
需要8.0及以上,又得刷8.0的版本。博主历经千辛万苦终于安装好了
edxposed
,然而老天又给我开了一个玩笑,fdex2
不支持8.0以上版本。。。。。。。。(博主当时想要不安卓逆向算了吧,会js就行了)博主又一次走向了
xposed
之路,安装xposed
其实很简单,adb install XposedInstaller_3.1.5.apk
安装
xposed
之后我们进入软件,会发现爆红,原因有很多,先解决网络问题,这就可能需要开启科学上网,再次进入,如果还不对,看本博主另外一篇文章,解决http和https
的问题的:https://blog.csdn.net/Ig_thehao/article/details/120554696
除了这个问题和网络问题之外,还有错误,比如权限问题:
can't create '/system/xposed.prod':Read-only file system Error 1 occurred
比如
xposed
重启一直卡开机动画,adb连接不上电脑直接重刷吧,都可以解决,
到这里再把
fdex2
安装下就ok了,将xposed
模块中的fdex2
启用。参考文章:
https://www.jianshu.com/p/a059b69656f4
https://blog.csdn.net/someby/article/details/110388712
三.逆向app 先使用fidller对需要抓取的数据页面抓包
文章图片
发现加密参数
signature
该app使用了腾讯加固保护措施在
fdex2
中也能看见,进入fdex
点击该app后会提示脱壳后的东西保存在哪,这里博主使用了mt管理器进入所说的路径看见了若干.dex
为结尾的文件,全部拿出来。使用jadx打开
dex
文件选择搜索文本,搜索signatrue
,找到加密的函数,将函数自己实现,或者使用jpype
在python中调用也行,来达到逆向参数---->抓取数据的目的【安卓逆向|记录第一次完整安卓逆向过程笔记】全部代码如下:
# 运行jar包
# 引入jpype模块
import time
import requests
from jpype import *
import osfrom jpype._core import startJVM, shutdownJVM
from jpype._jvmfinder import getDefaultJVMPathif __name__ == '__main__':
"""
基本的开发流程如下:
①、使用jpype开启jvm
②、加载java类
③、调用java方法
④、关闭jvm(不是真正意义上的关闭,卸载之前加载的类)
"""
# 加密参数
f = 'f1190aca-d08e-4041-8666-29931cd89dde'
t = str(int(time.time()))
# print(t)
uuid = 'IMEI010000000242147-IMSINNNNNNNN'
m = uuid+'&&'+t+'&&'+f
# ①、使用jpype开启虚拟机(在开启jvm之前要加载类路径)
# 加载刚才打包的jar文件
jarpath = os.path.join(os.path.abspath("."), "自己的jar包路径")#千万别有中文路径,博主死过这
# 获取jvm.dll 的文件路径
jvmPath = getDefaultJVMPath()# 开启jvm:.如果是调用多个jar文件的话,要在jvm启动时指定jar文件路径,jarpath,jarpath2,jarpath3,jarpath4是jar文件路径。# jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s;
%s;
%s;
%s" % (jarpath,jarpath2,jarpath3,jarpath4))
startJVM(jvmPath, "-ea", "-Djava.class.path=%s" % (jarpath))
# ②、加载java类(参数是java的长类名)
# print("-Djava.class.path=%s" % (jarpath))
javaClass = JClass("C2387a")# 类的全名,这里我只有这一个类,且没有引用其他类
# 实例化java对象 传入加密参数
javaInstance = javaClass()
sign = javaInstance.m11218a(m)#m11218a 为类中的方法
print(sign)
# ③、调用java方法,由于我写的是静态方法,直接使用类名就可以调用方法
# javaClass.show()headers={'sys': 'Android',
'sysVersion': '6.0.1',
'appVersion': '8.2',
'appVersionCode': '54',
'udid': 'IMEI010000000242147-IMSINNNNNNNN',
'clientType': 'android',
'timestamp': t,
'signature': str(sign),#需要在jvm结束之前调用
'Host': 'app.suzhou-news.cn',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'User-Agent': 'okhttp/3.9.0'
}
r=requests.get(url,headers=headers,verify=False)
print(r.text)
# ④、关闭jvm:jvm随着python程序的退出而结束
shutdownJVM()
如何使用jpype,参考其他大佬文章:
https://blog.csdn.net/harvestnight/article/details/83987313
java加密代码如下
import java.security.MessageDigest;
public class C2387a {public static String m11218a(String str) {// 加密过程
return '加密结果'
}
}
代码只是参考,并未实际作用
总结 这是一个非常非常简单的笔记,写的有问题大佬请指出,顺便dddd,有问题可以评论交流,如果该文章有解决你的问题,不求关注,好歹giegie给弟弟点个赞,求求了!
推荐阅读
- 20170612时间和注意力开销记录
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 【剽悍读书营成长记录】2018年我收获了什么|【剽悍读书营成长记录】2018年我收获了什么 3357-小松
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 课后分享记录
- 《将来的你,一定会感谢现在战胜烦恼的自己-------第四章/第十一节/用逆向思维解除烦恼》
- 感赏15+投射
- Day5+5组+小鹿#写手账,就是记录你一生的帐
- 不知不觉,他们又长大了一点
- 记录下有意义的事2021-05-14