安卓逆向-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的反混淆工具进行进一步的分析

在这里插入图片描述

扫描二维码关注公众号,回复: 13120794 查看本文章
通过推测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()

猜你喜欢

转载自blog.csdn.net/m0_50685012/article/details/113690261
今日推荐