xcode怎么用,xcode怎么编写c++语言

调试一款应用,使用重签名方案,很容易被第三方察觉。在越狱环境中,我们可以在不污染App的情况下,对第三方程序进行动态调试。RevealReveal是一款UI调试神器,对iOS逆向开发非常有帮助。这里使



调试一款应用,使用重签名方案,很容易被第三方察觉。在

越狱环境中,我们可以在不污染App的情况下,对第三方程序进行动态调试。

Reveal

Reveal是一款UI调试神器,对iOS逆向开发非常有帮助。

这里使用Version 4(8796)版本

在Mac电脑中,安装Reveal软件

在手机中,安装Reveal插件

打开Cydia,安装Reveal Loader插件

导入dylib文件

在手机上,进入/Library,创建RHRevealLoader目录

mkdir RHRevealLoader

在Mac电脑上,打开Reveal,找到iOS Library选项

找到RevealServer路径

打开终端,将RevealServer拷贝到手机的/Library/RHRevealLoader目录下。

xcode怎么用

重命名为libReveal.dylib

scp -P12345./RevealServer root@localhost:/Library/RHRevealLoader/libReveal.dylib-------------------------RevealServer 100%9100KB 35.5MB/s 00:00

开启允许调试的应用

打开设置,找到Reveal选项

开启允许调试的应用,例如WeChat

使用Reveal进行UI调式

在Mac电脑上,打开Reveal软件。手机上,重新启动WeChat

在电脑的Reveal中,出现两个WeChat,分别是WiFi连接和USB连接

debugserver

在越狱环境中,使用Xcode进行lldb附加

打开Xcode,随意打开一个项目,空工程也可以

选择真机,在Debug菜单中,选择Attach to Process,选择WeChat进程

显示Running,表示附加成功

使用lldb将应用暂停

使用Debug View进行UI调试

lldb原理

Xcode中的lldb可以调试手机中的应用,是因为手机中的debugserver开启了相关服务

第一、在苹果Mac电脑上搭建xcode开发环境。 第二、打开“xcode”开发工具,点击“File”->“New”->“ Project”项来创建一个新的工程。第三、在打开的“创建工程”向导界面中,选择“OS X”系统中的“Application”项,。

所以在越狱环境中,我们只需要开启debugserver服务。

就可以利用lldb远程调试三方应用了

探索debugserver

找到Mac电脑中的debugserver,进入以下目录:

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

可以找到不同iOS系统版本,所对应的镜像文件

进入设备对应的系统目录,找到dmg文件

xcode怎么编写c++语言,打开dmg文件,进入usr/bin目录可以看到debugserver。这就是Xcode安装到真机中的文件

手机设备中的debugserver

在手机系统中,已经存在一个debugserver。当Xcode第一次连接手机,就会将对应版本的debugserver安装到手机系统中

进入手机的/Developer/usr/bin目录下

将手机中的debugserver拷贝到Mac电脑中

scp -P12345 root@localhost:/Developer/usr/bin/debugserver ./-------------------------debugserver 100%9505KB 33.8MB/s 00:00

将拷贝后的debugserver生成md5值

md5 debugserver ------------------------- MD5 (debugserver) = b771aad8917de2ff41feb5acfe4a9b15

找到Mac电脑中的debugserver

cd /Volumes/DeveloperDiskImage/usr/bin

将Mac电脑中的debugserver生成md5值

md5 debugserver ------------------------- MD5 (debugserver) = b771aad8917de2ff41feb5acfe4a9b15

两个文件的Hash一致,说明手机中的debugserver,就是Mac电脑中指定系统目录下的debugserver

USB启动debugserver

iPhone中开启debugserver服务

Mac电脑中的lldb连接手机上的debugserver,需要配置IP和端口号

打开x-cod,new project 在左上角file菜单那,点击new -》 target,在ios一栏界面上找到test,创建两个test

在手机中,查看debugserver命令

./debugserver ------------------------- debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.87 for arm64. Usage: debugserver host:port [program-name program-arg1 program-arg2 ...] debugserver /path/file [program-name program-arg1 program-arg2 ...] debugserver host:port --attach=<pid> debugserver /path/file --attach=<pid> debugserver host:port --attach=<process_name> debugserver /path/file --attach=<process_name>

debugserver 主机地址:端口号 –a 应用进程

由于主机地址是当前手机,可以使用localhost代替

端口号:启动server服务,开放端口,让远程的lldb通过sever调试进程

使用手机上的debugserver,附加WeChat应用

找到WeChat进程

