抖音x-gorgon04版(X-Gorgon)的获取方法及演示,本文未展示相关代码。
下载完apk之后,使用AK进行反编译,可能需要升级apktools到2.3.4,
然后在 androidkillbinapktoolapktool 下执行语句, 清除framework
java -jar ./ShakaApktool.jar empty-framework-dir
在工程搜索中全局搜索 x-gorgon,并打开查看
localHashMap.put("X-Gorgon", com.ss.a.b.a.c(com.ss.sys.ces.a.leviathan(i, com.ss.a.b.a.b(paramString.toString()))));
可以看到 xg 是经过这些个方法生成的
params:
package com.ss.a.b; public final class a public static byte[] b(String paramString) { int j = paramString.length(); byte[] arrayOfByte = new byte[j / 2]; int i = 0; while (i < j) { arrayOfByte[(i / 2)] = ((byte)((Character.digit(paramString.charAt(i), 16) << 4) + Character.digit(paramString.charAt(i + 1), 16))); i += 2; } return arrayOfByte; } public static String c(byte[] paramArrayOfByte) { if (paramArrayOfByte == null) { return null; } char[] arrayOfChar1 = "0123456789abcdef".toCharArray(); char[] arrayOfChar2 = new char[paramArrayOfByte.length * 2]; int i = 0; while (i < paramArrayOfByte.length) { int j = paramArrayOfByte[i] & 0xFF; int k = i * 2; arrayOfChar2[k] = arrayOfChar1[(j >>> 4)]; arrayOfChar2[(k + 1)] = arrayOfChar1[(j & 0xF)]; i += 1; } return new String(arrayOfChar2); }
com.ss.sys.ces.a:
leviathan 本地化方法,不是用Java代码实现的,它们来源于本地库的实现,在动态链接库so文件中。
没有深追的必要了,可以通过编写 hook 脚本通过 xpostd 调用该方法。
把上面图中的方法,写入到文件。
通过xp来调用 leviathan 方法。
import de.robv.android.xposed.callbacks.XC_LoadPackage; public byte[] hk_leviathan(int i,int time, byte[] s){ return (byte[]) XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.ss.sys.ces.a", lpparam classLoader), "" + "" + "", i, time, s); }
然后写一个NanoHTTPD 服务,来返回生成出来的参数。
其他的参数也是相同的做法。
stub: 把url的参数转成bytes,然后gzip压缩,然后转成md5。
xpostd 和相关工具下载地址 : https://blog.csdn.net/weixin_43582101/article/details/105264021
(我用的模拟器,手机使用需要root或者下载 virtuaXposed )
adb forward tcp:18989 tcp:18989
把PC上所有18989端口通信数据将被重定向到手机端18989端口server上。