ver validacion sunat sacar recibo recibidas online obligatoria facturas factura electronicos electronicas electronica consultar comprobantes como claro cocoa macos validation app-store

cocoa - sunat - validacion de comprobantes electronicos



¿Código de validación de recibo de la tienda de aplicaciones Mac? (12)

Al crear el recibo de muestra de Apple Docs, asegúrese de no incluir caracteres adicionales después de ''end'', de lo contrario el uudecode fallará.

¿Se pregunta si alguien tiene un tutorial o código de trabajo para la validación de recibos del nuevo Mac App Store? Las únicas referencias que he podido encontrar hasta ahora son la documentación estelar de Apple sobre el tema y un proyecto de código abierto que compila pero no tiene muchos comentarios en línea, por lo que es difícil de entender a menos que sea un genio de la criptografía.

Documentos de Apple para desarrolladores registrados solo:

https://developer.apple.com/devcenter/mac/documents/validating.html

ValidateStoreReceipt de Roddi (parece prometedor, pero escasamente documentado):

https://github.com/roddi/ValidateStoreReceipt

¿También se pregunta por qué Apple no solo proporciona código de trabajo para la validación?

¿Alguna otra buena referencia por ahí?


Asegúrese de verificar que está validando un recibo de su aplicación. Fácil de hacer toda la criptografía y verificación de firmas para el recibo equivocado.

Vea http://pastebin.com/1eWf9LCg donde parece que Angry Birds perdió este bit y lo dejó abierto para que las personas lo sustituyan en un recibo de una aplicación gratuita.

Alan Quatermain también tiene código para hacer esto en github. https://github.com/AlanQuatermain/mac-app-store-validation-sample

No debe usarse tal cual para evitar la eliminación automática.


Desarrollaré la respuesta de Priller. Si Apple proporcionó una muestra de código para el proceso de validación, entonces sería muy fácil para un Malo tomar su aplicación compilada y escanearla a través del código correspondiente al proceso de validación. El tipo malo sabría exactamente cómo se ve el código compilado si usa una muestra de código estándar de Apple. Una vez que el chico malo ha encontrado esa sección del código, es bastante trivial modificar el código compilado de la aplicación para omitir la etapa de verificación de recibo, haciendo que todo el asunto sea inútil.

Dicho todo esto, un cracker determinado probablemente va a evitar cualquier protección de copia que coloque en su lugar sin importar lo que haga. La industria de los videojuegos (por ejemplo) invierte mucho tiempo tratando de proteger su software, y las versiones rajadas parecen estar siempre disponibles.