9651?? 0:08.88/var/containers/Bundle/Application/454EA887-EB3B-43B3-ABFD-B9B2CA006981/WeChat.app/WeChat

使用debugserver附加WeChat应用

./debugserver localhost:12346-a 9651-------------------------debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.87for arm64.Attaching to process 9651...Listening to port 12346for a connection from localhost...Failed to get connection from a remote gdb process.Exiting.

遇到错误:Failed to get connection from a remote gdb process.

解决办法:使用ldid对debugserver配置权限

进入手机中debugserver拷贝到Mac电脑的目录

导出debugserver的权限ldid -e debugserver > debugserver.entitlements删除三项权限seatbelt-profiles com.apple.security.network.server com.apple.security.network.client

添加四项权限

<key>task_for_pid-allow</key> <true/> <key>get-task-allow</key> <true/><key>platform-application</key> <true/><key>run-unsigned-code</key> <true/>

修改后的debugserver.entitlements文件

导入权限文件到debugserver

ldid -Sdebugserver.entitlements debugserver手机中的/Developer/usr/bin目录,有权限问题,不能直接拷贝将debugserver拷贝到手机的/usr/bin目录,拷贝后可全局使用scp -P12345./debugserver root@localhost:/usr/bin/debugserver-------------------------debugserver 100%9544KB 35.9MB/s 00:00找到WeChat进程ps -A | grep WeChat-------------------------9727?? 0:07.27/var/containers/Bundle/Application/454EA887-EB3B-43B3-ABFD-B9B2CA006981/WeChat.app/WeChat使用debugserver,附加WeChat应用debugserver localhost:12346-a 9727-------------------------debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.87for arm64.Attaching to process 9727...Listening to port 12346for a connection from localhost...使用lldb连接debugserver

在Mac电脑上,进入lldb环境

lldb

连接debugserver

process connect connect://10.165.45.19:12346

遇到错误:error: Failed to connect port

解决办法:使用USB端口映射

修改usbConnect.sh脚本

python /Users/zang/Zang/Tools/python-client/tcprelay.py -t 22:12345 12346:12346

增加12346的端口映射

使用USB连接

usbConnect.sh ------------------------- Forwarding local port 12345 to remote port 22 Forwarding local port 12346 to remote port 12346

手机上,使用debugserver,附加WeChat应用

./debugserver localhost:12346 -a 9727

Mac电脑上,进入lldb环境

lldb

使用lldb连接debugserver

process connect connect://localhost:12346-------------------------Process9752 stopped* thread 39;com.apple.main-thread&0:0x00000001a3e740f4 libsystem_kernel.dylib`mach_msg_trap +8libsystem_kernel.dylib`mach_msg_trap:-> 0x1a3e740f4<+8>: ret libsystem_kernel.dylib`mach_msg_overwrite_trap: 0x1a3e740f8<+0>: mov x16,0x80 0x1a3e74100<+8>: retTarget0:(WeChat) stopped.

连接成功,输入c,继续运行

c-------------------------Process9752 resuming

输入process interrupt,暂停

process interrupt

使用command + w,停止WeChat附加,但不杀掉应用

class-dump

如果ipa是做了防护 只能runtime dump弄了

class-dump是一个命令行工具,最高版本为class-dump 3.5 (64 bit),已经停止更新

查看class-dump的路径

来自MonkeyDev框架

在MonkeyDev中,class-dump的使用

搭建MonkeyDev项目

在Build Settings中,将MONKEYDEV_CLASS_DUMP默认为NO

将其修改为YES

编译项目,主工程下生成Headers目录,自动导出头文件

工程目录下不要包含中文,否则Headers目录以及头文件无法生成

命令行工具

搭建自定义的命令行工具

创建App项目,命名FuncDemo

打开main.m文件,写入以下代码:

import <UIKit/UIKit.h>34;AppDelegate.h&34;参数%i:%s\n",intIndex,argv[intIndex]); } return0; }

argc:参数个数argv:参数数组编译项目,将MachO文件,拷贝到手机上scp -P12345./FuncDemo root@localhost:~/-------------------------FuncDemo 100% 150KB 5.9MB/s 00:00USB连接手机设备usb-6p.sh使用自定义命令行工具./FuncDemo -v ------------------------- 参数0:./FuncDemo 参数1:-v参数0为默认,显示当前MachO

lldb手动砸壳

逆向分析一个应用,第一步就是应用砸壳

