跳过内容

MASTG-TECH-0070: 从应用二进制文件中提取信息

您可以使用 radare 获取有关二进制文件的信息,例如架构、共享库列表、类和方法列表、字符串等等。

让我们以 Damn Vulnerable iOS App DVIA v1 为例。 使用 radare2 打开其主二进制文件

r2 DamnVulnerableIOSApp

二进制信息

要获取有关二进制文件的信息,可以使用 i 命令。 此命令将列出有关二进制文件的信息,例如架构、共享库列表、类和方法列表、字符串等等。

[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

类和方法

然后我们可以继续提取有关应用程序源代码中方法的信息。 为此,我们需要将应用程序二进制文件加载到 radare 中,然后列出二进制文件中的类和方法。

[0x1000180c8]> icc

...

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

请注意加号,这意味着这是一个返回 BOOL 类型的类方法。 减号表示这是一个实例方法。 请参阅后面的章节以了解两者之间的实际区别。

链接库

以下命令列出了共享库

[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

字符串

获取字符串在逆向工程应用程序时非常有用,因为它可以为您提供有关应用程序功能的很多信息。 例如,您可以找到 URL、API 端点、加密密钥等等。 您还可以找到指向有趣函数的字符串,例如登录函数或检查设备是否已越狱的函数。

[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!!