Es difícil proporcionar una solución genérica para la validación de recibos de la Tienda Mac App, principalmente porque es una pieza muy sensible de código que debe ser difícil de evitar (consulte la https://developer.apple.com/devcenter/mac/documents/validating.html ).

Estos proyectos de GitHub son puntos de partida muy buenos para conocer qué pasos deben realizarse en la validación de recibos:

Una vez que haya entendido lo que debe hacerse, aquí hay algunos consejos:

  • No use clases o métodos de Objective-C. Objective-C tiene una gran cantidad de metadatos, y su naturaleza dinámica lo expone a la inyección de tiempo de ejecución.
  • Solo use llamadas a función C. Incluso si necesita más líneas de código con el marco de CoreFoundation, puede hacer perfectamente lo que el marco de Foundation puede hacer (NSString, NSArray, NSDictionary, ...).
  • No establezca un enlace dinámico con la biblioteca OpenSSL ya que ha quedado obsoleta en Mac OS X Lion. Si quieres usar OpenSSL , OpenSSL estáticamente para asegurarte de tener la última versión.
  • Use las funciones del sistema para la criptografía. Mac OS X se envía con funciones equivalentes desde 10.5. Por ejemplo, para calcular un hash SHA-1, puede usar la función CC_SHA1 .
  • No coloque cadenas en texto claro en su código. Codifícalos o encriptalos. Si no lo hace, dé una pista sobre la ubicación de su código.
  • No use constantes numéricas en su código. Calcúlelos en tiempo de ejecución, con algunas operaciones simples (+, -, / o *). De nuevo, si no lo haces, das una pista sobre la ubicación de tu código.
  • Evite las pruebas simples de validación mediante la incorporación de sus pruebas y la llamada a NSApplicationMain en un bucle complejo.
  • Evite llamar NSApplicationMain directamente. Use un puntero de función para ocultar la invocación. Si no lo hace, dé una pista sobre la ubicación de su código.
  • Para cada versión de su aplicación, modifique ligeramente el código de validación para que nunca vuelva a ser el mismo.

Recuerde que la validación de recibos es necesaria y no es tan simple como parece. Puede consumir mucho tiempo que puede gastar mejor en su aplicación.

Así que le sugiero que eche un vistazo a esta aplicación: Receigen (Descargo de responsabilidad: soy el desarrollador de esta aplicación).


Incluso con NPReceiptValidation, debe validar la seguridad de su paquete de aplicaciones, incluidos los certificados de firma. Esto está documentado en las recomendaciones de WWDR para desarrolladores.

Una solución: http://itunes.apple.com/us/app/apptight-pro-app-store-code/id427083596?mt=12

Un posible problema con NPReceiptValidation es que los selectores de métodos en objetos Cocoa son muy fáciles de secuestrar. Es la forma más popular de extender aplicaciones.

Aquí hay otra herramienta para ayudar con el análisis de compras en la aplicación:

http://itunes.apple.com/us/app/pkcs-7viewer/id547539804?mt=12


Para validar el recibo real después de la prueba, cambie esta línea de código en su archivo main.m :

if (!validateReceiptAtPath(@"~/Desktop/receipt"))

a

#ifdef USE_SAMPLE_RECEIPT // defined for debug version NSString *pathToReceipt = @"~/Desktop/receipt"; #else NSString *pathToReceipt = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Contents/_MASReceipt/receipt"]; #endif if (!validateReceiptAtPath(pathToReceipt)) exit(173); //receipt did not validate

y en su configuración de compilador, "Otros indicadores C" para su configuración de depuración debe incluir -DUSE_SAMPLE_RECEIPT

cortesía de http://jesusagora.org/groups/futurebasic/0::53562:get:1read.html


Propondría implementar las rutinas de verificación de código como funciones C , no como métodos ObjC.

Esta técnica hace que sea (un poco) más difícil localizar el código de verificación de recibos, ya que se compilan menos nombres de métodos en el binario.


Puede Referir la RVNReceiptValidation es fácil de implementar. Solo tiene que establecer el ID del paquete en el archivo RVNReceiptValidation.m y la versión de su aplicación. Recuerde obtener el recibo de la manzana que tiene para iniciar la aplicación desde el Finder. Esta clase también ayuda en la implementación de la compra de InApp.


Puedes probar NPReceiptVerification . Es la forma más fácil de agregar verificación de recibo a su aplicación. Simplemente agregue los archivos de clase a su proyecto, configure la versión y el identificador del paquete, y todo lo demás se maneja automáticamente.


Revisé el código de Alan Quartermain y se ve bien. Algo sobre lo que pensar:

el último parámetro aquí podría / debería ser un requisito compilado que establezca que el código debe estar firmado por SU certificado y el de nadie más.

Cuando el desarrollador envía una aplicación a la tienda para su aprobación, los certificados de firma son los siguientes:

3rd Party Mac Developer Application: me Apple Worldwide Developer Relations Certification Authority Apple Root CA

Después de que la aplicación se entrega desde la App Store al usuario final, los certificados de firma son los siguientes:

Apple Mac OS Application Signing Apple Worldwide Developer Relations Certification Authority Apple Root CA

Además, sugiero solo salir (173) cuando falta el recibo, pero todo lo demás está en orden.


Sí, en sus documentos dice: "Es importante que emplee una solución que sea exclusiva de su aplicación".


validateStoreReceipt de roddi funcionó para mí antes, pero ya no funciona. Escribí una publicación de blog sobre la solución: http://vinceyuan.blogspot.com/2012/07/validate-mac-app-store-receipt-2012.html

Copiado aquí: el código de roddi todavía está funcionando. No necesitas cambiarlo. (Solo necesita obtener la última versión) Siga estos pasos (se requiere internet):

  1. Salga de la aplicación Mac App Store.
  2. Quite el indicador USE_SAMPLE_RECEIPT de la configuración de su proyecto -> Macros de preprocesador.
  3. Compila tu proyecto
  4. Encuentra esta aplicación en Finder
  5. Haga doble clic en el Finder para ejecutar. No lo ejecute en Xcode.
  6. El sistema operativo le pedirá que inicie sesión con su ID de Apple. No inicie sesión con su cuenta real de iTunes. Debe iniciar sesión con la cuenta de prueba. Encuéntrelo o créelo en el sitio web de iTunesconnect.
  7. El sistema operativo dirá algo así como "Tu aplicación está rota. Descárgala en App Store". Ignora este mensaje Si "Mostrar contenido del paquete" de esta aplicación en Finder, verá que hay un archivo _MASReceipt / recibo. El sistema operativo instaló un recibo de desarrollo. Ya no necesitaremos el recibo de muestra anterior. Es por eso que eliminamos USE_SAMPLE_RECEIPT indicador de depuración.

Hecho. Puede depurar su aplicación ahora.