Prima di tutto, lasciami dire che capisco che l'utilizzo di PT_DENY_ATTACH come descritto a: Bugging Debuggers è piuttosto inutile.
Tuttavia, per capire come funziona iOS, mi piacerebbe comunque sapere: è possibile fare qualcosa di simile quando si lavora su un progetto Swift? Poiché Objective-C è basato su C, esiste una funzione main(int argc, char *argv[])
che può essere sfruttata per impedire a gdb di collegarsi al processo.
Come si farebbe in Swift? Sto principalmente cercando di capire il ciclo di vita dell'applicazione in Swift, tuttavia, la maggior parte delle spiegazioni che riesco a trovare sono per ObjC.iOS Antipirateria in Swift
risposta
Grazie a utenti ahruss 's molto utile collegamento, ecco la soluzione che ho atterrato su:
ho usato il metodo di riferimento in this question per creare un file main.swift. Poi ho creato un file c (e intestazione) contenente questa definizione di metodo:
typedef int (*command_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif
//Anti-debug method
void disable_attach() {
void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
command_ptr_t command_ptr = dlsym(handle, "ptrace");
command_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}
ho aggiunto il file di intestazione disableAttach.h nel mio header ponte, poi chiamato disable_attach()
direttamente sopra la mia UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate))
chiamata in main.swift. Si dovrebbe finire con un file main.swift simile a questo:
import Foundation
import UIKit
disable_attach()
UIApplicationMain(
CommandLine.argc,
UnsafeMutableRawPointer(CommandLine.unsafeArgv)
.bindMemory(
to: UnsafeMutablePointer<Int8>.self,
capacity: Int(CommandLine.argc)),
nil,
NSStringFromClass(AppDelegate.self)
)
Come ho affermato in precedenza in un commento, sembra che il ciclo di vita è lo stesso, ma che la direttiva @UIApplicationMain
nasconde la principale file di si.
Se capisco cosa hai fatto correttamente, questo può ancora essere aggirato - una volta che l'attaccante scopre cosa sta succedendo, salterà semplicemente la chiamata di funzione. Puoi provare qualcosa di più sofisticato, come i percorsi accidentali non voluti (quando hai capito che stai eseguendo il debug e vuoi tenere l'attaccante al buio su * quando esattamente * è successo) combinato con il rilevamento di debugger non ovvio come misurare il tempo di esecuzione del codice o qualcosa di strano e inaspettato come l'auto-debugging. Il problema è che chiunque è tenace e abbastanza craccerà qualsiasi difesa ... Quindi assicurati di non andare troppo alto profilo =) – Mints97
@ Mints97 Hai ragione. Il metodo PT_DENY_ATTACH non è più considerato utile ([questo collegamento] (http://iphonedevwiki.net/index.php/Crack_prevention) lo elenca come "Deprecato o non funzionante"), tuttavia, è stato concepito come un buon caso d'uso per capire le differenze tra un'applicazione iOS basata su Obec e Swift. – Stephen
@Stephen C'è una soluzione che può sostituire PT_DENY_ATTACH? –
- 1. setHTTPBody in iOS 8 + Swift
- 2. personalizzato in iOS 8 - Swift
- 3. Compatibilità iOS Swift 3
- 4. UIModalPresentationStyle.CurrentContext Swift iOS 7
- 5. Swift iOS: Firebase Paging
- 6. iOS Swift e localizedStringWithFormat
- 7. Firebase Crash .. iOS Swift
- 8. iOS Swift Stroke Width
- 9. equivalente in cURL in Swift - iOS
- 10. Segnalazione di crash in SWIFT iOS
- 11. Stampa della vista in iOS con Swift
- 12. Implementare Google Analytics in ios swift
- 13. Utilizzo di OpenCV in Swift iOS
- 14. IOS rightBarButtonItem su UINavigationController in swift
- 15. Come disegnare un cerchio in iOS Swift?
- 16. Verifica del troncamento in UILabel - iOS, Swift
- 17. Come visualizzare MKSnapshot in Swift (iOS)
- 18. iOS Swift: Richiedi posizione utente
- 19. IOS Swift - overlay fotocamera personalizzato
- 20. IOS Swift. Tempo dalla data
- 21. Social Framework iOS 8 swift
- 22. IOS Video Compression Swift iOS 8 file video corrotto
- 23. Come convertire NSDictionary in Json String in Swift (iOS, Xcode)?
- 24. Come rimuovere celle vuote in più in TableViewController, iOS - Swift
- 25. Come convertire JSON in String in ios Swift?
- 26. Controllare il tipo di oggetto ios swift
- 27. iOS 9 Swift UIView non ha membri
- 28. Come utilizzare asl.h nei file swift-ios
- 29. iOS Swift Pass Chiusura come proprietà?
- 30. iOS 8 Swift UISearchController nasconde navigationbar
La risposta a [questa domanda] (http://stackoverflow.com/questions/24020000/subclass-uiapplication-with-swift/24021180#24021180) potrebbe essere utile. – ahruss
Questa risposta è, in effetti, molto utile alla comprensione. Sembra che il ciclo di vita sia lo stesso. Tuttavia, Swift nasconde alcune delle implementazioni dietro la direttiva @UIApplicationMain. – Stephen