先抓包
改后缀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()