Skip to content

Create main.yml#1

Open
202392 wants to merge 1 commit intomainfrom
202392-patch-1
Open

Create main.yml#1
202392 wants to merge 1 commit intomainfrom
202392-patch-1

Conversation

@202392
Copy link
Owner

@202392 202392 commented Jan 19, 2024

@202392
Copy link
Owner Author

202392 commented Jan 21, 2024

@202392
Copy link
Owner Author

202392 commented Jan 21, 2024

#define MCBYPASS_CODE_LENGTH 31 // Excluding terminating null.
#define MCBYPASS_CODE_BUFFER_LENGTH 32 // Including terminating null.
#define MCBYPASS_RAW_BYTES_LENGTH 16
#define MCBYPASS_HASH_LENGTH CC_SHA256_DIGEST_LENGTH

  • (NSString*) _createNewActivationLockBypassCodeOutHash:(NSString**)outHash
    {
    #define RANDOM_BYTES_LENGTH 16
    #define SALT_LENGTH 4
    // Encode raw bytes.
    static const char kSymbols[] = "0123456789ACDEFGHJKLMNPQRTUVWXYZ";
    // 00000000000000001111111111111111
    // 0123456789abcdef0123456789abcdef

    // Insert dashes after outputting characters at these positions.
    static const int kDashPositions[] = { 5, 10, 14, 18, 22 };

    char rawBytes[MCBYPASS_RAW_BYTES_LENGTH];
    char code[MCBYPASS_CODE_BUFFER_LENGTH];
    uint8_t hash[MCBYPASS_HASH_LENGTH];
    uint8_t salt[SALT_LENGTH] = {0, 0, 0, 0};

    arc4random_buf(rawBytes, RANDOM_BYTES_LENGTH);
    CCKeyDerivationPBKDF(kCCPBKDF2, rawBytes, RANDOM_BYTES_LENGTH, salt, SALT_LENGTH,
    kCCPRFHmacAlgSHA256, 50000, hash, CC_SHA256_DIGEST_LENGTH);

    if (outHash) {
    int len = MCBYPASS_HASH_LENGTH;
    NSMutableString* str = [NSMutableString stringWithCapacity:MCBYPASS_HASH_LENGTH * 2 + 1];
    const uint8_t* p = (const uint8_t*)hash;
    while (len-- > 0) [str appendFormat:@"%02X", *p++];
    *outHash = [NSString stringWithString:str];
    }

    int outputCharacterCount = 0;
    const int* nextDashPosition = kDashPositions;
    char* outputCursor = code;
    uint8_t* inputCursor = (uint8_t*)rawBytes;

    // Generate output one symbol at a time.
    #define INPUT_BITS 128
    #define BITS_PER_BYTE 8
    #define BITS_PER_SYMBOL 5

    int bitsProcessed = 0;
    int bitOffsetIntoByte = 0;
    while (bitsProcessed <= (INPUT_BITS - BITS_PER_SYMBOL)) {
    int bitsThisByte = (bitOffsetIntoByte < BITS_PER_BYTE - BITS_PER_SYMBOL
    ? BITS_PER_SYMBOL : BITS_PER_BYTE - bitOffsetIntoByte);
    int bitsNextByte = (bitsThisByte < BITS_PER_SYMBOL ? BITS_PER_SYMBOL
    - bitsThisByte : 0);

      uint8_t value = (((*inputCursor << bitOffsetIntoByte) & 0xff) 
      >> (BITS_PER_BYTE - bitsThisByte));
    
    
      bitOffsetIntoByte += BITS_PER_SYMBOL;
      if (bitOffsetIntoByte >= BITS_PER_BYTE) {
          bitOffsetIntoByte -= BITS_PER_BYTE;
          inputCursor++;
      }
    
    
      if (bitsNextByte) {
          value <<= bitsNextByte;
          value |= (*inputCursor >> (BITS_PER_BYTE - bitsNextByte));
      }
    
    
     *outputCursor++ = kSymbols[value];
      if (++outputCharacterCount == *nextDashPosition) {
          ++nextDashPosition;
          *outputCursor++ = '-';
      }
    
    
      bitsProcessed += BITS_PER_SYMBOL;
    

    }

    // Process remaining bits.
    int bitsRemaining = INPUT_BITS - bitsProcessed;
    if (bitsRemaining) {
    uint8_t value = (((*inputCursor << bitOffsetIntoByte) & 0xff)
    >> (BITS_PER_BYTE - bitsRemaining));
    *outputCursor++ = kSymbols[value];
    }
    *outputCursor = '\0';
    return [NSString stringWithUTF8String:code];
    } // -_createNewActivationLockBypassCodeOutHash:

