文章目錄
- 前言
- 一、安卓逆向的準備
- 二、刷機+配置+安裝app
- 1.安卓系統版本
- 2.手機root+面具安裝
- 3.xposed安裝
- 三.逆向app
- 總結
前言
作為新時代爬蟲er,逆向技能是必不可少的,在博主精心學習了幾個月js逆向之后,又把矛頭指向了安卓逆向,同為逆向,雖然相同點很多,都是不同點也不少,這里記錄一下博主初學安卓逆向步入的幾個大坑,和完整逆向的程序,希望能夠幫助到安卓逆向新人,望周知!!
一、安卓逆向的準備
工欲善其事,必先利其器,這里給大家推薦一下我在本文中使用過的工具(都在網盤鏈接里,都給你們安排好了):
adb: 操作手機的命令,百度非常多教程,這里我不說了jadx:jadx打開文中.dex的工具,神器apktool: 觀察app內容的利器,當然通過改名zip解壓也行,但是還是缺少內容,本文用來觀測到該app是加固過的fdex2: 脫殼工具,利器xposed: 好東西,不解釋magisk: 俗稱面具,好東西twrp: 一種大佬開發的東西,不了解,但是要用
鏈接:https://pan.baidu.com/s/1iQGNsC8pRvBqOici_fjWeg
提取碼: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 os
from jpype._core import startJVM, shutdownJVM
from jpype._jvmfinder import getDefaultJVMPath
if __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給弟弟點個贊,求求了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/306106.html
標籤:其他
上一篇:Android studio第一次作業:實作Wechat界面
下一篇:哈羅出行自動化測驗搶單測驗程式
