2017-03-02 97 views
1

我试图逆向工程之一使用发布配置构建的应用程序。LLDB打印快速阵列只知道十六进制地址

我的线程信息如下所示。

* thread #21: tid = 0x876cb, 0x000000010133856c SomeLibSwift`SomeLibSwift.Auth.auth (Swift.Array<Swift.UInt8>) throws -> Swift.Array<Swift.UInt8>, queue = 'com.apple.root.utility-qos', stop reason = breakpoint 1.6 
    * frame #0: 0x000000010133856c SomeLibSwift`SomeLibSwift.Auth.auth (Swift.Array<Swift.UInt8>) throws -> Swift.Array<Swift.UInt8> 

注册X0(地址0x181ba4174)包含所需参数

内存读取显示类似的信息(我已经尝试了不同的格式)

memory read -s1 -fC -c1000 --force 0x181ba4174 

0x181ba4174: ...??._?.......??._?0......??._? 
0x181ba4194: P......??._?p......??._?.......? 
0x181ba41b4: ?._ְ......??._??......??._?.... 
0x181ba41d4: ...??._?0......??._?P......??._? 
0x181ba41f4: p......??._?.......??._ְ......? 
0x181ba4214: ?._??......??._?.......??._?P... 
0x181ba4234: ...??._?p......??._?.......??._? 
.... 

我发现,权威性FUNC有这样的定义

func auth(_ bytes: Array<UInt8>) throws -> Array<UInt8> 

所以基本上我只想得到地址为0的字节变量x181ba4174。

我也知道,“权威性”的方法被调用的说法是这样的:

let key = "somekey".utf8 
let result = auth(key) 

理想我想回去关键。

回答

1

最后我能够完成这件事。

expr -l Swift -- String(unsafeBitCast(0x181ba4174, to: Array<UInt8>.self)) 

它给像输出:

(String) $R0 = "[10, 11, 118, 105, 19, 1]" 

然后使用Xcode中我能拿到钥匙:

var arr: [UInt8] = [10, 11, 118, 105, 19, 1] 

let data = Data(bytes: arr) 
let key = String(data: data, encoding: .ascii) 

而且我写的,以防有人需要它的命令。

ptrInt8Array 0x181ba4174 

command regex ptrInt8Array 's/(.+)/expr -l Swift -- String(describing: unsafeBitCast(%1, to: Array<UInt8>.self))/' 

通过执行它