aiQG's Blog

Happy hacking. Happy developing.

aiQG's GitHub ⛓Links P
Other CTF Swift Developing & Reversing

Lldb

22 July 2019

by aiQG_

GDB to LLDB command map

直接回车 重复上一条命令

可以设置命令别名

l/list 源码(编译时带-g)

b/breakpoint+行号 下断点(可–file指定文件)

n/next 步过(源码级别)

bt 查看所有帧(调用堆栈) frame select+序号 跳到指定帧(f +序号) frame variable 查看当前帧的变量(局部变量)

image list -o -f 各个模块的基址

register read 读取寄存器的值 register write 修改寄存器的值

e/expression+表达式 执行表达式(可修改寄存器的值 expression $r8=1)(也可调用某类某方法)(也可利用exp unsigned int $a = 0xFF 初始化变量(似乎不能在开始调试后修改变量))

thread list 打印线程

memory read

x===memory read x+变量(+偏移) 打印二进制文件 x -f A+起始地址+结束地址 打印内存

memory write

dis/disassemble 打印当前位置的汇编 dis/disassemble -a+地址 打印汇编

p/x 按十六进制打印 p/t按二进制打印 p/o按八进制打印 参数可强制转换类型

watchpoint 硬件断点(一般最多4个)

一个插件 voltron

//如果用的是zsh安装后手动加上路径

打开监听窗口

~/ voltron view -h                                                [16:11:57]
usage: voltron view [-h]
                    {backtrace,t,bt,back,registers,r,reg,register,breakpoints,b,bp,break,command,c,cmd,memory,m,mem,disasm,d,dis,stack,s,st}
                    ...

optional arguments:
  -h, --help        s    show this help message and exit

views:
  valid view types

  {backtrace,t,bt,back,registers,r,reg,register,breakpoints,b,bp,break,command,c,cmd,memory,m,mem,disasm,d,dis,stack,s,st}
                        additional help
    backtrace (t,bt,back)
                        backtrace view
    registers (r,reg,register)
                        register values
    breakpoints (b,bp,break)
                        breakpoints view
    command (c,cmd)     run a command each time the debugger host stops
    memory (m,mem)      display a chunk of memory
    disasm (d,dis)      disassembly view
    stack (s,st)        display a chunk of stack memory

lldbinit

lldbinitcmds 列出所有命令

datawin 数据部分变化时触发断点(watchpoint)

fr v -R [object] 来查看对象内存结构

break modify -i <忽略的次数> <断点标号>

-N 指定断点名

memory read -f uint64 -s 16 [addr]

(-f (format) -s (每个元素多少字节))

// memory read -f uint64 -s 8 -c 1 [addr] 等价于 x/gx [addr]


mac上找到合适版本的debugserver

ls /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

将dmg里的debugserver取出, 重签名

entitlements.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.springboard.debugapplications</key> <true/>
	<key>run-unsigned-code</key> <true/>
	<key>get-task-allow</key> <true/>
	<key>task_for_pid-allow</key> <true/>
</dict> 
</plist>

codesign -s - --entitlements entitlements.plist -f debugserver

用scp拷贝到iPhone, 然后运行

debugserver *:6666 -a [App Name | PID] 挂起App

// 以下为有线连接方式, 无线方式在这

Mac上启动代理

iproxy 6666 6666

lldb运行

platform select remote-ios

process connect connect://localhost:6666

// 连接可能需要等待一段时间lldb进行分析

// 如果出现 error: rejecting incoming connection from ::ffff:xxx.xxx.xxx.xxx (expecting ::1)

// 则iPhone上运行 debugserver xxx.xxx.xxx.xxx:6666 -a [App Name | PID] 指定一下IPv4地址

其他可能报错处理方法在这

Developing & Reversing

return

email:nrxxmzlrovqw4z3fgeztcncaozuxaltroexgg33n