SlideShare a Scribd company logo
Reverse Engineering
Swift Apps
Michael Gianarakis
Hack In The Box GSEC 2016
# whoami
@mgianarakis
Director of SpiderLabs at Trustwave
Flat Duck Justice Warrior (FDJW)
Motivation
• Seeing more and more Swift being used in apps that we test (fan
boys like me tend to adopt new Apple technology quickly)
• Google is even considering using Swift as a first class language
on Android… (http://thenextweb.com/dd/2016/04/07/google-
facebook-uber-swift/)
• Wanted to dive into some of the key differences with Swift and
look at the challenges with respect to Swift app pen testing
• Focus is on “black box” app pen testing - for a deeper dive into
Swift language RE I recommend Ryan Stortz’s talk at Infiltrate
(http://infiltratecon.com/archives/swift_Ryan_Stortz.pdf)
How Does Swift Affect Testing?
• Will dive into the detail in the presentation but the
reality is not much in most areas, quite a bit in others?
• Most issues in iOS and OS X apps are due to poor
design decisions or misconfiguration and incorrect
implementation of Apple and third party frameworks
and libraries.
• The main thing that has changed is how you reverse
engineer the application
Quick Overview of
Swift
What is Swift?
• Compiled language created by Apple
• Released publicly in 2014 at WWDC and has seen
multiple revisions since.
• Open source with official implementations for iOS,
OS X and Linux.
• Intended to replace Objective-C eventually
Syntax (just the basics to follow
along)
Syntax (just the basics to follow
along)
Syntax (just the basics to follow
along)
Syntax (just the basics to follow
along)
Types
• All basic C and Objective-C types -> String, Bool,
Int , Float etc.
• Collection Types -> Array, Set, Dictionary
• Optional Types -> works with all types, no more nil
pointers like Objective-C
• Swift is a type safe language
Objective-C Compatibility
• Objective-C compatibility and interoperability
• Uses the same runtime environment
• Still supports C and C++ in the same app but
can’t be called from Swift like Objective-C
• Can allow for some dynamic features and
runtime manipulation
Other Language Features
• Barely scratched the surface
• Structs, Protocols, Extensions, Closures,
Enumerations, Optionals, Generics, Type Casting,
Access Control, Error Handling, Assertions….
• Automatic Reference Counting
• Unicode…
• var 💩 = 💩 💩 💩 💩 💩 ()
Other Language Features
Challenges Reversing
Swift Apps
Challenges
• Less dynamic than Objective-C
• Less flexible than Objective-C in some areas
• Can make it harder to do some of the standard tasks you
would do on a standard app pen test
• Less of an issue now because most Swift apps will include
be mixed with Objective-C
• Limited tooling
• We will explore this in more detail
Challenges
• Rapidly evolving syntax, APIs and features and Apple doesn’t care
too much about breaking changes.
• v1.0 - September 2014
• v1.1 - October 2014
• v1.2 - April 2015
• v2.0 - September 2015 (Open Sourced, Linux)
• v2.2 - March 2016
• v3.0 - Late 2016
Reversing Swift Apps
• Two primary reverse engineering activities when
conducting a “black box” pen test
• Dumping and analysing class information
from the binary
• Retrieving information at runtime using
debuggers, function hooking, tracing etc.
Retrieving Class
Information
Class Dump?
• The most common and easiest way to retrieve
class data from an Objective-C binary is the class-
dump utility
• class-dump retrieves class information and formats
to look like the equivalent of an Objective-C
header file
• Usually one of the first things you do when looking
at an app
Class Dump?
Class Dump?
What next?
• So class-dump-z doesn’t work with Swift binaries :(
• Now what?
• Let’s start diving into the binary
Symbol Table
• What do we get if we dump the symbol table?
Symbol Table
• What if we look for something we know is in the
binary?
Name Mangling
• Looks promising but it’s a far cry from the output
of class-dump and is kind of hard to make out
• Swift stores metadata about a function in it’s
symbols in the process “mangling” the name.
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Function of a
class
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Function of a
class
Module name
with length
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Function of a
class
Module name
with length
Class name
with length
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Function of a
class
Module name
with length
Class name
with length
Function name
with length
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Function of a
class
Module name
with length
Class name
with length
Function name
with length
Function
attribute
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Function of a
class
Module name
with length
Class name
with length
Function name
with length
Function
attribute
Parameters
Name Mangling
__TFC9hitb_demo4Duck13printDuckTypefT_T_
Indicates it’s a
Swift method
Indicates it’s a
function
Function of a
class
Module name
with length
Class name
with length
Function name
with length
Function
attribute
Parameters
Return Type
Function Attributes
f Normal function
s Setter
g Getter
d Destructor
D Deallocator
c Constructor
C Allocator
Return Types
a Array
b Boolean
c Unicode Scalar
d Double
f Float
i Integer
u Unsigned Integer
Q Implicitly Unwrapped Optional
S String
swift-demangle
• So now we know roughly the way the names are
mangle you could use this to create a script that
“de-mangles” the names
• Apple has already thought of that and includes a
utility called swift-demangle to do just that
swift-demangle
swift-demangle
• With nm and swift-demangle and some shell
scripting you should be able to easily grab the
function signatures from an app
• Should be all you need to get basically the same
information you would from class-dump to start
assessing the app
class-dump-s
• Hacked together script that demangles names and
formats the output to approximate the output of
class-dump
• Written in Swift
• Demo
Stripped Binaries
• CAVEAT: If the developer stripped symbols from
the binary then these techniques obviously won’t
work.
• Reverse engineering stripped binaries is a bit
more complicated
Objective-C Compatibility
• Part of the reason it’s much easier to get class
information from Objective-C binaries is because
it’s necessary for the Objective-C runtime to have
that info
• So what happens when you import Objective-C
frameworks or use Objective-C in your app?
Revisiting Class Dump
• The latest branch of class-dump by Steven Nygard
(the original class-dump utility) has limited support
for Swift.
• Need to download and build from source (no
binary release yet)
• https://github.com/nygard/class-dump
Revisiting Class Dump
Revisiting Class Dump
Revisiting Class Dump
Revisiting Class Dump
Other Options
• Disassemblers (i.e. Hopper, IDA Pro)
• Necessary for lower level insight into the app
• To demangle Swift function names https://
github.com/Januzellij/hopperscripts
Function Hooking
Hooking Swift Methods
• Still possible.
• Much easier with in mixed Swift/Objective-C
binaries.
• Can still write tweaks with Mobile Substrate.
Hooking Swift Methods
Hooking Swift Methods
• Hooking getter method (works!)
Hooking Swift Methods
• Hooking setter method (kinda works…)
Hooking Swift Methods
• Certain functions in Swift are inlined and the class
constructor is one of them (which is directly setting
the instance variable)
• So in this case the setter will only be called again
by the top level code.
• If you call from there it works.
Hooking Swift Methods
• Changing the instance variable directly (works but
not a good idea probably)
Wrap Up
Wrap Up
• So not all hope is lost when it comes to your
standard pen test workflows with Swift apps
• A bit more of a pain in the arse if you don’t get
access to the source code
• Most issues in iOS and OS X apps are due to poor
design decisions or misconfiguration and incorrect
implementation of Apple and third party
frameworks and libraries.
Next Steps
• Improve the class-dump-s script :)
• Runtime inspection (was going to demo this but ran
out of time :( )
• cycript works but not as straightforward as with
Objective-C
• LLDB works well if you are familiar with it
• Will hopefully write a blog post soon
Q&A?

More Related Content

What's hot (20)

PPTX
API workshop: Introduction to APIs (TC Camp)
Tom Johnson
 
PPTX
API Documentation -- Presentation to East Bay STC Chapter
Tom Johnson
 
PPT
C#/.NET Little Wonders
BlackRabbitCoder
 
PPTX
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Tom Johnson
 
PDF
Object oriented-programming-in-c-sharp
Abefo
 
PPTX
API Workshop: Deep dive into code samples
Tom Johnson
 
PPTX
Functional Programming In Jdk8
Bansilal Haudakari
 
PPTX
Writing code samples for API/SDK documentation
Tom Johnson
 
PDF
Generating UML Models with Inferred Types from Pharo Code
ESUG
 
PDF
Pigaios: A Tool for Diffing Source Codes against Binaries (Hacktivity 2018)
Joxean Koret
 
PPTX
API Documentation Workshop tcworld India 2015
Tom Johnson
 
PDF
Scala Jump Start
Haim Michael
 
PPTX
API Workshop: Deep dive into REST APIs
Tom Johnson
 
PPT
Java Basics for selenium
apoorvams
 
PDF
C# 9 and 10 - What's cool?
Christian Nagel
 
KEY
Language Engineering in the Cloud
lennartkats
 
PDF
Using Swift for all Apple platforms (iOS, watchOS, tvOS and OS X)
Aniruddha Chakrabarti
 
PPTX
T4 presentation
Gary Pedretti
 
PPTX
C# language
Akanksha Shukla
 
PPTX
Intro To AOP
Donald Belcham
 
API workshop: Introduction to APIs (TC Camp)
Tom Johnson
 
API Documentation -- Presentation to East Bay STC Chapter
Tom Johnson
 
C#/.NET Little Wonders
BlackRabbitCoder
 
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Tom Johnson
 
Object oriented-programming-in-c-sharp
Abefo
 
API Workshop: Deep dive into code samples
Tom Johnson
 
Functional Programming In Jdk8
Bansilal Haudakari
 
Writing code samples for API/SDK documentation
Tom Johnson
 
Generating UML Models with Inferred Types from Pharo Code
ESUG
 
Pigaios: A Tool for Diffing Source Codes against Binaries (Hacktivity 2018)
Joxean Koret
 
API Documentation Workshop tcworld India 2015
Tom Johnson
 
Scala Jump Start
Haim Michael
 
API Workshop: Deep dive into REST APIs
Tom Johnson
 
Java Basics for selenium
apoorvams
 
C# 9 and 10 - What's cool?
Christian Nagel
 
Language Engineering in the Cloud
lennartkats
 
Using Swift for all Apple platforms (iOS, watchOS, tvOS and OS X)
Aniruddha Chakrabarti
 
T4 presentation
Gary Pedretti
 
C# language
Akanksha Shukla
 
Intro To AOP
Donald Belcham
 

Similar to Hack in the Box GSEC 2016 - Reverse Engineering Swift Applications (20)

PPTX
iOS Application Exploitation
Positive Hack Days
 
PDF
Swift, swiftly
Jack Nutting
 
PDF
CrikeyCon 2015 - iOS Runtime Hacking Crash Course
eightbit
 
PDF
Facilitating Idiomatic Swift with Objective-C
Aaron Taylor
 
PDF
Swift2 smalltalk osxdev
Jung Kim
 
PDF
Swift - Under the Hood
C4Media
 
PDF
iOS Application Security
Egor Tolstoy
 
PDF
SV-ios-objc-to-swift
Randy Scovil
 
PDF
Swift for-rubyists
Michael Yagudaev
 
PPTX
Swift programming language
Nijo Job
 
PDF
Ios 12 Programming Fundamentals With Swift Swift Xcode And Cocoa Basics 5th E...
joettealhadi
 
PDF
Advanced Swift Updated For Swift 5 Chris Eidhof
jksjzdl5949
 
PDF
Open Source Swift Under the Hood
C4Media
 
PDF
Denis Lebedev, Swift
Yandex
 
PDF
What Makes Objective C Dynamic?
Kyle Oba
 
PDF
Live Updating Swift Code
Bartosz Polaczyk
 
PDF
iOS NSAgora #3: Objective-C vs. Swift
Alex Cristea
 
PDF
Bringing Swift into your Objective-C Projects
René Cacheaux
 
PDF
The Swift Compiler and Standard Library
Santosh Rajan
 
PPTX
PPT.pptxvkjvwbjbbikvhixhkiheihhiiihwxhhi
afsana9597
 
iOS Application Exploitation
Positive Hack Days
 
Swift, swiftly
Jack Nutting
 
CrikeyCon 2015 - iOS Runtime Hacking Crash Course
eightbit
 
Facilitating Idiomatic Swift with Objective-C
Aaron Taylor
 
Swift2 smalltalk osxdev
Jung Kim
 
Swift - Under the Hood
C4Media
 
iOS Application Security
Egor Tolstoy
 
SV-ios-objc-to-swift
Randy Scovil
 
Swift for-rubyists
Michael Yagudaev
 
Swift programming language
Nijo Job
 
Ios 12 Programming Fundamentals With Swift Swift Xcode And Cocoa Basics 5th E...
joettealhadi
 
Advanced Swift Updated For Swift 5 Chris Eidhof
jksjzdl5949
 
Open Source Swift Under the Hood
C4Media
 
Denis Lebedev, Swift
Yandex
 
What Makes Objective C Dynamic?
Kyle Oba
 
Live Updating Swift Code
Bartosz Polaczyk
 
iOS NSAgora #3: Objective-C vs. Swift
Alex Cristea
 
Bringing Swift into your Objective-C Projects
René Cacheaux
 
The Swift Compiler and Standard Library
Santosh Rajan
 
PPT.pptxvkjvwbjbbikvhixhkiheihhiiihwxhhi
afsana9597
 

More from eightbit (7)

PDF
Defcon 25 Packet Hacking Village - Finding Your Way to Domain Access
eightbit
 
PDF
AusCERT - Developing Secure iOS Applications
eightbit
 
PDF
CrikeyCon 2017 - Rumours of our Demise Have Been Greatly Exaggerated
eightbit
 
PDF
Online Retailer's Conference 2013 - Hacking Mobile Applications - Industry Ca...
eightbit
 
PDF
YOW! Connected 2014 - Developing Secure iOS Applications
eightbit
 
PDF
Ruxmon April 2014 - Introduction to iOS Penetration Testing
eightbit
 
PDF
OWASP Melbourne - Introduction to iOS Application Penetration Testing
eightbit
 
Defcon 25 Packet Hacking Village - Finding Your Way to Domain Access
eightbit
 
AusCERT - Developing Secure iOS Applications
eightbit
 
CrikeyCon 2017 - Rumours of our Demise Have Been Greatly Exaggerated
eightbit
 
Online Retailer's Conference 2013 - Hacking Mobile Applications - Industry Ca...
eightbit
 
YOW! Connected 2014 - Developing Secure iOS Applications
eightbit
 
Ruxmon April 2014 - Introduction to iOS Penetration Testing
eightbit
 
OWASP Melbourne - Introduction to iOS Application Penetration Testing
eightbit
 

Recently uploaded (20)

PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Python basic programing language for automation
DanialHabibi2
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PPTX
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Python basic programing language for automation
DanialHabibi2
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 

Hack in the Box GSEC 2016 - Reverse Engineering Swift Applications

  • 1. Reverse Engineering Swift Apps Michael Gianarakis Hack In The Box GSEC 2016
  • 2. # whoami @mgianarakis Director of SpiderLabs at Trustwave Flat Duck Justice Warrior (FDJW)
  • 3. Motivation • Seeing more and more Swift being used in apps that we test (fan boys like me tend to adopt new Apple technology quickly) • Google is even considering using Swift as a first class language on Android… (http://thenextweb.com/dd/2016/04/07/google- facebook-uber-swift/) • Wanted to dive into some of the key differences with Swift and look at the challenges with respect to Swift app pen testing • Focus is on “black box” app pen testing - for a deeper dive into Swift language RE I recommend Ryan Stortz’s talk at Infiltrate (http://infiltratecon.com/archives/swift_Ryan_Stortz.pdf)
  • 4. How Does Swift Affect Testing? • Will dive into the detail in the presentation but the reality is not much in most areas, quite a bit in others? • Most issues in iOS and OS X apps are due to poor design decisions or misconfiguration and incorrect implementation of Apple and third party frameworks and libraries. • The main thing that has changed is how you reverse engineer the application
  • 6. What is Swift? • Compiled language created by Apple • Released publicly in 2014 at WWDC and has seen multiple revisions since. • Open source with official implementations for iOS, OS X and Linux. • Intended to replace Objective-C eventually
  • 7. Syntax (just the basics to follow along)
  • 8. Syntax (just the basics to follow along)
  • 9. Syntax (just the basics to follow along)
  • 10. Syntax (just the basics to follow along)
  • 11. Types • All basic C and Objective-C types -> String, Bool, Int , Float etc. • Collection Types -> Array, Set, Dictionary • Optional Types -> works with all types, no more nil pointers like Objective-C • Swift is a type safe language
  • 12. Objective-C Compatibility • Objective-C compatibility and interoperability • Uses the same runtime environment • Still supports C and C++ in the same app but can’t be called from Swift like Objective-C • Can allow for some dynamic features and runtime manipulation
  • 13. Other Language Features • Barely scratched the surface • Structs, Protocols, Extensions, Closures, Enumerations, Optionals, Generics, Type Casting, Access Control, Error Handling, Assertions…. • Automatic Reference Counting • Unicode… • var 💩 = 💩 💩 💩 💩 💩 ()
  • 16. Challenges • Less dynamic than Objective-C • Less flexible than Objective-C in some areas • Can make it harder to do some of the standard tasks you would do on a standard app pen test • Less of an issue now because most Swift apps will include be mixed with Objective-C • Limited tooling • We will explore this in more detail
  • 17. Challenges • Rapidly evolving syntax, APIs and features and Apple doesn’t care too much about breaking changes. • v1.0 - September 2014 • v1.1 - October 2014 • v1.2 - April 2015 • v2.0 - September 2015 (Open Sourced, Linux) • v2.2 - March 2016 • v3.0 - Late 2016
  • 18. Reversing Swift Apps • Two primary reverse engineering activities when conducting a “black box” pen test • Dumping and analysing class information from the binary • Retrieving information at runtime using debuggers, function hooking, tracing etc.
  • 20. Class Dump? • The most common and easiest way to retrieve class data from an Objective-C binary is the class- dump utility • class-dump retrieves class information and formats to look like the equivalent of an Objective-C header file • Usually one of the first things you do when looking at an app
  • 23. What next? • So class-dump-z doesn’t work with Swift binaries :( • Now what? • Let’s start diving into the binary
  • 24. Symbol Table • What do we get if we dump the symbol table?
  • 25. Symbol Table • What if we look for something we know is in the binary?
  • 26. Name Mangling • Looks promising but it’s a far cry from the output of class-dump and is kind of hard to make out • Swift stores metadata about a function in it’s symbols in the process “mangling” the name.
  • 29. Name Mangling __TFC9hitb_demo4Duck13printDuckTypefT_T_ Indicates it’s a Swift method Indicates it’s a function Function of a class
  • 30. Name Mangling __TFC9hitb_demo4Duck13printDuckTypefT_T_ Indicates it’s a Swift method Indicates it’s a function Function of a class Module name with length
  • 31. Name Mangling __TFC9hitb_demo4Duck13printDuckTypefT_T_ Indicates it’s a Swift method Indicates it’s a function Function of a class Module name with length Class name with length
  • 32. Name Mangling __TFC9hitb_demo4Duck13printDuckTypefT_T_ Indicates it’s a Swift method Indicates it’s a function Function of a class Module name with length Class name with length Function name with length
  • 33. Name Mangling __TFC9hitb_demo4Duck13printDuckTypefT_T_ Indicates it’s a Swift method Indicates it’s a function Function of a class Module name with length Class name with length Function name with length Function attribute
  • 34. Name Mangling __TFC9hitb_demo4Duck13printDuckTypefT_T_ Indicates it’s a Swift method Indicates it’s a function Function of a class Module name with length Class name with length Function name with length Function attribute Parameters
  • 35. Name Mangling __TFC9hitb_demo4Duck13printDuckTypefT_T_ Indicates it’s a Swift method Indicates it’s a function Function of a class Module name with length Class name with length Function name with length Function attribute Parameters Return Type
  • 36. Function Attributes f Normal function s Setter g Getter d Destructor D Deallocator c Constructor C Allocator
  • 37. Return Types a Array b Boolean c Unicode Scalar d Double f Float i Integer u Unsigned Integer Q Implicitly Unwrapped Optional S String
  • 38. swift-demangle • So now we know roughly the way the names are mangle you could use this to create a script that “de-mangles” the names • Apple has already thought of that and includes a utility called swift-demangle to do just that
  • 40. swift-demangle • With nm and swift-demangle and some shell scripting you should be able to easily grab the function signatures from an app • Should be all you need to get basically the same information you would from class-dump to start assessing the app
  • 41. class-dump-s • Hacked together script that demangles names and formats the output to approximate the output of class-dump • Written in Swift • Demo
  • 42. Stripped Binaries • CAVEAT: If the developer stripped symbols from the binary then these techniques obviously won’t work. • Reverse engineering stripped binaries is a bit more complicated
  • 43. Objective-C Compatibility • Part of the reason it’s much easier to get class information from Objective-C binaries is because it’s necessary for the Objective-C runtime to have that info • So what happens when you import Objective-C frameworks or use Objective-C in your app?
  • 44. Revisiting Class Dump • The latest branch of class-dump by Steven Nygard (the original class-dump utility) has limited support for Swift. • Need to download and build from source (no binary release yet) • https://github.com/nygard/class-dump
  • 49. Other Options • Disassemblers (i.e. Hopper, IDA Pro) • Necessary for lower level insight into the app • To demangle Swift function names https:// github.com/Januzellij/hopperscripts
  • 51. Hooking Swift Methods • Still possible. • Much easier with in mixed Swift/Objective-C binaries. • Can still write tweaks with Mobile Substrate.
  • 53. Hooking Swift Methods • Hooking getter method (works!)
  • 54. Hooking Swift Methods • Hooking setter method (kinda works…)
  • 55. Hooking Swift Methods • Certain functions in Swift are inlined and the class constructor is one of them (which is directly setting the instance variable) • So in this case the setter will only be called again by the top level code. • If you call from there it works.
  • 56. Hooking Swift Methods • Changing the instance variable directly (works but not a good idea probably)
  • 58. Wrap Up • So not all hope is lost when it comes to your standard pen test workflows with Swift apps • A bit more of a pain in the arse if you don’t get access to the source code • Most issues in iOS and OS X apps are due to poor design decisions or misconfiguration and incorrect implementation of Apple and third party frameworks and libraries.
  • 59. Next Steps • Improve the class-dump-s script :) • Runtime inspection (was going to demo this but ran out of time :( ) • cycript works but not as straightforward as with Objective-C • LLDB works well if you are familiar with it • Will hopefully write a blog post soon
  • 60. Q&A?