Objective-C Encryption

Objective-C Encryption

Objective-C still ships inside mature iOS and macOS codebases, often mixed with Swift in bridging headers. It is the older Cocoa dialect: dynamic messaging, verbose names, and decades of App Store binaries built with it. Maintenance teams touch it daily even if new UI is Swift.

Legacy apps often hard-code licence servers, API paths, or obfuscation passwords right in @"..." literals. StringEncrypt generates Objective-C that decrypts those values when needed, which beats handing them to anyone who runs strings on the Mach-O.

String encryption supports both UNICODE and ANSI strings.

Official resources:

Objective-C Encryption (UNICODE Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Objective-C]
// myString = "StringEncrypt sample"
unsigned short myString[21] = { 0x72AF, 0x682F, 0x222F, 0x15AF, 0xFC2E, 0xD6AE, 0xA5AE, 0x932E,
                                0x62AE, 0x6F2E, 0x33AE, 0x322E, 0xFF2D, 0xB62D, 0xBEAD, 0x91AD,
                                0x8FAD, 0x562D, 0x3D2D, 0x03AD, 0xB9AC };

for (unsigned int GiAoX = 0, ErbgD = 0; GiAoX < 21; GiAoX++)
{
	ErbgD = myString[GiAoX];
	for (unsigned int edauS = 0; edauS < 2; edauS++)
	{
		ErbgD = ((ErbgD & 0xFFFF) + 1) & 0xFFFF;
	}
	ErbgD = (((ErbgD & 0xFFFF) >> 13) | ((ErbgD & 0xFFFF) << 3)) & 0xFFFF;
	ErbgD = ((ErbgD & 0xFFFF) - 0x198A) & 0xFFFF;
	ErbgD = ((ErbgD & 0xFFFF) + GiAoX) & 0xFFFF;
	ErbgD = (((ErbgD & 0xFFFF) >> 10) | ((ErbgD & 0xFFFF) << 6)) & 0xFFFF;
	ErbgD = (ErbgD ^ GiAoX) & 0xFFFF;
	ErbgD = ((ErbgD & 0xFFFF) + GiAoX) & 0xFFFF;
	for (unsigned int KYHZV = 0; KYHZV < 4; KYHZV++)
	{
		for (unsigned int LTXzr = 0; LTXzr < 4; LTXzr++)
		{
			for (unsigned int mBOxg = 0; mBOxg < 2; mBOxg++)
			{
				ErbgD = (((ErbgD & 0xFFFF) >> 8) | ((ErbgD & 0xFFFF) << 8)) & 0xFFFF;
			}
		}
	}
	for (unsigned int jxYRu = 0; jxYRu < 4; jxYRu++)
	{
		for (unsigned int oJkEV = 0; oJkEV < 3; oJkEV++)
		{
			ErbgD = ((ErbgD & 0xFFFF) - 1) & 0xFFFF;
			ErbgD = (ErbgD ^ GiAoX) & 0xFFFF;
		}
	}
	myString[GiAoX] = ErbgD;
}

Objective-C Encryption (ANSI Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Objective-C]
// myString = "StringEncrypt sample"
unsigned char myString[21] = { 0xFD, 0x5E, 0x7B, 0x19, 0x16, 0xB2, 0x3D, 0x31,
                               0x18, 0x96, 0x9F, 0x81, 0x4D, 0xB0, 0xA7, 0x77,
                               0x52, 0x77, 0xAD, 0x23, 0x5D };

