在非越狱设备上使用 LLDB 调试第三方 App

说明

这个方法是在 iOS 8 刚发布的时候想到的,当时主要用来在非越狱的 iOS 8 设备上调试分析第三方已经支持 iOS 8 的 App,比如:UC 浏览器,下面也会使用 UCWEB 为例来说明一些命令。

原理

谈不上原理,主要就是利用 xcode 的工具链,当然如果对证书、签名、Entitlements 比较熟悉,可能会很自然的想到这个方法。当时想到方法后,就在 github 上搜索了一下发现已经有人写了相关的工具,下面跟大家说下具体如何操作。

工具

ios-deploy:https://github.com/phonegap/ios-deploy

环境

1、OS X Yosemite - 10.10.2

2、xcode - 6.1.1

步骤

 1、配置 xcode 的命令行环境,如下图:

说明:xcode 支持的 iOS 系统版本号需要大于等于设备,否则会无法挂载调试工具。

2、签出工具:git clone https://github.com/phonegap/ios-deploy

3、编译工具,shell 进入到 ios-deploy 目录,直接 make 即可:

编译成功后,可以将 ios-deploy 拷贝到 /usr/local/bin 中,便于全局使用。

4、在越狱设备上解密第三方 App,可以手工操作,也可以使用 Clutch 等。

这步比较重要,不解密会报错,具体原因没有去追究。在开发调试时向设备上安装的应用也是没有加密的。

5、权限 Entitlements

<?xml version="1.0"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>get-task-allow</key>
<true/>
</dict>
</plist>

将如上内容保存为:Entitlements.plist,后面签名时需要。

 6、准备 mobileprovision 文件,可以 iOS Dev Center 中下载,mobileprovision 文件中需要包含目标设备,这个做 iOS 开发的应该都知道。检查方法是:可以使用 emacs 打开 mobileprovision 文件,然后查看设备的 udid 是否在文件中。

将下载到 mobileprovision 重命名为 embedded.mobileprovision,将重命名后的文件拷贝到 UCWEB.app 中:

7、运行如下命令重新签名

codesign -f -s "iPhone Developer: 你的证书名字" --entitlements Entitlements.plist UCWEB.app

8、运行如下命令开始调试,调试前请解锁屏幕:

ios-deploy -v -d -n -i “设别 UDID" -b UCWEB.app

说明:安装应用的过程比较长。

如果成功,状态如下图:

     9、设置断点,运行程序:

10、其他的跟正常的 lldb 远程调试没有什么区别,enjoy。

时间: 2024-10-02 12:03:08

在非越狱设备上使用 LLDB 调试第三方 App的相关文章

LLDB调试第三方app

先要用xcode新创建一个项目连接手机调试它,这样手机上就会有debugserver程序,如图所示.会在/Developer/usr/bin下如图所示.因为他目前不能调试其它app,因为没有task_for_pid权限.先把它拷贝到电脑上.在同级目录创建一个pist文件.如图所示.entitlements.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC &quo

微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析

作者:蒸米@阿里移动安全 序言 微信作为手机上的第一大应用,有着上亿的用户.并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有的是用于私人的.可惜的是官方版的微信并不支持多开的功能,并且频繁更换微信账号也是一件非常麻烦的事,于是大家纷纷在寻找能够在手机上登陆多个微信账号的方法,相对于iOS,Android上早就有了很成熟的产品,比如360 OS的微信双开和LBE的双开大师就可以满足很多用户多开的需求. 但是在iOS上,因为苹果的安全机制,并没有任何知名的IT厂商推出微信多开的产品,反

iOS逆向工程之使用LLDB的USB连接调试第三方App

LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理,因为debugserver缺少task_for_pid权限,所以你只能使用LLDB来调试你自己的App.那么本篇博客中就要使用LLDB来调试从AppStore下载安装的App,并且结合着Hopper来分析第三方App内部的结构.LLDB与Hopper的结合,会让你看到不一样的东西,本篇博客就会和你

iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook(转载)

作者简介:郑旻(花名蒸米),阿里巴巴移动安全部门资深安全工程师,香港中文大学移动安全(Android & iOS)方向博士,曾在腾讯.百度以及硅谷的FireEye实习.在博士期间发表了多篇移动安全方向的论文(BlackHat.AsiaCCS等),去过10多个不同的国家做论文演讲. 曾帮助Apple公司修复了多处iOS安全问题,并且Apple在官网表示感谢.同时也是蓝莲花战队和Insight-labs的成员,在业余时间多次参加信息安全竞赛(Defcon.AliCTF.GeekPwn等),并取得优异

解决CATextLayer在越狱设备上字体颜色问题。

最近在做画k线的一个悬浮窗时候,用到了CATextLayer,然后在排版的时候,越狱设备字体颜色一直为全黑,于是stackoverflow了一下,发现相似问题决解办法是这样的 然后还是没效果,我就猜测是否是因为颜色值根本没设上.在使用NSAttributedString的属性设置有问题.最开始设置文字颜色用的这个属性:NSForegroundColorAttributeName,然后尝试使用更底层的API: 完美解决!

ubuntu18.04上使用LLDB调试Chromium_Android

###动机###Chromium_Android源代码庞大且复杂.在调试器LLDB下能帮助我们更好的理解代码流程.介绍使用LLDB调试器调试android上chromium的C++代码. [1] 编译Chromium时,记得修改编译选项:-g -O0, 使得编译器做更少的优化,便于调试.使用attach方式调试(因此进程在启动过程中暂时不能调试).查看进程PID:adb shell ps -A | grep chrome启动lldb-server:adb shell /system/bin/ll

xcode通过脚本调试第三方app

先创建一个与要调试的app名称相同的项目(不是必须,但是要修改脚本)然后就是在同一个目录下创建相应的目录.这个不是必须修改脚本就是了.第一个目录(TEMP)是放已经解密的app第二个目录APP目录是生成后会拷贝到这里的.里面不要放东西.脚本如下: #${SRCROOT} 它是工程文件所在的目录 TEMP_PATH="${SRCROOT}/Temp" #资源文件夹,我们提前在工程目录下新建一个app文件夹, 里面放ipa包 ASSETS_PATH="${SRCROOT}APP&

js 判断 移动设备上是否安装某款 app

一:判断是那种设备 var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 二:安卓设备:原理:判断是否认识这个协议,认识则直接跳转,不认识就在这里下载app android(); if(isAndroid){            function

XE6 &amp; IOS开发之免证书真机调试(3):生成iPA文件并安装到其它苹果设备上(有图有真相)

XE6 & IOS开发之免证书真机调试(3):生成iPA文件并安装到其它苹果设备上(有图有真相) 2014-08-27 20:51 网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 1.既然我们已经在真机上运行过App了,那么现在就来生成一下.--------------------------------------------------------------- 1.在虚拟机下,点一下桌面(星空图随便某个地方),在F