逆向开发中使用 LLDB

安装facebook/chisel DerekSelander/LLDB
LLDB会从默认的~/.lldbinit加载自定义脚本

git clone https://github.com/facebook/chisel.git
git clone https://github.com/DerekSelander/LLDB.git

touch ~/.lldbinit
vim ~/.lldbinit

# ~/.lldbinit
command script import pwd/chisel/fblldb.py
command script import pwd/LLDB/lldb_commands/dslldb.py

lldb一般最常用的就是po(print object)

  • pviews 可以打印页面结构(报错需要引用UIKit expression @import UIKit
  • presponder 0x15feab460 可以打印响应链
  • methods 0x15feab460 可以打印属性和方法
  • search UIImageView 可以查找页面元素
    • b 可以用来打断点
    • po $x1 可以打印参数
    • pblock 可以打印block (逆向可以查看block里面的参数了)
(lldb) b [LoginManager requestDirectLoginInController:completion:failure:]
Breakpoint 1: where = recipe`-[LoginManager requestDirectLoginInController:completion:failure:] at LoginManager.m:93, address = 0x0000000100748044
(lldb) po $x3
<__NSGlobalBlock__: 0x102fa9300>
(lldb) pblock 0x102fa9300
Imp: 0x100311768    Signature: void ^(NSDictionary *, bool, bool);
  • e 可以和Cycript一样动态的调用函数、打印函数
(lldb) e UIApplication *$app = [UIApplication sharedApplication]
(lldb) e UIWindow *$keyWindow = $app.keyWindow
(lldb) e UIViewController *$root = $keyWindow.rootViewController
(lldb) po $root  

(lldb) e UIViewController *$f = [((UITabBarController *)$root).viewControllers firstObject]
(lldb) po $f

(lldb) b [LoginManager requestDirectLoginInController:completion:failure:]
Breakpoint 16: where = recipe`-[LoginManager requestDirectLoginInController:completion:failure:] at LoginManager.m:93, address = 0x0000000101630984
(lldb) po $x0

(lldb) c
Process 42409 resuming
e (void)[0x1c4a508f0 requestDirectLoginInController:$nvc completion:nil failure:nil]

配合MallocStackLogging环境变量 使用lldb.macosx.heap.py
位置/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/Python/lldb/macosx/heap.py
虽然表明OS X使用但是iOS也可以使用

  • 查看一个对象分配内存的堆栈(需要配合MallocStackLogging malloc_info -s)
  • 得到内存指定类的实例对象(objc_refs)
  • 得到一个内存地址所有被引用的地方(ptr_refs)
  • 搜索内存中指定的C字符串(cstr_refs)
(lldb) command script import ;;db.macosx.heap
"malloc_info", "ptr_refs", "cstr_refs", "find_variable", and "objc_refs" commands have been installed, use the "--help" options on these commands for detailed help.

你可能感兴趣的:(逆向开发中使用 LLDB)