查看MachO文件中的crypt信息otool -l WeChat | grep crypt ------------------------- cryptoff 16384 cryptsize 178356224 cryptid 0cryptid:为0表示应用已砸壳cryptoff:表示开始加密的偏移位置cryptsize:表示加密长度将应用砸壳后,才能使用class-dump导出头文件查看加壳的MachO文件USB连接手机设备,找到WeChat的沙盒路径ps -A | grep WeChat-------------------------9806?? 0:03.88/var/containers/Bundle/Application/454EA887-EB3B-43B3-ABFD-B9B2CA006981/WeChat.app/WeChat

将WeChat拷贝到Mac电脑

scp -P12345 root@localhost:/var/containers/Bundle/Application/454EA887-EB3B-43B3-ABFD-B9B2CA006981/WeChat.app/WeChat ./-------------------------WeChat 100% 184MB 39.0MB/s 00:04

查看MachO文件中的crypt信息

otool -l WeChat | grep crypt ------------------------- cryptoff 16384 cryptsize 154255360 cryptid 1

尝试不砸壳,只修改cryptid,能否使用class-dump导出头文件

使用MachOView打开WeChat

在Load Commands中,找到LC_ENCRYPTION_INFO_64,修改Crypt ID为0

使用class-dump导出头文件

class-dump -H WeChat -o ./header-------------------------2021-05-3117:59:37.344class-dump[70836:43071318] Warning: Parsing method types failed,¨...

导出失败。不砸壳,仅修改cryptid,无法导出头文件。所以砸壳的关键,并不是cryptid,而是将加密的代码段进行解密

使用lldb手动砸壳

砸壳的逻辑,从内存中,读取cryptoff位置到cryptsize长度的数据。

然后将其覆盖原始MachO文件

使用Xcode打开工程,选择设备,附加WeChat进程

获取MachO的首地址

image list-------------------------[ 0]2B07ABCB-9885-3FF1-943C-B88A763C03C50xe0000/var/containers/Bundle/Application/454EA887-EB3B-43B3-ABFD-B9B2CA006981/WeChat.app/WeChat (0xe0000)...

MachO首地址为0x1008e0000

从内存中,将加密部分的代码段,导出到WeChat.bin文件。因为已读取到内存中,相当于已解密

memory read --force --outfile ~/Downloads/WeChat.bin --binary --count 154255360 0xe0000+16384 ------------------------- 154255360 bytes written to &39;

代码段加密的开始位置:MachO首地址 + 加密偏移地址

将WeChat.bin文件,写入到MachO文件中相同位置,相当于用解密后的数据,覆盖原始的加密数据

dd seek=16384 bs=1 conv=notrunc if=./WeChat.bin of=WeChat-------------------------154255360+0 records in154255360+0 records out154255360 bytes transferred in768.025931 secs (200847 bytes/sec)

seek:从输出文件开头跳过x个块后再开始复制

bs:同时设置读入/输出的块大小为x个字节

conv=notrunc:不截断输出文件

if:输入文件名,默认为标准输入。即指定源文件

of:输出文件名,默认为标准输出。即指定目的文件

文件写入成功,将MachO文件的cryptid修改为0,成功导出头文件

Tweak修改系统行为

搭建Tweak插件,屏蔽应用的红点气泡

屏蔽应用的红点气泡,需要附加的应用是系统的桌面程序SpringBoard

USB连接手机,找到SpringBoard进程

将SpringBoard拷贝到Mac电脑

查看MachO文件中的crypt信息

xcode怎么用

otool -l SpringBoard | grep crypt -------------------------

MachO中找不到加密信息,说明SpringBoard原本就没有加壳

使用class-dump导出头文件

class-dump -H SpringBoard -o ./header

成功导出SpringBoard应用的头文件

动态调试

我们可以使用的动态调试工具有三种:

RevealCycriptlldb

使用Reveal无法动态调试,因为在手机设置页的Reveal选项中。

并没有SpringBoard应用

使用Cycript,可以成功附加SpringBoard进程,但定位红点UI,并不直观

最简单的方式,使用lldb附加SpringBoard进程,通过Debug View找到红点对象

红点对象:SBIconParallaxBadgeView

在cy环境中验证

导入自定义cy脚本

@import

com.zang.cur_vccurrentVC()#0x10145e3a0.view.recursiveDescription().toString()

在结果中搜索SBIconParallaxBadgeView

3个红点,刚好对应3个控件

选择其中一个对象,将其设置为隐藏

0x10a623710.hidden=YES

App Store上的红点被成功隐藏

在导出的头文件中,找到SBIconParallaxBadgeView.h文件

对SBIconParallaxBadgeView进行HOOK,破坏它的init方法,即可隐藏红点气泡

搭建Tweak插件

使用nic.pl→15,创建Tweak插件

在Makefile文件中,增加IP和端口

