// // RobloxJailbreakDetector.mm // RobloxMobile // // Created by Martin Robaszewski on 7/16/13. // Copyright (c) 2013 ROBLOX. All rights reserved. // #import #import #import "RobloxJailbreakDetector.h" #include "stdio.h" // base64 taken from the internets // http://stackoverflow.com/questions/342409/how-do-i-base64-encode-decode-in-c // static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; BOOL isbase64(char c) { return c && strchr(table, c) != NULL; } inline char value(char c) { const char *p = strchr(table, c); if(p) { return p-table; } else { return 0; } } int UnBase64(unsigned char *dest, const unsigned char *src, int srclen) { *dest = 0; if(*src == 0) { return 0; } unsigned char *p = dest; do { char a = value(src[0]); char b = value(src[1]); char c = value(src[2]); char d = value(src[3]); *p++ = (a << 2) | (b >> 4); *p++ = (b << 4) | (c >> 2); *p++ = (c << 6) | d; if(!isbase64(src[1])) { p -= 2; break; } else if(!isbase64(src[2])) { p -= 2; break; } else if(!isbase64(src[3])) { p--; break; } src += 4; while(*src && (*src == 13 || *src == 10)) src++; } while(srclen-= 4); *p = 0; return p-dest; } // // // #define JB_FEATURE_BITFLIP 1 #define JB_FEATURE_BASE64 1 void jbDecodeString(const unsigned char * input, unsigned char * output) { // 1. get len by reading thru aray until 0x00 is found int len = 0; while (input[len] != 0) { len++; } // temp buffer unsigned char * temp = (unsigned char *)malloc((len+1) * sizeof(unsigned char)); memset(temp, 0, len+1); memset(output, 0, len+1); // 2. loop thru array for (int a=0; a