RVNReceiptValidation великолепен и использует CommonCrypto, а не устаревший в настоящее время Apple, openssl. вам придется приложить действительную квитанцию к вашему проекту, чтобы отладить его. Сделайте это, получив действительный чек из другого пакета приложений, и создайте фазу сборки в своей тестовой среде, чтобы добавить ее в свой пакет. Я предлагаю следующие методы для запутывания:
Зашифруйте kRVNBundleID и kRVNBundleVersion и расшифруйте их при сравнении с CFBundleIdentifier и CFBundleShortVersionString.
Я создаю массив указателей на функции со случайными значениями и заменяю их действительными указателями на функции в RVNReceiptValuation во время выполнения, прежде чем выполнять их с помощью кода, подобного следующему:
static void testFunction(void);
typedef void (*functionPtr)(void);
functionPtr obfuscationArray[8] = {
(functionPtr)0xA243F6A8,
(functionPtr)0x885308D3,
(functionPtr)0x13198A2E,
(functionPtr)0x03707344,
(functionPtr)0xA4093822,
(functionPtr)0x299F31D0,
(functionPtr)0x082EFA98,
(functionPtr)0xEC4E6C89};
int main(int argc, const char * argv[]) {
functionPtr myFuncPtr;
obfuscationArray[3] = &testFunction;
myFuncPtr = obfuscationArray[3];
(myFuncPtr)();
return 0;
}
static void testFunction(void){
printf("function executed\n");
}