为了一劳永逸,将这两项配置在环境变量中

首先到App store下载安装Xcode这个软件,该软件比较大,下载需要时间,几十分钟到几小时都是有可能的。下载完之后不用什么配置,直接点击图标启动即可。请点击输入图片描述 请点击输入图片描述 启动Xcode后,新建立一个mac命令行。

vim ~/.zshrc export THEOS_DEVICE_IP=localhost export THEOS_DEVICE_PORT=12345

打开Tweak.x文件,写入以下代码:

%hook SBIconParallaxBadgeView-(id)init{ return nil;}%end

编译、打包、安装插件

cd reddemomakemakepackage; make install

成功安装Tweak插件,红点气泡全部隐藏

MonkeyDev搭建Tweak插件

使用MonkeyDev创建Tweak插件

项目命名:BadgeTweakDemo

BadgeTweakDemo.xm:代码

control:配置信息,版本号、作者名称等

BadgeTweakDemo.plist:附加应用的包名称

在Build Settings中,搜索Monkey,找到Tweak的设置

MonkeyDevBuildPackageOnAnyBuild:每次编译时打包

MonkeyDevClearUiCacheOnInstall:安装时清除缓存

MonkeyDevCopyOnBuild:编译时拷贝包到目录

MonkeyDevDeviceIP:设备IP

MonkeyDevDevicePassword:设备密码

MonkeyDevDevicePort:设备端口

MonkeyDevInstallOnAnyBuild:每次编译时安装

MonkeyDevkillProcessOnInstall:安装成功后杀掉的进程

设置IP和端口,同样将这两项配置在环境变量中

vim ~/.zshrc export MonkeyDevDeviceIP=localhost export MonkeyDevDevicePort=12345

