Skip to content

MASTG-TECH-0070: Extraindo Informações do Binário da Aplicação

Você pode usar o radare para obter informações sobre o binário, como a arquitetura, a lista de bibliotecas compartilhadas, a lista de classes e métodos, strings e muito mais.

Vamos usar o Damn Vulnerable iOS App DVIA v1 como exemplo. Abra seu binário principal com o radare2:

r2 DamnVulnerableIOSApp

Informações do Binário

Para obter informações sobre o binário, você pode usar o comando i. Este comando listará informações sobre o binário, como a arquitetura, a lista de bibliotecas compartilhadas, a lista de classes e métodos, strings e muito mais.

[0x1000180c8]> i
...
size     0x43d5f0
humansz  4.2M
mode     r-x
format   mach064
iorw     false
block    0x100
packet   xtr.fatmach0
...
lang     objc with blocks
linenum  false
lsyms    false
nx       false
os       ios
pic      true
relocs   true
sanitize false
static   false
stripped true

Classes e Métodos

Podemos então prosseguir para extrair informações sobre os métodos no código-fonte do aplicativo. Para isso, precisamos carregar o binário do aplicativo no radare e depois listar as classes e métodos no binário.

[0x1000180c8]> icc

...

@interface SFAntiPiracy : NSObject
{
}
+ (int) isPirated
+ (int) isJailbroken
+ (void) killApplication
+ (bool) isTheDeviceJailbroken
+ (bool) isTheApplicationCracked
+ (bool) isTheApplicationTamperedWith
+ (int) urlCheck
...
@end

Observe o sinal de mais (+), que significa que este é um método de classe que retorna um tipo BOOL.
Um sinal de menos (-) significaria que este é um método de instância. Consulte as seções posteriores para entender a diferença prática entre eles.

Bibliotecas Vinculadas

O seguinte comando lista as bibliotecas compartilhadas:

[0x1000180c8]> il
[Linked libraries]
/System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration
/System/Library/Frameworks/StoreKit.framework/StoreKit
/System/Library/Frameworks/Security.framework/Security
/System/Library/Frameworks/QuartzCore.framework/QuartzCore
/System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices
/usr/lib/libz.1.dylib
/System/Library/Frameworks/CoreLocation.framework/CoreLocation
/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics
/System/Library/Frameworks/CFNetwork.framework/CFNetwork
/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox
/System/Library/Frameworks/CoreData.framework/CoreData
/System/Library/Frameworks/UIKit.framework/UIKit
/System/Library/Frameworks/Foundation.framework/Foundation
/usr/lib/libobjc.A.dylib
/usr/lib/libSystem.B.dylib
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation

16 libraries

Strings

Obter strings é muito útil ao fazer engenharia reversa de um aplicativo, pois pode fornecer muitas informações sobre a funcionalidade do app. Por exemplo, você pode encontrar URLs, endpoints de API, chaves de criptografia e muito mais. Também é possível encontrar strings que apontarão para funções interessantes, como a função de login ou uma função que verifica se o dispositivo está com jailbreak.

[0x1000180c8]> izz~cstring | less


29903 0x001d0b4c 0x1001d0b4c 5   6    5.__TEXT.__cstring        ascii   Admin
29904 0x001d0b52 0x1001d0b52 13  14   5.__TEXT.__cstring        ascii   This!sA5Ecret
29905 0x001d0b60 0x1001d0b60 15  16   5.__TEXT.__cstring        ascii   pushSuccessPage
29906 0x001d0b70 0x1001d0b70 4   5    5.__TEXT.__cstring        ascii   Oops
29907 0x001d0b75 0x1001d0b75 30  31   5.__TEXT.__cstring        ascii   Incorrect Username or Password
29908 0x001d0b94 0x1001d0b94 17  18   5.__TEXT.__cstring        ascii   usernameTextField
29909 0x001d0ba6 0x1001d0ba6 39  40   5.__TEXT.__cstring        ascii   T@"UITextField",&,N,V_usernameTextField
29910 0x001d0bce 0x1001d0bce 17  18   5.__TEXT.__cstring        ascii   passwordTextField
...
29915 0x001d0ca8 0x1001d0ca8 18  19   5.__TEXT.__cstring        ascii   http://google.com/
29926 0x001d0d73 0x1001d0d73 37  38   5.__TEXT.__cstring        ascii   Request Sent using pinning, lookout !
29927 0x001d0d99 0x1001d0d99 77  78   5.__TEXT.__cstring        ascii   Certificate validation failed. 
                                                                        You will have to do better than this, my boy!!