9.7 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Code and more information in https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.
iOS рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди
iOS рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рдЕрд░реНрде рд╣реИ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдПрдХ рдРрд╕реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдпрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝рдиреЗ рдкрд░ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдХрд░рдирд╛ред рджреЛ рдореБрдЦреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓, NSCoding
рдФрд░ NSSecureCoding
, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ Objective-C рдпрд╛ NSObject
рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ NSData
рдореЗрдВ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдЗрдЯ рдмрдлрд░ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред
NSCoding
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
NSCoding
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрдХреНрд╖рд╛ рдХреЛ NSObject
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ @objc
рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдФрд░ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИ:
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)
}
}
NSSecureCoding
рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рдирд╛
рд╣рдорд▓рд╛рд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, NSSecureCoding
рдПрдХ рдЙрдиреНрдирдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред NSSecureCoding
рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХреЗрд╡рд▓ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬрдмрдХрд┐ NSSecureCoding
рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХреА рдЕрдЦрдВрдбрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд╛рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
static var supportsSecureCoding: Bool {
return true
}
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
Data Archiving with NSKeyedArchiver
NSKeyedArchiver
рдФрд░ рдЗрд╕рдХрд╛ рд╕рдордХрдХреНрд╖, NSKeyedUnarchiver
, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рддрдВрддреНрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдпреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ:
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
Using Codable
for Simplified Serialization
рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ Codable
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ Decodable
рдФрд░ Encodable
рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ String
, Int
, Double
рдЖрджрд┐ рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдФрд░ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
struct CustomPointStruct: Codable {
var x: Double
var name: String
}
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ JSON рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрд╡рд┐рдлреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
JSON рдФрд░ XML рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк
рд╕реНрдерд╛рдиреАрдп рд╕рдорд░реНрдерди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп JSON рдФрд░ XML рдПрдиреНрдХреЛрдбрд┐рдВрдЧ/рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдкрдиреЗ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЪрдпрди рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ XXE (XML рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдПрдВрдЯрд┐рдЯреАрдЬрд╝) рд╣рдорд▓реЛрдВ рдЬреИрд╕реА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдХреЗ рдмрд╛рд╣рд░реА рдПрдВрдЯрд┐рдЯреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдирд╛ред
рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдЪрд╛рд░
рдбреЗрдЯрд╛ рдХреЛ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬ рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рдкреНрд░рддрд┐ рд╕рддрд░реНрдХ рд░рд╣рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рдбреЗрдЯрд╛, рдпрджрд┐ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдирдзрд┐рдХреГрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдпрд╛ рдбреЗрдЯрд╛ рд▓реАрдХ рдЬреИрд╕реЗ рдЬреЛрдЦрд┐рдореЛрдВ рдХреЗ рдкреНрд░рддрд┐ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕рд╛рдЗрди рдХрд░рдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред
рд╕рдВрджрд░реНрдн
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.