#define MCBYPASS_CODE_LENGTH 31 // Excluding terminating null.
#define MCBYPASS_CODE_BUFFER_LENGTH 32 // Including terminating null.
#define MCBYPASS_RAW_BYTES_LENGTH 16
#define MCBYPASS_HASH_LENGTH CC_SHA256_DIGEST_LENGTH

  • (NSString*) _createNewActivationLockBypassCodeOutHash:(NSString**)outHash
    {
    #define RANDOM_BYTES_LENGTH 16
    #define SALT_LENGTH 4
    // Encode raw bytes.
    static const char kSymbols[] = "0123456789ACDEFGHJKLMNPQRTUVWXYZ";
    // 00000000000000001111111111111111
    // 0123456789abcdef0123456789abcdef

    // Insert dashes after outputting characters at these positions.
    static const int kDashPositions[] = { 5, 10, 14, 18, 22 };

    char rawBytes[MCBYPASS_RAW_BYTES_LENGTH];
    char code[MCBYPASS_CODE_BUFFER_LENGTH];
    uint8_t hash[MCBYPASS_HASH_LENGTH];
    uint8_t salt[SALT_LENGTH] = {0, 0, 0, 0};

    arc4random_buf(rawBytes, RANDOM_BYTES_LENGTH);
    CCKeyDerivationPBKDF(kCCPBKDF2, rawBytes, RANDOM_BYTES_LENGTH, salt, SALT_LENGTH,
    kCCPRFHmacAlgSHA256, 50000, hash, CC_SHA256_DIGEST_LENGTH);

    if (outHash) {
    int len = MCBYPASS_HASH_LENGTH;
    NSMutableString* str = [NSMutableString stringWithCapacity:MCBYPASS_HASH_LENGTH * 2 + 1];
    const uint8_t* p = (const uint8_t*)hash;
    while (len-- > 0) [str appendFormat:@"%02X", *p++];
    *outHash = [NSString stringWithString:str];
    }

    int outputCharacterCount = 0;
    const int* nextDashPosition = kDashPositions;
    char* outputCursor = code;
    uint8_t* inputCursor = (uint8_t*)rawBytes;

    // Generate output one symbol at a time.
    #define INPUT_BITS 128
    #define BITS_PER_BYTE 8
    #define BITS_PER_SYMBOL 5

    int bitsProcessed = 0;
    int bitOffsetIntoByte = 0;
    while (bitsProcessed <= (INPUT_BITS - BITS_PER_SYMBOL)) {
    int bitsThisByte = (bitOffsetIntoByte < BITS_PER_BYTE - BITS_PER_SYMBOL
    ? BITS_PER_SYMBOL : BITS_PER_BYTE - bitOffsetIntoByte);
    int bitsNextByte = (bitsThisByte < BITS_PER_SYMBOL ? BITS_PER_SYMBOL
    - bitsThisByte : 0);

      uint8_t value = (((*inputCursor << bitOffsetIntoByte) & 0xff) 
      >> (BITS_PER_BYTE - bitsThisByte));
    
    
      bitOffsetIntoByte += BITS_PER_SYMBOL;
      if (bitOffsetIntoByte >= BITS_PER_BYTE) {
          bitOffsetIntoByte -= BITS_PER_BYTE;
          inputCursor++;
      }
    
    
      if (bitsNextByte) {
          value <<= bitsNextByte;
          value |= (*inputCursor >> (BITS_PER_BYTE - bitsNextByte));
      }
    
    
     *outputCursor++ = kSymbols[value];
      if (++outputCharacterCount == *nextDashPosition) {
          ++nextDashPosition;
          *outputCursor++ = '-';
      }
    
    
      bitsProcessed += BITS_PER_SYMBOL;
    

    }

    // Process remaining bits.
    int bitsRemaining = INPUT_BITS - bitsProcessed;
    if (bitsRemaining) {
    uint8_t value = (((*inputCursor << bitOffsetIntoByte) & 0xff)
    >> (BITS_PER_BYTE - bitsRemaining));
    *outputCursor++ = kSymbols[value];
    }
    *outputCursor = '\0';
    return [NSString stringWithUTF8String:code];
    } // -_createNewActivationLockBypassCodeOutHash:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant