Skip to content

Commit 31ef372

Browse files
author
王俊杰
committed
update
1 parent 0a9e52a commit 31ef372

File tree

12 files changed

+395
-77
lines changed

12 files changed

+395
-77
lines changed

src/main/java/com/baidu/disk/algorithm/Sign.java

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33

44
import lombok.SneakyThrows;
55

6+
import javax.crypto.Mac;
7+
import javax.crypto.spec.SecretKeySpec;
68
import java.nio.charset.StandardCharsets;
9+
import java.security.InvalidKeyException;
710
import java.security.MessageDigest;
11+
import java.security.NoSuchAlgorithmException;
812
import java.util.Base64;
913

1014
/**
@@ -26,6 +30,23 @@ public static String getBdstoken(String bduss) {
2630
return shaHex(md5(bduss.getBytes(StandardCharsets.UTF_8)));
2731
}
2832

33+
public static byte[] hmacSHA1Encrypt(byte[] arg3, byte[] arg4) throws NoSuchAlgorithmException, InvalidKeyException {
34+
byte[] res;
35+
Mac mac;
36+
if (arg3 != null && arg4 != null) {
37+
try {
38+
mac = Mac.getInstance("HmacSHA1");
39+
} catch (NoSuchAlgorithmException v0) {
40+
mac = Mac.getInstance("HMAC-SHA-1");
41+
}
42+
mac.init(new SecretKeySpec(arg3, "RAW"));
43+
res = mac.doFinal(arg4);
44+
} else {
45+
res = null;
46+
}
47+
return res;
48+
}
49+
2950
@SneakyThrows
3051
public static byte[] md5(byte[] bduss) {
3152
MessageDigest digest;
@@ -61,8 +82,9 @@ public static String shaHex(byte[] digest) {
6182

6283
/**
6384
* RC4
85+
*
6486
* @param content content
65-
* @param key key
87+
* @param key key
6688
* @return encrypt code
6789
*/
6890
@SuppressWarnings("unused")
@@ -105,12 +127,31 @@ public static byte[] encrypt(byte[] content, String key) {
105127
return iOutput;
106128
}
107129

130+
public static String customEncode(byte[] bArr, String str, boolean z) {
131+
if (bArr == null) {
132+
return "";
133+
}
134+
StringBuilder sb = new StringBuilder();
135+
for (byte b : bArr) {
136+
String hexString = Integer.toHexString(b & 255);
137+
if (z) {
138+
hexString = hexString.toUpperCase();
139+
}
140+
if (hexString.length() == 1) {
141+
sb.append("0");
142+
}
143+
sb.append(hexString).append(str);
144+
}
145+
return sb.toString();
146+
}
147+
108148
public static String encode(byte[] val) {
109149
return Base64.getEncoder().encodeToString(val);
110150
}
111151

112152
/**
113153
* Base64 decode
154+
*
114155
* @param val val
115156
* @return decode val
116157
*/

src/main/java/com/baidu/disk/algorithm/SoSign.java

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.github.unidbg.linux.android.AndroidResolver;
77
import com.github.unidbg.linux.android.dvm.*;
88
import com.github.unidbg.memory.Memory;
9+
import lombok.extern.slf4j.Slf4j;
910
import org.springframework.stereotype.Component;
1011

