安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳

先抓包

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第1张图片

改后缀zip直接解压后发现,lib文件夹里有腾讯乐加固的特征。并通过jadx打开classes.dex可发现只有壳代码基本确定该apk被乐加固加固了

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第2张图片

使用Fdex2进行脱壳
现在xposed中选中模块,然后在该界面点进Fdex2选择引力波,然后回到主界面点开引力波后即脱壳成功到图片上述的目录地址

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第3张图片

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第4张图片

如果发现没有包被脱出,可能是应该文件夹的访问权限问题,在这里设置成超级用户的访问权限就能看到脱出的数据安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第5张图片

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第6张图片

把脱出的dex发到电脑上继续分析

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第7张图片

然后通过jadx逐个打开去查看,然后发现这个文件就非常可疑,代码进行过混淆,说明这部分的代码非常重要

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第8张图片

再加上上面从xml文件中分析得出的源程序入口类MyApplication也能在这份文件里面搜索到,基本上确认了是这份源文件了

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第9张图片

然后去请求参数signature尝试进行搜搜,出来的结果很多,需要进行判断

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第10张图片

这行的内容比较可疑,需要的包的其他请求参数都有涉及在内

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第11张图片

整行代码是
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的反混淆工具进行进一步的分析

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第12张图片

通过推测mo295b方法的作用就是将传入的参数2的值赋给参数1

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第13张图片
安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第14张图片

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

在这里插入图片描述

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

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第15张图片

于是继续右键跟进m11218a方法。这里应该就是signature的实现地方了

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第16张图片

后面则需要python调用java去执行这些java代码,看分析是否正确。由于JPype在window系统上的兼容性不好,所以在ubuntu虚拟机上配置。配置出现一些错误。在在线java执行网址进行调试https://c.runoob.com/compile/10

安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳_第17张图片

# 最终代码
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());
        
    }

}

你可能感兴趣的:(安卓逆向-iCitySuzhou的请求参数signature | Fdex2脱壳)