2017-03-02 10 views
1

私はリリース構成で構築されたアプリケーションの1つをリバースエンジニアリングしようとしています。LLDBプリントスワイプアレイは16進アドレスのみを知っています

スレッド情報は次のようになります。

* 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)は

メモリの読み取りは、私はその認証funcがこのような定義

を持っていた

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

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

(私が試した、異なるフォーマット)のようなものを示して必要な引数が含まれています

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

したがって、基本的には、アドレス0で格納された「バイト」変数を取得するだけですx181ba4174。

また、私は「AUTH」メソッドは、このような引数で呼び出されたことを知っている:

理想的
let key = "somekey".utf8 
let result = auth(key) 

私は鍵を取り戻すしたいです。

答えて

1

最後に、私はこれを行うことができました。

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

それは次のように出力を与える:私は、キーを取得することができたのXcodeを使用して次に

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

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

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

はまた、私は、誰かがそれを必要とする場合のコマンドを書きました。

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

ことによってそれを実行します。

ptrInt8Array 0x181ba4174 
関連する問題