1112
import javax.annotation.PreDestroy;
@@ -21,6 +22,7 @@
2122
* @author JackJun
2223
* @date 2020/11/14 11:08 下午
2324
*/
25+
@Slf4j
2426
@Component
2527
public class SoSign extends AbstractJni {
2628

@@ -41,11 +43,15 @@ public SoSign(BaiduYunProperties baiduYunProperties) {
4143
vm.setJni(this);
4244
vm.setVerbose(false);
4345
//加载so,使用armv8-64速度会快很多
44-
DalvikModule dm = vm.loadLibrary(new File(baiduYunProperties.getSoPath()), false);
46+
DalvikModule urlDm = vm.loadLibrary(new File(baiduYunProperties.getUrlSo()), false);
47+
DalvikModule keyMakerDm = vm.loadLibrary(new File(baiduYunProperties.getKeySo()), false);
4548
//调用jni
46-
dm.callJNI_OnLoad(emulator);
49+
urlDm.callJNI_OnLoad(emulator);
50+
keyMakerDm.callJNI_OnLoad(emulator);
51+
4752
//Jni调用的类,加载so
48-
dvmClass = vm.resolveClass("com/baidu/netdisk/security/URLHandler");
53+
urlHandler = vm.resolveClass("com/baidu/netdisk/security/URLHandler");
54+
keyMaker = vm.resolveClass("com/baidu/netdisk/kernel/encode/KeyMaker");
4955
}
5056

5157
//ARM模拟器
@@ -54,19 +60,38 @@ public SoSign(BaiduYunProperties baiduYunProperties) {
5460
//vm
5561
private final VM vm;
5662

57-
private final DvmClass dvmClass;
63+
private final DvmClass urlHandler;
64+
65+
private final DvmClass keyMaker;
5866

5967
private String sk;
6068

69+
//B8ec24caf34ef7227c66767d29ffd3fb
70+
private String generate = "B8ec24caf34ef7227c66767d29ffd3fb";
71+
72+
public String generate() {
73+
if (generate == null) {
74+
long time = System.currentTimeMillis();
75+
StringObject resObj = keyMaker.callStaticJniMethodObject(emulator, "converToSha1Key(J;I;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
76+
time,
77+
12306,
78+
vm.addLocalObject(new StringObject(vm, "FF214M12NDS90SFAG")),
79+
vm.addLocalObject(new StringObject(vm, "LKM3636U098T")));
80+
generate = resObj.getValue();
81+
log.info("EncryptFactor, Param: {}, 12306, FF214M12NDS90SFAG, LKM3636U098T, Result: {}", time, generate);
82+
}
83+
return generate;
84+
}
85+
6186
public String handlerUrl(String url, String sk) {
6287
return handlerUrl(url, sk, baiduYunProperties.getBduss(), baiduYunProperties.getUid());
6388
}
6489

6590
public String handlerUrl(String url, String sk, String bduss, String uid) {
91+
this.sk = sk;
6692
//获取encodeByte地址
6793
DvmObject<?> context = vm.resolveClass("android/content/Context").newObject(null);
68-
this.sk = sk;
69-
StringObject fullUrl = dvmClass.callStaticJniMethodObject(emulator, "handlerURL(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
94+
StringObject fullUrl = urlHandler.callStaticJniMethodObject(emulator, "handlerURL(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
7095
vm.addLocalObject(context),
7196
vm.addLocalObject(new StringObject(vm, url)),
7297
vm.addLocalObject(new StringObject(vm, bduss)),
@@ -82,7 +107,11 @@ public DvmObject<?> callStaticObjectMethodV(BaseVM vm, DvmClass dvmObject, Strin
82107
case "com/baidu/netdisk/security/URLHandler->getDeviceID()Ljava/lang/String;":
83108
return new StringObject(vm, baiduYunProperties.getDevUid());
84109
case "android/content/Context->getPackageName()Ljava/lang/String;": {
85-
return new StringObject(vm, "com.baidu.netdisk");
110+
String packageName = vm.getPackageName();
111+
if (packageName != null) {
112+
return new StringObject(vm, packageName);
113+
}
114+
break;
86115
}
87116
}
88117

src/main/java/com/baidu/disk/config/BaiduYunProperties.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.baidu.disk.config;
22

3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
35
import lombok.Data;
6+
import lombok.NoArgsConstructor;
47
import org.springframework.boot.context.properties.ConfigurationProperties;
58
import org.springframework.stereotype.Component;
69

@@ -11,13 +14,16 @@
1114
@Data
1215
@Component
1316
@ConfigurationProperties("baidu")
17+
@Builder
18+
@AllArgsConstructor
19+
@NoArgsConstructor
1420
public class BaiduYunProperties {
1521
private String uid;
1622
private String bduss;
1723
private String stoken;
18-
private String bdstoken;
19-
private String soPath;
24+
private String urlSo;
2025
private String apkPath;
2126
private String devUid;
2227
private String cuid;
28+
private String keySo;
2329
}

0 commit comments

Comments
 (0)