初始化操作
S参数的计算
10EA095010 为初始化参数,2015876998797为需要进行HASH的字符串。
Unidbg的运行日志如下:
主要的内容如下:
在0xe97c 处计算得出了5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo 字符串
5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo 是由内置的字符串OWA8W1RiZGVVOHxGOzU4R0VGO157OUo4OVpUazV 经过sub_34F40解密得出的

在0x3b48c 处引用了需要进行HASH的值 2015876998797
在0x3b48c 处引用了解密的值5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo
在0x3b48c 处引用了初始化的值10EA095010
计算S参数的结果是a17486b9 在0xec2c 进行字符串生成的

对loc_EC1C进行分析,在0xEC1C下断点

0xe4fff631 存储的就是HASH后的结果

对0xe4fff631 - 0xe4fff638 下读写断点

在0xe780的地址进行了结果的赋值

Q0的值来自[SP,#0x180+var_E8] 地址为0xE4FFF618


对0xE4FFF618 - 0xE4FFF620下读写断点

生成结果的地址在0x8314 就是计算HASH的函数sub_75F0
函数比较长 0x8314 就是 memcpy(v26, s, v83);

然后查找v83的值生成处

V116和v117的值

以上还包含3个MD5个计算函数

计算流程如下:
3 次MD5 2次HASH512 再加一次计算得出结果
public void nativeInit(){
String M = "10EA095010";
String N = "10EA095010";
String O = "10EA095060";
String nativeInit = "nativeInit(Ljava/lang/String;)V";
SLib.callStaticJniMethod(emulator, nativeInit, M);
}
public void nativeInit(){
String M = "10EA095010";
String N = "10EA095010";
String O = "10EA095060";
String nativeInit = "nativeInit(Ljava/lang/String;)V";
SLib.callStaticJniMethod(emulator, nativeInit, M);
}
public void nativeNewCalculateS(){
Object custom = null;
DvmObject context = vm.resolveClass("android/content/ContextWrapper").newObject(custom);
System.out.println(context);
String str = "2015876998797";
int mode = 3;
String nativeNewCalculateS = "nativeNewCalculateS(Landroid/content/Context;Ljava/lang/String;I)Ljava/lang/String;";
Object obj = SLib.callStaticJniMethodObject(emulator, nativeNewCalculateS, context, str, mode);
System.out.println(obj);
}
public void nativeNewCalculateS(){
Object custom = null;
DvmObject context = vm.resolveClass("android/content/ContextWrapper").newObject(custom);
System.out.println(context);
String str = "2015876998797";
int mode = 3;
String nativeNewCalculateS = "nativeNewCalculateS(Landroid/content/Context;Ljava/lang/String;I)Ljava/lang/String;";
Object obj = SLib.callStaticJniMethodObject(emulator, nativeNewCalculateS, context, str, mode);
System.out.println(obj);
}
1. JNIEnv->FindClass(com/sina/weibo/security/SLib) was called from RWX@0x120026d4[libslib.so]0x26d4
2. JNIEnv->RegisterNatives(com/sina/weibo/security/SLib, RWX@0x12050008[libslib.so]0x50008, 8) was called from RWX@0x1200259c[libslib.so]0x259c
3. RegisterNative(com/sina/weibo/security/SLib, nativeInit(Ljava/lang/String;)V, RWX@0x120023b8[libslib.so]0x23b8)
4. RegisterNative(com/sina/weibo/security/SLib, nativeNewCalculateS(Landroid/content/Context;Ljava/lang/String;I)Ljava/lang/String;, RWX@0x1200241c[libslib.so]0x241c)
5. RegisterNative(com/sina/weibo/security/SLib, nativeGetV1TimeCost()J, RWX@0x12002080[libslib.so]0x2080)
6. RegisterNative(com/sina/weibo/security/SLib, nativeGetV2TimeCost()J, RWX@0x12002150[libslib.so]0x2150)
7. RegisterNative(com/sina/weibo/security/SLib, nativeCheck()Z, RWX@0x120022e4[libslib.so]0x22e4)
8. RegisterNative(com/sina/weibo/security/SLib, nativeGetCheckErr()Ljava/lang/String;, RWX@0x12001e08[libslib.so]0x1e08)
9. RegisterNative(com/sina/weibo/security/SLib, nativeGetCheckErrType()I, RWX@0x12001fb8[libslib.so]0x1fb8)
10. RegisterNative(com/sina/weibo/security/SLib, nativeGetPkgTimeCost()J, RWX@0x12002218[libslib.so]0x2218)
11. Find native function Java_com_sina_weibo_security_SLib_nativeInit => RWX@0x120023b8[libslib.so]0x23b8
12. JNIEnv->NewGlobalRef("10EA095010") was called from RWX@0x120023f0[libslib.so]0x23f0
13. android.content.ContextWrapper@50675690
14. Find native function Java_com_sina_weibo_security_SLib_nativeNewCalculateS => RWX@0x1200241c[libslib.so]0x241c
15. JNIEnv->FindClass(android/content/ContextWrapper) was called from RWX@0x120046a0[libslib.so]0x46a0
16. JNIEnv->GetMethodID(android/content/ContextWrapper.getPackageManager()Landroid/content/pm/PackageManager;) => 0x53f2c391 was called from RWX@0x12004440[libslib.so]0x4440
17. JNIEnv->FindClass(android/content/pm/PackageManager) was called from RWX@0x120047f8[libslib.so]0x47f8
18. JNIEnv->CallObjectMethodV(android.content.ContextWrapper@50675690, getPackageManager() => android.content.pm.PackageManager@47d384ee) was called from RWX@0x12004af8[libslib.so]0x4af8
19. JNIEnv->FindClass(android/content/pm/PackageInfo) was called from RWX@0x120049ec[libslib.so]0x49ec
20. JNIEnv->GetMethodID(android/content/pm/PackageManager.getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;) => 0x3bca8377 was called from RWX@0x12004700[libslib.so]0x4700
21. JNIEnv->GetMethodID(android/content/ContextWrapper.getPackageName()Ljava/lang/String;) => 0x8bcc2d71 was called from RWX@0x12004964[libslib.so]0x4964
22. JNIEnv->CallObjectMethodV(android.content.ContextWrapper@50675690, getPackageName() => "com.sina.weibo") was called from RWX@0x12004af8[libslib.so]0x4af8
23. JNIEnv->CallObjectMethodV(android.content.pm.PackageManager@47d384ee, getPackageInfo("com.sina.weibo", 0x40) => android.content.pm.PackageInfo@2acf57e3) was called from RWX@0x12004af8[libslib.so]0x4af8
24. JNIEnv->GetFieldID(android/content/pm/PackageInfo.signatures [Landroid/content/pm/Signature;) => 0x25f17218 was called from RWX@0x12004794[libslib.so]0x4794
25. JNIEnv->GetObjectField(android.content.pm.PackageInfo@2acf57e3, signatures [Landroid/content/pm/Signature; => [android.content.pm.Signature@36f6e879]) was called from RWX@0x12004618[libslib.so]0x4618
26. JNIEnv->FindClass(android/content/pm/Signature) was called from RWX@0x1200473c[libslib.so]0x473c
27. JNIEnv->GetMethodID(android/content/pm/Signature.toByteArray()[B) => 0x6a3e2031 was called from RWX@0x120045ac[libslib.so]0x45ac
28. JNIEnv->GetObjectArrayElement([android.content.pm.Signature@36f6e879], 0) => android.content.pm.Signature@36f6e879 was called from RWX@0x12004844[libslib.so]0x4844
29. JNIEnv->CallObjectMethodV(android.content.pm.Signature@36f6e879, toByteArray() => [B@3551a94) was called from RWX@0x12004af8[libslib.so]0x4af8
30. JNIEnv->GetByteArrayElements(false) => [B@3551a94 was called from RWX@0x12003f74[libslib.so]0x3f74
31. JNIEnv->NewStringUTF("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e97c[libslib.so]0xe97c
32. JNIEnv->NewGlobalRef("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e9a4[libslib.so]0xe9a4
33. JNIEnv->GetStringUtfChars("2015876998797") was called from RWX@0x1203b48c[libslib.so]0x3b48c
34. JNIEnv->ReleaseStringUTFChars("2015876998797") was called from RWX@0x1203b390[libslib.so]0x3b390
35. JNIEnv->GetStringUtfChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b48c[libslib.so]0x3b48c
36. JNIEnv->ReleaseStringUTFChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b390[libslib.so]0x3b390
37. JNIEnv->GetStringUtfChars("10EA095010") was called from RWX@0x1203b48c[libslib.so]0x3b48c
38. JNIEnv->ReleaseStringUTFChars("10EA095010") was called from RWX@0x1203b390[libslib.so]0x3b390
39. JNIEnv->NewStringUTF("a17486b9") was called from RWX@0x1200ec2c[libslib.so]0xec2c
40. "a17486b9"
1. JNIEnv->FindClass(com/sina/weibo/security/SLib) was called from RWX@0x120026d4[libslib.so]0x26d4
2. JNIEnv->RegisterNatives(com/sina/weibo/security/SLib, RWX@0x12050008[libslib.so]0x50008, 8) was called from RWX@0x1200259c[libslib.so]0x259c
3. RegisterNative(com/sina/weibo/security/SLib, nativeInit(Ljava/lang/String;)V, RWX@0x120023b8[libslib.so]0x23b8)
4. RegisterNative(com/sina/weibo/security/SLib, nativeNewCalculateS(Landroid/content/Context;Ljava/lang/String;I)Ljava/lang/String;, RWX@0x1200241c[libslib.so]0x241c)
5. RegisterNative(com/sina/weibo/security/SLib, nativeGetV1TimeCost()J, RWX@0x12002080[libslib.so]0x2080)
6. RegisterNative(com/sina/weibo/security/SLib, nativeGetV2TimeCost()J, RWX@0x12002150[libslib.so]0x2150)
7. RegisterNative(com/sina/weibo/security/SLib, nativeCheck()Z, RWX@0x120022e4[libslib.so]0x22e4)
8. RegisterNative(com/sina/weibo/security/SLib, nativeGetCheckErr()Ljava/lang/String;, RWX@0x12001e08[libslib.so]0x1e08)
9. RegisterNative(com/sina/weibo/security/SLib, nativeGetCheckErrType()I, RWX@0x12001fb8[libslib.so]0x1fb8)
10. RegisterNative(com/sina/weibo/security/SLib, nativeGetPkgTimeCost()J, RWX@0x12002218[libslib.so]0x2218)
11. Find native function Java_com_sina_weibo_security_SLib_nativeInit => RWX@0x120023b8[libslib.so]0x23b8
12. JNIEnv->NewGlobalRef("10EA095010") was called from RWX@0x120023f0[libslib.so]0x23f0
13. android.content.ContextWrapper@50675690
14. Find native function Java_com_sina_weibo_security_SLib_nativeNewCalculateS => RWX@0x1200241c[libslib.so]0x241c
15. JNIEnv->FindClass(android/content/ContextWrapper) was called from RWX@0x120046a0[libslib.so]0x46a0
16. JNIEnv->GetMethodID(android/content/ContextWrapper.getPackageManager()Landroid/content/pm/PackageManager;) => 0x53f2c391 was called from RWX@0x12004440[libslib.so]0x4440
17. JNIEnv->FindClass(android/content/pm/PackageManager) was called from RWX@0x120047f8[libslib.so]0x47f8
18. JNIEnv->CallObjectMethodV(android.content.ContextWrapper@50675690, getPackageManager() => android.content.pm.PackageManager@47d384ee) was called from RWX@0x12004af8[libslib.so]0x4af8
19. JNIEnv->FindClass(android/content/pm/PackageInfo) was called from RWX@0x120049ec[libslib.so]0x49ec
20. JNIEnv->GetMethodID(android/content/pm/PackageManager.getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;) => 0x3bca8377 was called from RWX@0x12004700[libslib.so]0x4700
21. JNIEnv->GetMethodID(android/content/ContextWrapper.getPackageName()Ljava/lang/String;) => 0x8bcc2d71 was called from RWX@0x12004964[libslib.so]0x4964
22. JNIEnv->CallObjectMethodV(android.content.ContextWrapper@50675690, getPackageName() => "com.sina.weibo") was called from RWX@0x12004af8[libslib.so]0x4af8
23. JNIEnv->CallObjectMethodV(android.content.pm.PackageManager@47d384ee, getPackageInfo("com.sina.weibo", 0x40) => android.content.pm.PackageInfo@2acf57e3) was called from RWX@0x12004af8[libslib.so]0x4af8
24. JNIEnv->GetFieldID(android/content/pm/PackageInfo.signatures [Landroid/content/pm/Signature;) => 0x25f17218 was called from RWX@0x12004794[libslib.so]0x4794
25. JNIEnv->GetObjectField(android.content.pm.PackageInfo@2acf57e3, signatures [Landroid/content/pm/Signature; => [android.content.pm.Signature@36f6e879]) was called from RWX@0x12004618[libslib.so]0x4618
26. JNIEnv->FindClass(android/content/pm/Signature) was called from RWX@0x1200473c[libslib.so]0x473c
27. JNIEnv->GetMethodID(android/content/pm/Signature.toByteArray()[B) => 0x6a3e2031 was called from RWX@0x120045ac[libslib.so]0x45ac
28. JNIEnv->GetObjectArrayElement([android.content.pm.Signature@36f6e879], 0) => android.content.pm.Signature@36f6e879 was called from RWX@0x12004844[libslib.so]0x4844
29. JNIEnv->CallObjectMethodV(android.content.pm.Signature@36f6e879, toByteArray() => [B@3551a94) was called from RWX@0x12004af8[libslib.so]0x4af8
30. JNIEnv->GetByteArrayElements(false) => [B@3551a94 was called from RWX@0x12003f74[libslib.so]0x3f74
31. JNIEnv->NewStringUTF("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e97c[libslib.so]0xe97c
32. JNIEnv->NewGlobalRef("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e9a4[libslib.so]0xe9a4
33. JNIEnv->GetStringUtfChars("2015876998797") was called from RWX@0x1203b48c[libslib.so]0x3b48c
34. JNIEnv->ReleaseStringUTFChars("2015876998797") was called from RWX@0x1203b390[libslib.so]0x3b390
35. JNIEnv->GetStringUtfChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b48c[libslib.so]0x3b48c
36. JNIEnv->ReleaseStringUTFChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b390[libslib.so]0x3b390
37. JNIEnv->GetStringUtfChars("10EA095010") was called from RWX@0x1203b48c[libslib.so]0x3b48c
38. JNIEnv->ReleaseStringUTFChars("10EA095010") was called from RWX@0x1203b390[libslib.so]0x3b390
39. JNIEnv->NewStringUTF("a17486b9") was called from RWX@0x1200ec2c[libslib.so]0xec2c
40. "a17486b9"
1. JNIEnv->NewStringUTF("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e97c[libslib.so]0xe97c
2. JNIEnv->NewGlobalRef("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e9a4[libslib.so]0xe9a4
3. JNIEnv->GetStringUtfChars("2015876998797") was called from RWX@0x1203b48c[libslib.so]0x3b48c
4. JNIEnv->ReleaseStringUTFChars("2015876998797") was called from RWX@0x1203b390[libslib.so]0x3b390
5. JNIEnv->GetStringUtfChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b48c[libslib.so]0x3b48c
6. JNIEnv->ReleaseStringUTFChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b390[libslib.so]0x3b390
7. JNIEnv->GetStringUtfChars("10EA095010") was called from RWX@0x1203b48c[libslib.so]0x3b48c
8. JNIEnv->ReleaseStringUTFChars("10EA095010") was called from RWX@0x1203b390[libslib.so]0x3b390
9. JNIEnv->NewStringUTF("a17486b9") was called from RWX@0x1200ec2c[libslib.so]0xec2c
10. "a17486b9"
1. JNIEnv->NewStringUTF("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e97c[libslib.so]0xe97c
2. JNIEnv->NewGlobalRef("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1200e9a4[libslib.so]0xe9a4
3. JNIEnv->GetStringUtfChars("2015876998797") was called from RWX@0x1203b48c[libslib.so]0x3b48c
4. JNIEnv->ReleaseStringUTFChars("2015876998797") was called from RWX@0x1203b390[libslib.so]0x3b390
5. JNIEnv->GetStringUtfChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b48c[libslib.so]0x3b48c
6. JNIEnv->ReleaseStringUTFChars("5l0WXnhiY4pJ794KIJ7Rw5F45VXg9sjo") was called from RWX@0x1203b390[libslib.so]0x3b390
7. JNIEnv->GetStringUtfChars("10EA095010") was called from RWX@0x1203b48c[libslib.so]0x3b48c
8. JNIEnv->ReleaseStringUTFChars("10EA095010") was called from RWX@0x1203b390[libslib.so]0x3b390
9. JNIEnv->NewStringUTF("a17486b9") was called from RWX@0x1200ec2c[libslib.so]0xec2c
10. "a17486b9"
public void write_trace(){
emulator.traceRead(0xe4fff631L, 0xe4fff638L);
emulator.traceWrite(0xe4fff631L, 0xe4fff638L);
}
public void write_trace(){
emulator.traceRead(0xe4fff631L, 0xe4fff638L);
emulator.traceWrite(0xe4fff631L, 0xe4fff638L);
}
LDR X9, [SP,
LDUR Q0, [SP,
MOV W8, WZR
STR X9, [X28,
ADD X9, SP,
STR Q0, [X28] ; 0x396236383437316110
LDR X9, [SP,
LDUR Q0, [SP,
MOV W8, WZR
STR X9, [X28,
ADD X9, SP,
STR Q0, [X28] ; 0x396236383437316110
public void write_trace(){
emulator.traceRead(0xe4fff631L, 0xe4fff638L);
emulator.traceWrite(0xe4fff631L, 0xe4fff638L);
emulator.traceRead(0xe4fff618L, 0xe4fff620L);
emulator.traceWrite(0xe4fff618L, 0xe4fff620L);
}
public void write_trace(){
emulator.traceRead(0xe4fff631L, 0xe4fff638L);
emulator.traceWrite(0xe4fff631L, 0xe4fff638L);
emulator.traceRead(0xe4fff618L, 0xe4fff620L);
emulator.traceWrite(0xe4fff618L, 0xe4fff620L);
}
void __usercall sub_75F0(__int64 a1@<X0>, const char *a2@<X1>, __int64 a3@<X2>, __int64 *a4@<X8>)
{
const char *v5; // x9
const char *v7; // x20
int v8; // w23
const char *v9; // x8
int v10; // w10
int v11; // w12
int v12; // w13
const char *v13; // x22
bool v14; // zf
int v15; // w16
const char *v16; // x0
int v17; // w15
size_t v18; // x0
_QWORD *v19; // x8
_QWORD *v20; // x0
const char *v21; // x1
_QWORD *v22; // x9
_QWORD *v23; // x8
int v24; // w10
int v25; // w16
void *v26; // x21
int v27; // w15
int v28; // w16
const char *v29; // x0
int v30; // w15
size_t v31; // x0
_QWORD *v32; // x8
_QWORD *v33; // x0
const char *v34; // x1
_QWORD *v35; // x9
_QWORD *v36; // x8
int v37; // w10
int v38; // w16
_QWORD *v39; // x20
int v40; // w15
int v41; // w16
const char *v42; // x0
int v43; // w15
size_t v44; // x0
_QWORD *v45; // x8
__int64 *v46; // x0
size_t v47; // x2
int v48; // w16
int v49; // w18
__int64 *v50; // x1
int v51; // w17
int v52; // w12
int v53; // w15
int v54; // w16
__int64 v55; // x0
__int128 v56; // q0
unsigned int v57; // w12
int v58; // w13
int v59; // w8
char *v60; // x0
const char *v61; // x1
int v62; // w10
int v63; // w16
char *v64; // x20
int v65; // w15
int v66; // w16
const char *v67; // x0
int v68; // w15
size_t v69; // x0
char *v70; // x0
const char *v71; // x1
int v72; // w10
int v73; // w16
char *v74; // x20
int v75; // w15
const char *v76; // x0
int v77; // w15
size_t v78; // x0
int v79; // w15
int v80; // w14
int v81; // w16
size_t v82; // x0
size_t v83; // x20
__int64 v84; // x10
unsigned __int64 v85; // x26
int v86; // w27
int v87; // w22
int v88; // w8
unsigned __int64 v89; // x10
int v90; // w8
int v91; // w11
int v92; // w9
__int64 v93; // x8
int v94; // w23
int i; // w9
int v96; // w8
int v97; // w8
int v98; // w8
int v99; // w8
int v100; // w8
int v101; // w8
unsigned __int64 v102; // [xsp+10h] [xbp-2B0h]
char v103; // [xsp+20h] [xbp-2A0h]
int v104; // [xsp+24h] [xbp-29Ch]
__int64 v105[2]; // [xsp+78h] [xbp-248h] BYREF
void *v106; // [xsp+88h] [xbp-238h]
__int128 v107; // [xsp+90h] [xbp-230h] BYREF
void *v108; // [xsp+A0h] [xbp-220h]
void *src[3]; // [xsp+B0h] [xbp-210h] BYREF
void *v110[3]; // [xsp+C8h] [xbp-1F8h] BYREF
size_t v111[2]; // [xsp+E0h] [xbp-1E0h] BYREF
void *v112; // [xsp+F0h] [xbp-1D0h]
unsigned __int64 v113; // [xsp+F8h] [xbp-1C8h]
unsigned int v114; // [xsp+100h] [xbp-1C0h]
char s[12]; // [xsp+104h] [xbp-1BCh] BYREF
_BYTE v116[132]; // [xsp+110h] [xbp-1B0h] BYREF
_BYTE v117[132]; // [xsp+194h] [xbp-12Ch] BYREF
__int64 v118; // [xsp+218h] [xbp-A8h] BYREF
__int64 v119; // [xsp+220h] [xbp-A0h]
__int64 v120[9]; // [xsp+228h] [xbp-98h] BYREF
v120[8] = *(_QWORD *)(_ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2)) + 40);
v5 = *(const char **)(a1 + 16);
v7 = a2;
v8 = -474758095;
v9 = (const char *)(a1 + 1);
if ( ((*(_BYTE *)a1 ^ 0xFE) & *(_BYTE *)a1) != 0 )
v10 = 1056576168;
else
v10 = 529704559;
v11 = -474758095;
do
{
while ( 1 )
{
v12 = v11;
v13 = a2;
v11 = 1499283521;
while ( v12 <= 529704558 )
{
v14 = v12 == -474758095;
v12 = v10;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v12 != 529704559 )
break;
a2 = (const char *)(a1 + 1);
}
a2 = *(const char **)(a1 + 16);
}
while ( v12 == 1056576168 );
v15 = -474758095;
do
{
while ( 1 )
{
v16 = a2;
v17 = v15;
while ( v17 <= 529704558 )
{
v14 = v17 == -474758095;
v17 = v10;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v17 != 529704559 )
break;
a2 = v9;
v15 = 1499283521;
}
a2 = v5;
v15 = 1499283521;
}
while ( v17 == 1056576168 );
v18 = strlen(v16);
sub_32C14(v19, v13, v18, &v118); // MD5
v20 = sub_8620(v111, &v118, 16LL);
v118 = 0LL;
v119 = 0LL;
v22 = *(_QWORD **)(a3 + 16);
v23 = (_QWORD *)(a3 + 1);
if ( (~*(_BYTE *)a3 | 0xFFFFFFFE) == 0xFFFFFFFF )
v24 = 529704559;
else
v24 = 1056576168;
v25 = -474758095;
do
{
while ( 1 )
{
v26 = v20;
v27 = v25;
while ( v27 <= 529704558 )
{
v14 = v27 == -474758095;
v27 = v24;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v27 != 529704559 )
break;
v20 = v23;
v25 = 1499283521;
}
v20 = v22;
v25 = 1499283521;
}
while ( v27 == 1056576168 );
v28 = -474758095;
do
{
while ( 1 )
{
v29 = v21;
v30 = v28;
while ( v30 <= 529704558 )
{
v14 = v30 == -474758095;
v30 = v24;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v30 != 529704559 )
break;
v21 = (const char *)v23;
v28 = 1499283521;
}
v21 = (const char *)v22;
v28 = 1499283521;
}
while ( v30 == 1056576168 );
v31 = strlen(v29);
sub_32C14(v32, v26, v31, &v118); // MD5
v33 = sub_8620(v110, &v118, 16LL);
v118 = 0LL;
v119 = 0LL;
v35 = (_QWORD *)*((_QWORD *)v7 + 2);
v36 = v7 + 1;
if ( ((*v7 ^ 0xFE) & *v7) != 0 )
v37 = 1056576168;
else
v37 = 529704559;
v38 = -474758095;
do
{
while ( 1 )
{
v39 = v33;
v40 = v38;
while ( v40 <= 529704558 )
{
v14 = v40 == -474758095;
v40 = v37;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v40 != 529704559 )
break;
v33 = v36;
v38 = 1499283521;
}
v33 = v35;
v38 = 1499283521;
}
while ( v40 == 1056576168 );
v41 = -474758095;
do
{
while ( 1 )
{
v42 = v34;
v43 = v41;
while ( v43 <= 529704558 )
{
v14 = v43 == -474758095;
v43 = v37;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v43 != 529704559 )
break;
v34 = (const char *)v36;
v41 = 1499283521;
}
v34 = (const char *)v35;
v41 = 1499283521;
}
while ( v43 == 1056576168 );
v44 = strlen(v42);
sub_32C14(v45, v39, v44, &v118); // MD5
sub_8620(src, &v118, 16LL);
v46 = sub_6F20(v120, src);
if ( (~LOBYTE(v111[0]) | 0xFFFFFFFE) == 0xFFFFFFFF )
v48 = 529704559;
else
v48 = 1056576168;
v49 = -474758095;
do
{
while ( 1 )
{
v50 = v46;
v51 = v49;
while ( v51 <= 529704558 )
{
v14 = v51 == -474758095;
v51 = v48;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v51 != 529704559 )
break;
v46 = (__int64 *)((char *)v111 + 1);
v49 = 1499283521;
}
v46 = (__int64 *)v112;
v49 = 1499283521;
}
while ( v51 == 1056576168 );
if ( (v111[0] & 1) != 0 )
v52 = 1552367478;
else
v52 = 132625284;
v53 = -1135239934;
do
{
while ( 1 )
{
v54 = v53;
if ( v53 <= 132625283 )
break;
if ( v53 == 132625284 )
{
v53 = -1840677486;
v47 = (unsigned __int64)LOBYTE(v111[0]) >> 1;
}
else
{
v53 = -1840677486;
v47 = v111[1];
}
}
v53 = v52;
}
while ( v54 == -1135239934 );
if ( v54 != -1840677486 )
{
while ( 1 )
;
}
v55 = sub_9538((int)v120, v50, v47);
v108 = *(void **)(v55 + 16);
v56 = *(_OWORD *)v55;
v57 = 0;
v113 = v55;
v107 = v56;
while ( 1 )
{
v114 = v57;
v58 = v57 >= 3 ? -1129254591 : 1805009445;
if ( v58 == -1129254591 )
break;
*(_QWORD *)(v113 + 8LL * v114) = 0LL;
v57 = v114 + 1;
}
if ( ((LOBYTE(v120[0]) ^ 0xFE) & v120[0]) != 0 )
v59 = 1202870824;
else
v59 = -946146110;
while ( v59 == 1202870824 )
{
operator delete((void *)v120[2]);
v59 = -946146110;
}
v60 = (char *)memset(v117, 0, 0x81uLL);
if ( (~(_BYTE)v107 | 0xFFFFFFFE) == 0xFFFFFFFF )
v62 = 529704559;
else
v62 = 1056576168;
v63 = -474758095;
do
{
while ( 1 )
{
v64 = v60;
v65 = v63;
while ( v65 <= 529704558 )
{
v14 = v65 == -474758095;
v65 = v62;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v65 != 529704559 )
break;
v60 = (char *)&v107 + 1;
v63 = 1499283521;
}
v60 = (char *)v108;
v63 = 1499283521;
}
while ( v65 == 1056576168 );
v66 = -474758095;
do
{
while ( 1 )
{
v67 = v61;
v68 = v66;
while ( v68 <= 529704558 )
{
v14 = v68 == -474758095;
v68 = v62;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v68 != 529704559 )
break;
v61 = (char *)&v107 + 1;
v66 = 1499283521;
}
v61 = (const char *)v108;
v66 = 1499283521;
}
while ( v68 == 1056576168 );
v69 = strlen(v67);
sub_DA48(v64, v69, v120, 0LL); // SHA512
sub_A460(v120, v117, 64LL); // HEX2STR
sub_6F20(v105, v110);
v70 = (char *)memset(v116, 0, 0x81uLL);
if ( (~LOBYTE(v105[0]) | 0xFFFFFFFE) == 0xFFFFFFFF )
v72 = 529704559;
else
v72 = 1056576168;
v73 = -474758095;
do
{
while ( 1 )
{
v74 = v70;
v75 = v73;
while ( v75 <= 529704558 )
{
v14 = v75 == -474758095;
v75 = v72;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v75 != 529704559 )
break;
v70 = (char *)v105 + 1;
v73 = 1499283521;
}
v70 = (char *)v106;
v73 = 1499283521;
}
while ( v75 == 1056576168 );
do
{
while ( 1 )
{
v76 = v71;
v77 = v8;
while ( v77 <= 529704558 )
{
v14 = v77 == -474758095;
v77 = v72;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v77 != 529704559 )
break;
v71 = (char *)v105 + 1;
v8 = 1499283521;
}
v71 = (const char *)v106;
v8 = 1499283521;
}
while ( v77 == 1056576168 );
v104 = -1466222360;
v78 = strlen(v76);
sub_DA48(v74, v78, v120, 0LL); // SHA512
sub_A460(v120, v116, 64LL); // HEX2STR
s[8] = 0;
*(_QWORD *)s = 0LL;
v79 = 0;
v80 = 0;
while ( 1 )
{
v81 = v79 >= 8 ? 1072340417 : 1158358064;
if ( v81 == 1072340417 )
break;
v80 = v116[15 * v79 + v80] & 0xF;
s[v79] = v117[v80 - -15 * v79];
++v79;
}
a4[1] = 0LL;
a4[2] = 0LL;
*a4 = 0LL;
v82 = strlen(s); // s 最终结果 a17486b9
v83 = v82;
v103 = 2 * v82;
v113 = -17LL;
v84 = 0x75D037FEF5196874LL;
v85 = ((v82 + 16) & 0xFFFFFFFFFFFFFFF0LL) - 1;
if ( v82 >= 0x17 )
v86 = -1265047312;
else
v86 = 532294316;
if ( v82 >= 0x17 )
v87 = -1136773100;
else
v87 = 542793441;
v88 = 1557339140;
while ( 1 )
{
while ( 1 )
{
while ( v88 > 532294315 )
{
if ( v88 == 532294316 )
{
v26 = (char *)a4 + 1;
*(_BYTE *)a4 = v103;
v88 = 289241049;
}
else
{
if ( v88 != 1557339140 )
abort();
if ( v113 >= v83 )
v88 = 485505648;
else
v88 = 1132855204;
}
}
if ( v88 != -1265047312 )
break;
v91 = 1244402348;
do
{
do
{
v92 = v91;
v93 = v84;
v84 = v85;
v91 = 542793441;
}
while ( v92 == -1136773100 );
v84 = 22LL;
v91 = v87;
}
while ( v92 == 1244402348 );
v120[0] = -1LL;
v89 = v93 + 1;
v90 = -1981771486;
while ( v90 == -1981771486 )
{
if ( v120[0] >= v89 )
v90 = 1316265428;
else
v90 = 1353982062;
}
if ( v90 != 1316265428 )
abort();
v102 = v89;
v26 = (void *)operator new(v89);
a4[2] = (__int64)v26;
*a4 = v102 & 1 | v102 ^ 1;
a4[1] = v83;
v88 = 289241049;
}
if ( v88 == 289241049 )
break;
v14 = v88 == 485505648;
v88 = v86;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v83 )
v94 = 1317118332;
else
v94 = -1355603513;
for ( i = -2002632165; ; i = -1355603513 )
{
do
{
v96 = i;
v14 = i == -2002632165;
i = v94;
}
while ( v14 );
if ( v96 != 1317118332 )
break;
memcpy(v26, s, v83); // v26 s 最终结果 a17486b9
}
if ( v96 != -1355603513 )
{
while ( 1 )
;
}
*((_BYTE *)v26 + v83) = 0;
if ( ((LOBYTE(v105[0]) ^ 0xFE) & v105[0]) != 0 )
v97 = 1202870824;
else
v97 = -946146110;
while ( v97 == 1202870824 )
{
operator delete(v106);
v97 = -946146110;
}
if ( (~(_BYTE)v107 | 0xFFFFFFFE) == 0xFFFFFFFF )
v98 = -946146110;
else
v98 = 1202870824;
while ( v98 == 1202870824 )
{
operator delete(v108);
v98 = -946146110;
}
if ( ((LOBYTE(src[0]) ^ 0xFE) & (__int64)src[0]) != 0 )
v99 = 1202870824;
else
v99 = -946146110;
while ( v99 == 1202870824 )
{
operator delete(src[2]);
v99 = -946146110;
}
if ( (~LOBYTE(v110[0]) | 0xFFFFFFFE) == 0xFFFFFFFF )
v100 = -946146110;
else
v100 = 1202870824;
while ( v100 == 1202870824 )
{
operator delete(v110[2]);
v100 = -946146110;
}
while ( 1 )
{
while ( v104 == -1466222360 )
{
if ( (~LOBYTE(v111[0]) | 0xFFFFFFFE) == 0xFFFFFFFF )
v101 = -946146110;
else
v101 = 1202870824;
v104 = v101;
}
if ( v104 != 1202870824 )
break;
operator delete(v112);
v104 = -946146110;
}
_ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2));
}
void __usercall sub_75F0(__int64 a1@<X0>, const char *a2@<X1>, __int64 a3@<X2>, __int64 *a4@<X8>)
{
const char *v5; // x9
const char *v7; // x20
int v8; // w23
const char *v9; // x8
int v10; // w10
int v11; // w12
int v12; // w13
const char *v13; // x22
bool v14; // zf
int v15; // w16
const char *v16; // x0
int v17; // w15
size_t v18; // x0
_QWORD *v19; // x8
_QWORD *v20; // x0
const char *v21; // x1
_QWORD *v22; // x9
_QWORD *v23; // x8
int v24; // w10
int v25; // w16
void *v26; // x21
int v27; // w15
int v28; // w16
const char *v29; // x0
int v30; // w15
size_t v31; // x0
_QWORD *v32; // x8
_QWORD *v33; // x0
const char *v34; // x1
_QWORD *v35; // x9
_QWORD *v36; // x8
int v37; // w10
int v38; // w16
_QWORD *v39; // x20
int v40; // w15
int v41; // w16
const char *v42; // x0
int v43; // w15
size_t v44; // x0
_QWORD *v45; // x8
__int64 *v46; // x0
size_t v47; // x2
int v48; // w16
int v49; // w18
__int64 *v50; // x1
int v51; // w17
int v52; // w12
int v53; // w15
int v54; // w16
__int64 v55; // x0
__int128 v56; // q0
unsigned int v57; // w12
int v58; // w13
int v59; // w8
char *v60; // x0
const char *v61; // x1
int v62; // w10
int v63; // w16
char *v64; // x20
int v65; // w15
int v66; // w16
const char *v67; // x0
int v68; // w15
size_t v69; // x0
char *v70; // x0
const char *v71; // x1
int v72; // w10
int v73; // w16
char *v74; // x20
int v75; // w15
const char *v76; // x0
int v77; // w15
size_t v78; // x0
int v79; // w15
int v80; // w14
int v81; // w16
size_t v82; // x0
size_t v83; // x20
__int64 v84; // x10
unsigned __int64 v85; // x26
int v86; // w27
int v87; // w22
int v88; // w8
unsigned __int64 v89; // x10
int v90; // w8
int v91; // w11
int v92; // w9
__int64 v93; // x8
int v94; // w23
int i; // w9
int v96; // w8
int v97; // w8
int v98; // w8
int v99; // w8
int v100; // w8
int v101; // w8
unsigned __int64 v102; // [xsp+10h] [xbp-2B0h]
char v103; // [xsp+20h] [xbp-2A0h]
int v104; // [xsp+24h] [xbp-29Ch]
__int64 v105[2]; // [xsp+78h] [xbp-248h] BYREF
void *v106; // [xsp+88h] [xbp-238h]
__int128 v107; // [xsp+90h] [xbp-230h] BYREF
void *v108; // [xsp+A0h] [xbp-220h]
void *src[3]; // [xsp+B0h] [xbp-210h] BYREF
void *v110[3]; // [xsp+C8h] [xbp-1F8h] BYREF
size_t v111[2]; // [xsp+E0h] [xbp-1E0h] BYREF
void *v112; // [xsp+F0h] [xbp-1D0h]
unsigned __int64 v113; // [xsp+F8h] [xbp-1C8h]
unsigned int v114; // [xsp+100h] [xbp-1C0h]
char s[12]; // [xsp+104h] [xbp-1BCh] BYREF
_BYTE v116[132]; // [xsp+110h] [xbp-1B0h] BYREF
_BYTE v117[132]; // [xsp+194h] [xbp-12Ch] BYREF
__int64 v118; // [xsp+218h] [xbp-A8h] BYREF
__int64 v119; // [xsp+220h] [xbp-A0h]
__int64 v120[9]; // [xsp+228h] [xbp-98h] BYREF
v120[8] = *(_QWORD *)(_ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2)) + 40);
v5 = *(const char **)(a1 + 16);
v7 = a2;
v8 = -474758095;
v9 = (const char *)(a1 + 1);
if ( ((*(_BYTE *)a1 ^ 0xFE) & *(_BYTE *)a1) != 0 )
v10 = 1056576168;
else
v10 = 529704559;
v11 = -474758095;
do
{
while ( 1 )
{
v12 = v11;
v13 = a2;
v11 = 1499283521;
while ( v12 <= 529704558 )
{
v14 = v12 == -474758095;
v12 = v10;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v12 != 529704559 )
break;
a2 = (const char *)(a1 + 1);
}
a2 = *(const char **)(a1 + 16);
}
while ( v12 == 1056576168 );
v15 = -474758095;
do
{
while ( 1 )
{
v16 = a2;
v17 = v15;
while ( v17 <= 529704558 )
{
v14 = v17 == -474758095;
v17 = v10;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v17 != 529704559 )
break;
a2 = v9;
v15 = 1499283521;
}
a2 = v5;
v15 = 1499283521;
}
while ( v17 == 1056576168 );
v18 = strlen(v16);
sub_32C14(v19, v13, v18, &v118); // MD5
v20 = sub_8620(v111, &v118, 16LL);
v118 = 0LL;
v119 = 0LL;
v22 = *(_QWORD **)(a3 + 16);
v23 = (_QWORD *)(a3 + 1);
if ( (~*(_BYTE *)a3 | 0xFFFFFFFE) == 0xFFFFFFFF )
v24 = 529704559;
else
v24 = 1056576168;
v25 = -474758095;
do
{
while ( 1 )
{
v26 = v20;
v27 = v25;
while ( v27 <= 529704558 )
{
v14 = v27 == -474758095;
v27 = v24;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v27 != 529704559 )
break;
v20 = v23;
v25 = 1499283521;
}
v20 = v22;
v25 = 1499283521;
}
while ( v27 == 1056576168 );
v28 = -474758095;
do
{
while ( 1 )
{
v29 = v21;
v30 = v28;
while ( v30 <= 529704558 )
{
v14 = v30 == -474758095;
v30 = v24;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v30 != 529704559 )
break;
v21 = (const char *)v23;
v28 = 1499283521;
}
v21 = (const char *)v22;
v28 = 1499283521;
}
while ( v30 == 1056576168 );
v31 = strlen(v29);
sub_32C14(v32, v26, v31, &v118); // MD5
v33 = sub_8620(v110, &v118, 16LL);
v118 = 0LL;
v119 = 0LL;
v35 = (_QWORD *)*((_QWORD *)v7 + 2);
v36 = v7 + 1;
if ( ((*v7 ^ 0xFE) & *v7) != 0 )
v37 = 1056576168;
else
v37 = 529704559;
v38 = -474758095;
do
{
while ( 1 )
{
v39 = v33;
v40 = v38;
while ( v40 <= 529704558 )
{
v14 = v40 == -474758095;
v40 = v37;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v40 != 529704559 )
break;
v33 = v36;
v38 = 1499283521;
}
v33 = v35;
v38 = 1499283521;
}
while ( v40 == 1056576168 );
v41 = -474758095;
do
{
while ( 1 )
{
v42 = v34;
v43 = v41;
while ( v43 <= 529704558 )
{
v14 = v43 == -474758095;
v43 = v37;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v43 != 529704559 )
break;
v34 = (const char *)v36;
v41 = 1499283521;
}
v34 = (const char *)v35;
v41 = 1499283521;
}
while ( v43 == 1056576168 );
v44 = strlen(v42);
sub_32C14(v45, v39, v44, &v118); // MD5
sub_8620(src, &v118, 16LL);
v46 = sub_6F20(v120, src);
if ( (~LOBYTE(v111[0]) | 0xFFFFFFFE) == 0xFFFFFFFF )
v48 = 529704559;
else
v48 = 1056576168;
v49 = -474758095;
do
{
while ( 1 )
{
v50 = v46;
v51 = v49;
while ( v51 <= 529704558 )
{
v14 = v51 == -474758095;
v51 = v48;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v51 != 529704559 )
break;
v46 = (__int64 *)((char *)v111 + 1);
v49 = 1499283521;
}
v46 = (__int64 *)v112;
v49 = 1499283521;
}
while ( v51 == 1056576168 );
if ( (v111[0] & 1) != 0 )
v52 = 1552367478;
else
v52 = 132625284;
v53 = -1135239934;
do
{
while ( 1 )
{
v54 = v53;
if ( v53 <= 132625283 )
break;
if ( v53 == 132625284 )
{
v53 = -1840677486;
v47 = (unsigned __int64)LOBYTE(v111[0]) >> 1;
}
else
{
v53 = -1840677486;
v47 = v111[1];
}
}
v53 = v52;
}
while ( v54 == -1135239934 );
if ( v54 != -1840677486 )
{
while ( 1 )
;
}
v55 = sub_9538((int)v120, v50, v47);
v108 = *(void **)(v55 + 16);
v56 = *(_OWORD *)v55;
v57 = 0;
v113 = v55;
v107 = v56;
while ( 1 )
{
v114 = v57;
v58 = v57 >= 3 ? -1129254591 : 1805009445;
if ( v58 == -1129254591 )
break;
*(_QWORD *)(v113 + 8LL * v114) = 0LL;
v57 = v114 + 1;
}
if ( ((LOBYTE(v120[0]) ^ 0xFE) & v120[0]) != 0 )
v59 = 1202870824;
else
v59 = -946146110;
while ( v59 == 1202870824 )
{
operator delete((void *)v120[2]);
v59 = -946146110;
}
v60 = (char *)memset(v117, 0, 0x81uLL);
if ( (~(_BYTE)v107 | 0xFFFFFFFE) == 0xFFFFFFFF )
v62 = 529704559;
else
v62 = 1056576168;
v63 = -474758095;
do
{
while ( 1 )
{
v64 = v60;
v65 = v63;
while ( v65 <= 529704558 )
{
v14 = v65 == -474758095;
v65 = v62;
if ( !v14 )
{
while ( 1 )
;
}
}
if ( v65 != 529704559 )
break;
v60 = (char *)&v107 + 1;