用xcode调试第三方App

原来xcode还可以调试第三方app
操作步骤:
1.第三方app用调试证书重签名打包安装
2.mac连设备,xcode选择设备。
3.xcdoe-debug-attach process-选择依附设备中运行的进程。
4.点击xcode底部调试栏的暂停按钮,就可以看见lldb窗口了。

接下来演示一下如何修改界面元素。
这里我想在lldb中动态修改微信零钱中的数值。
1.微信打开零钱界面。
2.在xcode中按下暂停,进入lldb调试状态,输入以下代码

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]

从手机上可以看到我当前的零钱是¥528.78。在打印的结果里,cmd+f搜索528,很容易找到这么一段

   |    |    |    |    |    |    |    |    |    | >

可以知道,零钱是个MMUILabel类型的label。
3.我们修改零钱显示为¥99999.99
输入以下指令:

e id $moneyLbl = (id)0x1384d9f00
e (void)[$moneyLbl setText:[NSString stringWithUTF8String:"¥99999.99"]]

4.调试按钮点击执行,可以看到界面上的数值已经变了。

接下来我们来看看怎么查看一个按钮的点击事件
1.首先选择一个按钮,这里我们找充值按钮

   |    |    |    |    |    |    |    |    |    | >
   |    |    |    |    |    |    |    |    |    |    | >

可知按钮内存为0x1384d3010

  1. 打印按钮的所有targets
e id $btn=(id)0x1384d3010
po [$btn allTargets]
{(
    
)}

2.打印0x1384c3410这个对象的action

po [$btn actionsForTarget:(id)0x1384c3410 forControlEvent:0]
<__NSArrayM 0x13828a230>(
BalanceDetailSaveMoney
)

可见,充值按钮点击后触发的事件类型是:0
target是:WCPayBalanceDetailControlLogic(0x1384c3410)
函数是:BalanceDetailSaveMoney

想要给这个函数打断点,因为没有描述符,所以需要找到这个函数的地址。
可以 在lldb中输入以下指令:

po [WCPayBalanceDetailControlLogic _shortMethodDescription]

然后正常情况下会打印出这个类的各种方法以及地址。找到
BalanceDetailSaveMoney这个函数。

Instance Methods:
        - (void) startLogic; (0x1011bf1e4)
        - (void) onWCBaseLogicDidStop:(unsigned int)arg1; (0x1011bff14)
        - (void) OnRealnameVerifySuccessNotification:(id)arg1; (0x1011c09a4)
        - (void) doFetchMoney; (0x1011bfd94)
        - (void) BalanceDetailBack; (0x1011bf38c)
        - (void) BalanceDetailSaveMoney; (0x1011bf420)
        - (void) BalanceDetailFetchMoney; (0x1011bf5a0)
        - (void) BalanceDetailRequeryBalance; (0x1011bfaa0)
        - (int) m_eWCPayBalanceDetailControlLogicScene; (0x1011c0a3c)
        - (void) doAddCard; (0x1011bfb38)
        - (void) OnGetBindQueryInfo:(id)arg1 Error:(id)arg2; (0x1011c02f0)
        - (void) BackToRootView; (0x1011c0014)
        - (void) setM_eWCPayBalanceDetailControlLogicScene:(int)arg1; (0x1011c0a4c)
        - (void) .cxx_destruct; (0x1011c0a5c)
        - (void) dealloc; (0x1011bf15c)
        - (id) init; (0x1011bf0c8)
        - (void) pause; (0x1011bf388)

可以看到,

- (void) BalanceDetailSaveMoney; (0x1011bf420)

下断点:

(lldb) b 0x1011bf420

接下来开始搞事!自己发挥吧!

你可能感兴趣的:(用xcode调试第三方App)