开关虚拟软件盘,去掉第二个选项,就使用电脑电盘 直接拖拽电脑中的图片文件进入模拟器,图片就自动存入模拟器相册 调整模拟器的大小 自定义位置,地图定位有效 输入你需要定位的经纬度 模拟器语言设置几步步骤, 选择setting(。

打开BadgeTweakDemo.xm文件,写入以下代码:

import <UIKit/UIKit.h>%hook SBIconParallaxBadgeView-(id)init { return nil;}%end

在Build Settings中,搜索signing,设置签名

Code Signing Identity:设置为iOS Developer

编译项目时,如果遇到CydiaSubstrate.tbd的built for iOS Simulator和for architecture arm64问题,按目录找到CydiaSubstrate.tbd文件,删除里面的i386和x86_64

编译项目,成功安装Tweak插件,红点气泡全部隐藏

总结

Reveal

iOS安装插件

Mac安装App

将动态库导入iPhone

USB启动debugserver

终端附加

◦ 手机,使用debugserver 主机名称:端口 -a 进程id

◦ Mac电脑,启动lldb,使用process connect connect://主机名称:端口

◦ USB端口映射

Xcode附加

◦ 打开工程

◦ 选择设备

◦ 附加进程

debugserver权限问题

导出权限文件,查看文件

◦ ldid -e debugserver > debugserver.entitlements

删除权限

◦ seatbelt-profiles

◦ com.apple.security.network.server

◦ com.apple.security.network.client

添加权限

◦ task_for_pid-allow设置为YES

◦ get-task-allow设置为YES

◦ platform-application设置为YES

◦ run-unsigned-code设置为YES

设置权限

◦ ldid -Sdebugserver.entitlements debugserver

class-dump

class-dump -H MachO文件路径 -o 头文件路径

MonkeyDev中,可以快速使用class-dump

命令行工具

argc:参数个数

argv:参数数组

lldb手动砸壳

memory read命令

◦ 通过--outfile参数,导出文件。lldb的环境在Mac端

◦ 通过--count参数,指定导出的大小

dd命令

◦ 写入源文件

◦ seek指定偏移,也就是跳过多少开始写入

◦ conv保留没有替换的部分

Tweak修改系统行为

Reveal无法使用,在手机设置页的Reveal选项中,没有SpringBoard应用

Cycript可以使用,但定位UI不直观

lldb可以使用,最简单的方式

MonkeyDev搭建Tweak插件

在Build Settings中,配置参数

设置签名

编译项目并安装插件

上一篇 2023年01月03 22:27
下一篇 2022年12月10 07:38

相关推荐

  • 卷尺怎么看,卷尺怎么认法图解

    全球顶级的卷尺集合卷尺怎么认法图解,一般我们认为没有必要需要将有关如何使用卷尺写一篇专门的指导性文章,因为卷尺看起来好像很简单,对吧?但只有真正的专业人士才能最大限度地使用卷尺。以下是你不知道如何使用

    2023年01月12 219
  • excel表格怎么锁定,excel里怎么锁定一部分内容

    有些Excel表格不方便别人查看,有一些重要数据,或者隐私数据,可以使用下面几种方法加密1、工作簿加密推荐指数:excel里怎么锁定一部分内容,当你需要整个表格全都加密时,可在Excel选项-【信息】

    2023年02月08 273
  • 孩子学习不认真怎么办

    说到教育,来到兴智教育的父母都想孩子能够好好学习、获得一个好的成绩。但孩子不是写作业拖拉磨蹭,就是学习不自觉要人一直监督催促,甚至动不动说不想读书了的话。父母纷纷表示:要孩子自觉认真学习太难了,玩手机

    2023年01月12 284
  • 好句好段摘抄,小学生摘抄好句

    〖见字〗第640期听山河把春风酿成千言万语。优美的好句好段摘抄大全11、柔和的阳光斜挂在苍松翠柏不凋的枝叶上,显得那么安静肃穆,绿色的草坪和白色的水泥道貌岸然上,脚步是那么轻起轻落,大家的心中却是那么

    2022年12月11 217
  • 钢笔工具怎么变成选区,ps怎么将钢笔路径转化为选区

    怎么用钢笔工具抠图?抠图是我们日常处理图片常用到的功能之一,抠图工具也有很多,其中ps钢笔工具抠图就有很多人在用,不过有很多小伙伴不了解应该怎么使用,下面小编就来教大家两个抠图的具体操作方法,有需要的

    2023年02月06 237
  • 自考本科怎么报名,怎样报考成人自考大专

    自考分为大自考和小自考,二者报名的方式和途径有所区别,但注册的过程基本相同。大自考不需要通过机构,自己就可以报名。怎样报考成人自考大专,那就一定要关注当地的省考试院、省考试院的公众微信号等相关的官网平

    2023年01月16 260
  • 理想中的工作是怎样的,怎么描述理想中的工作

    “2023届高校毕业生规模预计1158万人,同比增加82万人。”这一刻,小A才突然清醒地意识到:毕业的脚步声已经越来越近了……大四生活逐渐进入尾声,身边的同学朋友们也基本选择了继续读书。不同于多数人选

    2023年01月07 238
  • 怎样培养孩子的时间观念

    掌上咸宁报道时间管理对每个人来说都是非常重要的。善于管理时间的人,总能高效地完成任务,并取得良好成果。这一点,无论对于以工作为重任的家长,还是以学习为主的孩子,无疑都是至关重要的。培养孩子的时间观念可

    2023年01月03 249
  • Fisher,Irving《The Nature of Capital and Income》作品简介与读书感悟

    图片来源@视觉中国文|洛克资本史松坡以色列以贫瘠的资源禀赋,发展出世界瞩目的创新创业文化,依靠的唯一自由资本是人。以色列政府主导设立的Yozma政策性基金,是世界目前公认最成功的政府主导型创业投资引导

    2022年12月14 223
  • 五谷丰登造句,用五谷丰登写一句话

    小学语文二年级造句练习,四字词总结,多音字组词二年级,学生对造句还不熟练,往往会漏洞百出,不是语法错误,用五谷丰登写一句话,就是没有连贯性,有时候我们看起来都觉得好笑。不妨多看多练,慢慢的熟练起来。造

    2022年12月10 295
  • 怎样看一个女孩的教养,怎样做一个有教养的女孩子

    给大家分享一个故事啊这是一位86年女生她是我的忠实粉丝三观非常正同时也是一个优秀骄傲有点强势的女人86年34岁至今未婚她告诉我的原因是我就想享受恋爱的感觉想一辈子找帅哥谈恋爱不想结婚后来看我直播久了呀

    2023年01月05 221
  • pr怎么加速

    想要调节视频进行倍速播放,你可以将视频从pr中导出来,pr怎么给视频整体加速,然后使用万兴优转的倍速播放编辑对视频进行调整,然后导出视频即可。具体的操作步骤如下:步骤1:在电脑上启动万兴优转步骤2:进

    2023年01月18 251
  • [美]托尼·瓦格纳《为孩子重塑教育》作品简介与读书感悟

    本书是由托尼·瓦格纳和泰德·丁特史密斯两位大家创作的,托尼瓦格纳简介,内容是关于他们对教育现状的看法与构想。本书分为教育的核心、教育的重任、教育的未来三部分。,不可否认,教育对一个国家、一个民族的发展

    2022年12月24 258
关注微信