先抓包

改后綴zip直接解壓后發現,lib檔案夾里有騰訊樂加固的特征,并通過jadx打開classes.dex可發現只有殼代碼基本確定該apk被樂加固加固了

使用Fdex2進行脫殼
現在xposed中選中模塊,然后在該界面點進Fdex2選擇引力波,然后回到主界面點開引力波后即脫殼成功到圖片上述的目錄地址


如果發現沒有包被脫出,可能是應該檔案夾的訪問權限問題,在這里設定成超級用戶的訪問權限就能看到脫出的資料

把脫出的dex發到電腦上繼續分析

然后通過jadx逐個打開去查看,然后發現這個檔案就非常可疑,代碼進行過混淆,說明這部分的代碼非常重要

再加上上面從xml檔案中分析得出的源程式入口類MyApplication也能在這份檔案里面搜索到,基本上確認了是這份源檔案了

然后去請求引數signature嘗試進行搜搜,出來的結果很多,需要進行判斷

這行的內容比較可疑,需要的包的其他請求引數都有涉及在內

整行代碼是
aa a3 = a2.e().b("sys", "Android").b("sysVersion", Build.VERSION.RELEASE).b("appVersion", MyApplication.getInstance().getAppVersion()).b("appVersionCode", String.valueOf(MyApplication.getInstance().getAppVersionCode())).b("udid", udid).b("clientType", "android").b("timestamp", valueOf).b("signature", a(udid, valueOf)).a();
通過jadx的反混淆工具進行進一步的分析

通過推測mo295b方法的作用就是將傳入的引數2的值賦給引數1


于是乎signature的值就是m12059a(udid, valueOf)的回傳值

udid, valueOf的值在上面有被定義,而m12059a也可以在下面找到

于是繼續右鍵跟進m11218a方法,這里應該就是signature的實作地方了

后面則需要python呼叫java去執行這些java代碼,看分析是否正確,由于JPype在window系統上的兼容性不好,所以在ubuntu虛擬機上配置,配置出現一些錯誤,在在線java執行網址進行除錯https://c.runoob.com/compile/10

# 最終代碼
import java.security.MessageDigest;
public class HelloWorld {
public static void main(String []args) {
String valueOf1 = String.valueOf(System.currentTimeMillis() / 1000);
String valueOf2 = String.format("%s&&%s&&%s", new Object[]{"IMEI910000000048867-IMSINNNNNNNN", valueOf1, "f1190aca-d08e-4041-8666-29931cd89dde"});
System.out.println(valueOf2);
StringBuffer stringBuffer = new StringBuffer();
try {
MessageDigest instance = MessageDigest.getInstance("MD5");
instance.update(valueOf2.getBytes());
for (byte b : instance.digest()) {
stringBuffer.append(Integer.toString((b >>> 4) & 15, 16)).append(Integer.toString(b & 15, 16));
}
} catch (Exception e) {
}
System.out.println("----------------------------------------");
System.out.println(stringBuffer.toString());
}
}
怎么通過JPype執行
在ubuntu新建空白檔案,將上述代碼復制進去,并以類名命名,以java為檔案后綴

在當前目錄下通過javac將java檔案編譯成class檔案

將class檔案打包成jar包

在pycharm中對jar包進行呼叫
import jpype
from jpype import JClass
# 獲得java的執行路徑
jvmPath = jpype.getDefaultJVMPath()
print(jvmPath,"-jvmPath")
jarpath = "/home/sam/Documents/java_code/test/"
# 啟動虛擬機,并引入jar包
jpype.startJVM(jvmPath,"-ea","-Djava.class.path=%s"%(jarpath+"Myway.jar"))
# 通過JClass介面生成類
JDClass = JClass("Myway")
# 對類進行實體化
jd = JDClass()
# 對類方法進行呼叫
encry_sig = jd.tt([])
jpype.java.lang.System.out.println(encry_sig)
# 關閉虛擬機
jpype.shutdownJVM()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/257485.html
標籤:其他
下一篇:C++ 常用知識點
