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