for (unsigned int CvGFs = 0, eRKHt = 0; CvGFs < 21; CvGFs++)
{
	eRKHt = myString[CvGFs];
	for (unsigned int jgWJK = 0; jgWJK < 2; jgWJK++)
	{
		for (unsigned int EZmHS = 0; EZmHS < 3; EZmHS++)
		{
			eRKHt = (((eRKHt & 0xFF) >> (CvGFs % 8)) | ((eRKHt & 0xFF) << (8 - (CvGFs % 8)))) & 0xFF;
			eRKHt = (((eRKHt & 0xFF) >> 1) | ((eRKHt & 0xFF) << 7)) & 0xFF;
		}
	}
	for (unsigned int HMlYS = 0; HMlYS < 3; HMlYS++)
	{
		for (unsigned int DbIdl = 0; DbIdl < 2; DbIdl++)
		{
			for (unsigned int wKbuR = 0; wKbuR < 2; wKbuR++)
			{
				eRKHt = ((eRKHt & 0xFF) + 1) & 0xFF;
				eRKHt = (((eRKHt & 0xFF) >> (CvGFs % 8)) | ((eRKHt & 0xFF) << (8 - (CvGFs % 8)))) & 0xFF;
			}
		}
		eRKHt = ((eRKHt & 0xFF) - 0x73) & 0xFF;
	}
	eRKHt = (((eRKHt & 0xFF) << 1) | ((eRKHt & 0xFF) >> 7)) & 0xFF;
	for (unsigned int DgOwY = 0; DgOwY < 3; DgOwY++)
	{
		eRKHt = ((eRKHt & 0xFF) - CvGFs) & 0xFF;
		eRKHt = (eRKHt ^ 0x63) & 0xFF;
		for (unsigned int FbucM = 0; FbucM < 2; FbucM++)
		{
			for (unsigned int nJCIw = 0; nJCIw < 2; nJCIw++)
			{
				eRKHt = (((eRKHt & 0xFF) >> 4) | ((eRKHt & 0xFF) << 4)) & 0xFF;
			}
			for (unsigned int PKwSE = 0; PKwSE < 3; PKwSE++)
			{
				eRKHt = (((~(eRKHt & 0xFF)) & 0xFF) + 1) & 0xFF;
				eRKHt = (((eRKHt & 0xFF) >> 4) | ((eRKHt & 0xFF) << 4)) & 0xFF;
				eRKHt = ((eRKHt & 0xFF) + CvGFs) & 0xFF;
			}
			for (unsigned int ARgeE = 0; ARgeE < 2; ARgeE++)
			{
				eRKHt = (((~(eRKHt & 0xFF)) & 0xFF) + 1) & 0xFF;
				eRKHt = ((eRKHt & 0xFF) - 0xB4) & 0xFF;
				eRKHt = (((eRKHt & 0xFF) << 4) | ((eRKHt & 0xFF) >> 4)) & 0xFF;
			}
		}
	}
	eRKHt = (((eRKHt & 0xFF) >> (CvGFs % 8)) | ((eRKHt & 0xFF) << (8 - (CvGFs % 8)))) & 0xFF;
	for (unsigned int bmXNY = 0; bmXNY < 4; bmXNY++)
	{
		eRKHt = (eRKHt ^ 0x41) & 0xFF;
		eRKHt = ((eRKHt & 0xFF) + CvGFs) & 0xFF;
		eRKHt = ((eRKHt & 0xFF) - 1) & 0xFF;
	}
	eRKHt = (eRKHt ^ 0xFF) & 0xFF;
	eRKHt = ((eRKHt & 0xFF) - CvGFs) & 0xFF;
	for (unsigned int iqZsw = 0; iqZsw < 2; iqZsw++)
	{
		eRKHt = (eRKHt ^ ((eRKHt & 0xFF) >> 5)) & 0xFF;
		for (unsigned int aNBQt = 0; aNBQt < 3; aNBQt++)
		{
			eRKHt = (((eRKHt & 0xFF) << (CvGFs % 8)) | ((eRKHt & 0xFF) >> (8 - (CvGFs % 8)))) & 0xFF;
			for (unsigned int qjKGe = 0; qjKGe < 2; qjKGe++)
			{
				eRKHt = ((eRKHt & 0xFF) - 0x21) & 0xFF;
				eRKHt = (eRKHt ^ 0xFF) & 0xFF;
			}
			eRKHt = (eRKHt ^ (((eRKHt & 0xFF) << 6) & 0xFF)) & 0xFF;
		}
	}
	for (unsigned int mroTH = 0; mroTH < 3; mroTH++)
	{
		eRKHt = (eRKHt ^ CvGFs) & 0xFF;
	}
	myString[CvGFs] = eRKHt;
}