先抓包
改後綴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()