安卓逆向-iCitySuzhou的請求參數signature | Fdex2脫殼

先抓包

在這裏插入圖片描述

改後綴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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章