{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
C贸digo y m谩s informaci贸n en [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence).
## Serializaci贸n de Objetos en el Desarrollo de iOS
En iOS, **la serializaci贸n de objetos** implica convertir objetos en un formato que se puede almacenar o transmitir f谩cilmente, y luego reconstruirlos a partir de este formato cuando sea necesario. Dos protocolos principales, **`NSCoding`** y **`NSSecureCoding`**, facilitan este proceso para Objective-C o subclases de `NSObject`, permitiendo que los objetos se serialicen en **`NSData`**, un formato que envuelve b煤feres de bytes.
### **Implementaci贸n de `NSCoding`**
Para implementar `NSCoding`, una clase debe heredar de `NSObject` o estar marcada como `@objc`. Este protocolo exige la implementaci贸n de dos m茅todos para codificar y decodificar variables de instancia:
```swift
class CustomPoint: NSObject, NSCoding {
var x: Double = 0.0
var name: String = ""
func encode(with aCoder: NSCoder) {
aCoder.encode(x, forKey: "x")
aCoder.encode(name, forKey: "name")
}
required convenience init?(coder aDecoder: NSCoder) {
guard let name = aDecoder.decodeObject(forKey: "name") as? String else { return nil }
self.init(x: aDecoder.decodeDouble(forKey: "x"), name: name)
}
}
```
### **Mejorando la Seguridad con `NSSecureCoding`**
Para mitigar vulnerabilidades donde los atacantes inyectan datos en objetos ya construidos, **`NSSecureCoding`** ofrece un protocolo mejorado. Las clases que cumplen con `NSSecureCoding` deben verificar el tipo de objetos durante la decodificaci贸n, asegurando que solo se instancien los tipos de objetos esperados. Sin embargo, es crucial notar que, aunque `NSSecureCoding` mejora la seguridad de tipos, no cifra los datos ni garantiza su integridad, lo que requiere medidas adicionales para proteger la informaci贸n sensible:
```swift
static var supportsSecureCoding: Bool {
return true
}
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
```
## Archivado de Datos con `NSKeyedArchiver`
`NSKeyedArchiver` y su contraparte, `NSKeyedUnarchiver`, permiten codificar objetos en un archivo y recuperarlos m谩s tarde. Este mecanismo es 煤til para persistir objetos:
```swift
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
```
### Usando `Codable` para Serializaci贸n Simplificada
El protocolo `Codable` de Swift combina `Decodable` y `Encodable`, facilitando la codificaci贸n y decodificaci贸n de objetos como `String`, `Int`, `Double`, etc., sin esfuerzo adicional:
```swift
struct CustomPointStruct: Codable {
var x: Double
var name: String
}
```
Este enfoque admite la serializaci贸n directa hacia y desde listas de propiedades y JSON, mejorando el manejo de datos en aplicaciones Swift.
## Alternativas de Codificaci贸n JSON y XML
M谩s all谩 del soporte nativo, varias bibliotecas de terceros ofrecen capacidades de codificaci贸n/decodificaci贸n JSON y XML, cada una con sus propias caracter铆sticas de rendimiento y consideraciones de seguridad. Es imperativo seleccionar cuidadosamente estas bibliotecas, especialmente para mitigar vulnerabilidades como ataques XXE (XML External Entities) configurando los analizadores para prevenir el procesamiento de entidades externas.
### Consideraciones de Seguridad
Al serializar datos, especialmente en el sistema de archivos, es esencial estar atento a la posible inclusi贸n de informaci贸n sensible. Los datos serializados, si son interceptados o manejados de manera inapropiada, pueden exponer a las aplicaciones a riesgos como acciones no autorizadas o filtraciones de datos. Se recomienda cifrar y firmar los datos serializados para mejorar la seguridad.
## Referencias
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence)
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}