6
6
import com .github .unidbg .linux .android .AndroidResolver ;
7
7
import com .github .unidbg .linux .android .dvm .*;
8
8
import com .github .unidbg .memory .Memory ;
9
+ import lombok .extern .slf4j .Slf4j ;
9
10
import org .springframework .stereotype .Component ;
10
11
11
12
import javax .annotation .PreDestroy ;
21
22
* @author JackJun
22
23
* @date 2020/11/14 11:08 下午
23
24
*/
25
+ @ Slf4j
24
26
@ Component
25
27
public class SoSign extends AbstractJni {
26
28
@@ -41,11 +43,15 @@ public SoSign(BaiduYunProperties baiduYunProperties) {
41
43
vm .setJni (this );
42
44
vm .setVerbose (false );
43
45
//加载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 );
45
48
//调用jni
46
- dm .callJNI_OnLoad (emulator );
49
+ urlDm .callJNI_OnLoad (emulator );
50
+ keyMakerDm .callJNI_OnLoad (emulator );
51
+
47
52
//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" );
49
55
}
50
56
51
57
//ARM模拟器
@@ -54,19 +60,38 @@ public SoSign(BaiduYunProperties baiduYunProperties) {
54
60
//vm
55
61
private final VM vm ;
56
62
57
- private final DvmClass dvmClass ;
63
+ private final DvmClass urlHandler ;
64
+
65
+ private final DvmClass keyMaker ;
58
66
59
67
private String sk ;
60
68
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
+
61
86
public String handlerUrl (String url , String sk ) {
62
87
return handlerUrl (url , sk , baiduYunProperties .getBduss (), baiduYunProperties .getUid ());
63
88
}
64
89
65
90
public String handlerUrl (String url , String sk , String bduss , String uid ) {
91
+ this .sk = sk ;
66
92
//获取encodeByte地址
67
93
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;" ,
70
95
vm .addLocalObject (context ),
71
96
vm .addLocalObject (new StringObject (vm , url )),
72
97
vm .addLocalObject (new StringObject (vm , bduss )),
@@ -82,7 +107,11 @@ public DvmObject<?> callStaticObjectMethodV(BaseVM vm, DvmClass dvmObject, Strin
82
107
case "com/baidu/netdisk/security/URLHandler->getDeviceID()Ljava/lang/String;" :
83
108
return new StringObject (vm , baiduYunProperties .getDevUid ());
84
109
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 ;
86
115
}
87
116
}
88
117
0 commit comments