左晓为主开发手持机充值管理机
zuoxiao
7 天以前 1e2d09f0009c16ac36f199e1723bbe31dc335657
generallibrary/src/main/cpp/general-native-lib.cpp
@@ -96,19 +96,19 @@
        return nullptr;
    }
    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypting sector %d", sector);
    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Encrypted data: %02X %02X %02X %02X %02X %02X",
                       encrypted_data[0], encrypted_data[1], encrypted_data[2],
                       encrypted_data[3], encrypted_data[4], encrypted_data[5]);
    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Using XOR key: %02X %02X %02X %02X %02X %02X",
                       XOR_KEYS[sector][0], XOR_KEYS[sector][1], XOR_KEYS[sector][2],
                       XOR_KEYS[sector][3], XOR_KEYS[sector][4], XOR_KEYS[sector][5]);
//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypting sector %d", sector);
//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Encrypted data: %02X %02X %02X %02X %02X %02X",
//                       encrypted_data[0], encrypted_data[1], encrypted_data[2],
//                       encrypted_data[3], encrypted_data[4], encrypted_data[5]);
//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Using XOR key: %02X %02X %02X %02X %02X %02X",
//                       XOR_KEYS[sector][0], XOR_KEYS[sector][1], XOR_KEYS[sector][2],
//                       XOR_KEYS[sector][3], XOR_KEYS[sector][4], XOR_KEYS[sector][5]);
    unsigned char decrypted[6];
    for (int i = 0; i < 6; i++) {
        decrypted[i] = encrypted_data[i] ^ XOR_KEYS[sector][i];
        __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Byte %d: %02X ^ %02X = %02X",
                          i, encrypted_data[i], XOR_KEYS[sector][i], decrypted[i]);
//        __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Byte %d: %02X ^ %02X = %02X",
//                          i, encrypted_data[i], XOR_KEYS[sector][i], decrypted[i]);
    }
    std::string result;
@@ -119,7 +119,7 @@
        result += hex;
    }
    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypted result: %s", result.c_str());
//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypted result: %s", result.c_str());
    return env->NewStringUTF(result.c_str());
}
@@ -187,7 +187,7 @@
    jobject packageInfoObject = env->CallObjectMethod(packageManagerObject, getPackageInfoId,
                                                    packNameString, 64);
    if (!packageInfoObject) {
        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageInfo");
//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageInfo");
        return env->NewStringUTF("");
    }
@@ -195,7 +195,7 @@
    jfieldID signaturefieldID = env->GetFieldID(packageInfoClass, "signatures",
                                              "[Landroid/content/pm/Signature;");
    if (!signaturefieldID) {
        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature field ID");
//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature field ID");
        return env->NewStringUTF("");
    }
@@ -203,28 +203,28 @@
    jobjectArray signatureArray = (jobjectArray) env->GetObjectField(packageInfoObject,
                                                                   signaturefieldID);
    if (!signatureArray || env->GetArrayLength(signatureArray) == 0) {
        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "No signatures found");
//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "No signatures found");
        return env->NewStringUTF("");
    }
    // 获取第一个签名对象
    jobject signatureObject = env->GetObjectArrayElement(signatureArray, 0);
    if (!signatureObject) {
        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature object");
//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature object");
        return env->NewStringUTF("");
    }
    // 获取签名字符串
    jstring signatureString = (jstring) env->CallObjectMethod(signatureObject, signToStringId);
    if (!signatureString) {
        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature string");
//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature string");
        return env->NewStringUTF("");
    }
    // 获取签名字符串的UTF-8字符
    const char *signStrng = env->GetStringUTFChars(signatureString, 0);
    if (!signStrng) {
        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature UTF chars");
//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature UTF chars");
        return env->NewStringUTF("");
    }
@@ -240,11 +240,11 @@
        // 解密并转换每个扇区密钥
        for (size_t i = 0; i < numKeys; i++) {
           __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "处理扇区 %zu 的密钥", i);
//           __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "处理扇区 %zu 的密钥", i);
            
            // 确保不会越界访问
            if (i * 12 + 6 > sizeof(ENCRYPTED_SECTOR_KEYS)) {
                __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Index out of bounds");
//                __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Index out of bounds");
                break;
            }
            
@@ -252,7 +252,7 @@
            jstring decrypted_str = decrypt_key(env, ENCRYPTED_SECTOR_KEYS + (i * 12), 6);
            
            if (!decrypted_str) {
               __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to decrypt key for sector %zu", i);
//               __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to decrypt key for sector %zu", i);
                continue;
            }