教你如何动态调试iOSApp(反编译App)

十年网站开发经验+多家企业客户+靠谱的建站团队

量身定制+运营维护+专业推广+无忧售后,网站问题一站解决

通过本文你能了解iOS逆向的基本知识,对iOSApp的安全有一定了解。然后能举一反三,在自家App找到危险漏洞加以预防,保证用户数据安全。

在安全领域,攻与防永远存在。哪怕是iPhone有着强大的安全防护机制,也挡不住那些极客们一次又一次的好奇,开发了很多强大且便利的工具。本文就是在这些极客们提供的工具的基础上完成的!

按下Option键,同时点击Mac菜单栏上的无线网Icon,能看到当前电脑的IP地址。或在终端输入ifconfigen0也可查看。

保证手机和电脑在同一WIFI下,在手机上,点击“设置->无线局域网->连接的WiFi”,设置HTTP代理:

端口:8888

在电脑端,打开Charles。使手机发生网络请求,Charles会弹出一个询问的对话框

点击“Allow”允许,Charles会出现手机的HTTP请求记录列表。

安装SSL证书到手机设备。点击Help->SSLProxying->InstallCharlesRootCertificateonaMobileDevice

出现弹窗得到地址chls.pro/ssl

在手机Safari浏览器输入地址chls.pro/ssl,出现证书安装页面,点击安装,手机设置有密码的输入密码进行安装

Charles设置Proxy。选择Proxy->SSLProxyingSettings...

勾选EnableSSLProxying,点击Add

Host设置要抓取的HTTPS接口,Port填写443。

让手机重新发送HTTPS请求,可看到抓包。

注意:不抓包请关闭手机HTTP代理,否则断开与电脑连接后会连不上网!

从AppStore直接下载的ipa,苹果公司对其做了FairPlayDRM技术进行加密保护,无法直接使用class-dump工具获取头文件。但是如果是通过development打包出来的话的App的话,是可以直接使用class-dump查看所有头文件的,此部分介绍就是通过此情况来说明如何获取.h文件的。

此处不再介绍class-dump工具的安装过程,具体步骤请直接百度。

进入到appName.ipa所在目录,修改扩展名为.zip,然后解压文件,得到appName.app。

然后执行:

class-dump-HappName.app-o./headers/

命令执行完成后,会在当前目录下的headers目录里看到app所有头文件。

如果添加参数-A-S会在头文件里标记处类方法和属性的IMP地址(模块偏移前基地址)。

class-dump-H-A-SappName.app-o./headers/

在你的越狱手机上使用Cydia应用市场安装OpenSSH,并保证Mac和iPhone处于同一个WIFI下,在MAC终端输入:

sshroot@IP,IP替换为iPhone的IP地址

输入默认密码:alpine

即可进入iPhone终端。

取得debugserver有两种方式。

进入路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.3/DeveloperDiskImage.dmg(其中路径里8.3,代表iOS系统版本,需与准备的越狱手机系统版本保持一致)。双击DeveloperDiskImage.dmg,将目录里的usr/bin/debugserver复制到指定文件夹中。

如果手机连接过手机并通过XCode调试过app,会在手机里的/Developer/usr/bin/目录下生成一个debugserver文件。通过iFunbox导出至Mac桌面。或使用scp命令cpoy出来。

重签名debugserver

即给debugserver添加task_for_pid权限

创建entitlements.plist,添加如下四个key:

com.apple.springboard.debugapplicationsget-task-allowtask_for_pid-allowrun-unsigned-codekey对应的value都设为设为ture

将entitlements.plist和debugserver放在同一个目录下,执行以下命令:

codesign-s---entitlementsentitlements.plist-fdebugserver

此命令会重新签名debugserver,将签名后的debugserver拷贝至手机系统的/usr/bin/目录下。

注意:不要将debugserver拷贝至/Developer/usr/bin/路径下

通过命令Clutch-i,列出所有的可被Clutch的应用。

使用上文【拿到.h头文件】介绍的方法拿到脱壳后的App头文件和并记下要打断点的方法的IMP地址。

本文动态调试用到的调试器是lldb。

进入/usr/bin/执行./debugserverIP:port-aPID|appProjectName。其中第一个参数IP可以替换为Mac电脑IP地址,或者使用*通配符,允许所有IP调试;第二个参数port随便写一个就行。第四个参数可以指定要调试App的PID或项目名称。比如要调试的PID为6019的搜狗输入法项目名称为SogouInput,则命令即为:

./debugserver*:1234-a6019或./debugserver*:1234-a‘SogouInput’

此命令执行完成后,app会进入等到挂载状态,app会被卡住点击无反应。正常现象!

如果此命令报错,如出现Segmentationfault:11等情况,说明App做了反动态调试保护。遇到此种情况,需先确定App采用了哪种保护方案,然后进一步找到对应措施,干掉它的反动态调试保护。

重新打开一个Mac终端执行lldb进入lldb调试状态。然后输入

processconnectconnect://iPhoneIP:port

iPhoneIP替换为iPhone的IP地址;port改为刚才指定的端口,即1234。

待命令执行完成后,App即进入挂载状态。

ASLR偏移量其实就是虚拟内存的地址相对于模块基地址的偏移量。有两个概念需要熟悉一下:

在lldb调试器模式下,执行imgelist-o-f

模块偏移后的基地址=ASLR偏移量+模块偏移前基地址(方法的IMP地址)

上面这个公式是尤为重要的,因为Class-dump中显示的都是“模块偏移前基地址”,而lldb要操作的都是“模块偏移后的基地址”。所以从Class-dump到lldb要做一个地址偏移量的转换。

至此,已得到了App的ASLR偏移量和方法的IMP地址。

在lldb模式下执行,brs-a'ASLR偏移量+IMP',然后执行c,使App跑起来,触发一个方法调用,就会进入断点模式。输入po$arg1打印第一个参数。

然后,配合着抓包工具Charles(比如分析网络请求加密逻辑)和Class-dump(比如修改某个类的方法返回值)等工具,你就可以随意动态调试App了,就像在XCode里调试一样!

br命令说明

brdis1--禁用(disable)编号为1的断点

bren1--启用(enable)编号为1的断点

brdis--禁用所有断点

bren--启用所有断点

brdel1--删除(delete)编号为1的断点

brdel--删除所有断点

brlist--列出所有断点

dumpdecrypted脱壳工具的原理是:将应用程序运行起来(iOS系统会先解密程序再启动),然后将内存中的解密结果dump写入文件中,得到一个新的可执行程序。

在终端进入到下载后的目录中,cddumpdecrypted-master,然后执行make,即可生成dumpdecrypted.dylib

将第一步生成的dumpdecrypted.dylib拷贝到第二步得到的.../Documents/路径下,命令如下:scp~/dumpdecrypted.dylibroot@IP:/var/mobile/Containers/Data/Application/2B4C6281-C015-4FF3-A8EC-5E5C7554D447/Documents(将路径里的UDID替换为你的要破壳的App的UDID)

进入Documents目录下,执行DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib/var/mobile/Containers/Bundle/Application/BFED82A3-3238-4F41-B797-C1CB584CBE05/appProjectName.app/appProjectName(将路径里的UDID替换为你的要破壳的App的UDID;将appProjectName替换为要破壳App的项目名称)

待命令执行完,会在当前目录生成一个名为appProject.decrypted的文件,这个就是破壳后的App可执行文件,要的就是它!使用Class-dump即可得到头文件。或使用Hopper或IDAPro进行反编译。

为了方便应用软件的开发和调试,从Unix的早期版本开始就提供了一种对运行中的进程进行跟踪和控制的手段,那就是系统调用ptrace()。通过ptrace可以对另一个进程实现调试跟踪,同时ptrace还提供了一个非常有用的参数那就是PT_DENY_ATTACH,这个参数用来告诉系统,阻止调试器依附。

所以最常用的反调试方案就是通过调用ptrace来实现反调试。

当一个进程被调试的时候,该进程会有一个标记来标记自己正在被调试,所以可以通过sysctl去查看当前进程的信息,看有没有这个标记位即可检查当前调试状态。

检测到调试器就退出,或者制造崩溃,或者隐藏工程,当然也可以定时去查看有没有这个标记。

为从实现从用户态切换到内核态,系统提供了一个系统调用函数syscall,上面讲到的ptrace也是通过系统调用去实现的。

在KernelSyscalls27这里可以找到ptrace对应的编号。

26.ptrace801e812cT

所以如下的调用等同于调用ptrace:

syscall(26,31,0,0,0);

arm

syscall是通过软中断来实现从用户态到内核态,也可以通过汇编svc调用来实现。

THE END
1.一键解锁!最新苹果固件高速下载指南简报在数字时代,苹果固件下载成为了众多苹果设备用户不可或缺的一部分。固件,作为嵌入在硬件中的软件,扮演着至关重要的角色,它不仅决定了设备的性能表现,还关乎用户体验与安全。每当苹果公司发布新的固件更新,总能引发广大用户的热烈关注与讨论。这些更新往往包含了性能优化、安全漏洞修补、新功能添加等内容,使得设备能够保持http://www.dlzdag.cn/post/35.html
2.包含黄鸟抓包拼多多砍价的词条抖音资讯以下是黄鸟抓包破解卡密教程的润色与修正工具准备 设备iPhone 12 操作系统iOS 1481 软件黄鸟抓包版本 操作步骤1 首先,打开黄鸟抓包软件输入一些数字作为测试,即使界面提示密码错误,也请忽略此提示2 进入软件后,找到之前提示卡密错误的那个数据。 1点击右上角的三条杠2然后点击设置3之后就在设置里面添加抓包的目标或者http://wap.hdlgy.com/post/11156.html
3.阴阳师iOS不越狱系统虚拟定位设置教程:轻松实现游戏位置修改指南* 修改完毕后,点击左上角的“保存”按钮。 三、恢复数据并测试 1、恢复修改后的备份: * 回到爱思助手的“备份/恢复”界面。 * 选择“全恢复数据”,在列表中找到刚才修改的备份文件,点击“立即恢复”。 * 等待恢复过程完成,然后断开设备与电脑的连接。 http://by.douxingren.cc/yxzx/44086.html
4.在AppleConfigurator中编辑设备信息选取“操作”>“修改”>“设备名称”。 按住Control 键点按所选设备,然后选取“修改”>“设备名称”。 如有需要,从命名选项弹出式菜单中选择命名变量,然后添加你自己的字母数字字符。 点按“重新命名”。 更改设备的墙纸 在Apple Configurator中,打开设备窗口,然后选择要更改墙纸的一个或多个设备。 https://support.apple.com/zh-cn/guide/apple-configurator-mac/cadbf9c2a0/2.17/mac/14.0
5.需求所需第三方库requests简介安装实战教程打开实战教程 打开网站 fanyi.so.com/# 进入网站之后鼠标右击检查,或者F12来到控制台,点击网络,然后刷新。 抓包 点击网络刷新之后,在点击Fetch/XHR,随意输入一个单词,点击翻译会发现出现一个数据包,这个数据包就是我们所需要的。 点击这个数据包,然后点击标头,这里就有我们所需要的请求网址 https://article.juejin.cn/post/7406512341112487946
6.iphoneUDID读取方法资源PHP开发的UDID全自动签名工具源码支持任意api签名,不丢失证书。 浏览:139 5星 · 资源好评率100% PHP 开发的UDID全自动签名工具源码 支持修改老版本重复提交UDID不显示回调等回调 回调做了防抓包偷取 ipa 直接调用本地网站 增加后台登录日志功能 自动识别重签名udid,已经修复多抓包漏洞 支持多应用批量签名 https://download.csdn.net/download/sxccxz/6905181
7.苹果试玩无限刷技术之还原广告标识符教程,简单实用的无限试玩方法严格来说,还原广告标识符(IDFA)并不算是苹果试玩的无限刷技术,但它同样能达到无限刷的目的,而且是简单有效又安全的方法。严格的无限刷技术涉及到抓包、软改udid、跳码跳验证等一系列操作,目的是让一台手机不断变换身份,在试玩平台眼里成为一台新设备。彻底的无限刷不仅工序多,也极易封号,还需要配置足够多的账号进https://wanzhuanapp.com/info/66.html
8.Wireshark抓包iOS入门教程网络抓包是个基础技能,对于网络协议的掌握有一定的要求。iOS上实现网络抓包可以用Charles(针对http和https),tcpdump(快速分析网络包),和Wireshare。之前写过一篇介绍tcpdump抓包的入门文章,和tcpdump相比,Wireshark提供丰富的GUI交互,而且能分析所有的网络协议,关键还是免费的,掌握好Wireshark就能应付绝大部分需要分析网络https://www.jianshu.com/p/c67baf5fce6d
9.PHP开发的UDID全自动签名工具源码修改老版本重复提交UDID不显示回调等回调 回调做了防抓包偷取ipa直接调用本地网站 增加后台登录日志功能 自动识别重签名udid,已经修复多抓包漏洞 支持多应用批量签名 1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除! http://www.ylcom.net/2083.html
10.邓白氏编码(dunsnumber)申请以及填写方法苹果公司开发者账号注册流程详解 首先介绍下个人开发者账号、团体账号、公司账号之间的区别: 用途 限制 是否需要邓白氏码费用(元)申请地址个人开发者账号用于个人开发者上传和应用,在apptore上显示个人开发者信息。 1.只能有一个开发者; 2.100个IOS设备UDID测试否688http://developer.apple.com/programs/ios/团体账号用https://www.pianshen.com/article/89621067591/
11.PHP开发的UDID全自动签名工具源码修改老版本重复提交UDID不显示回调等回调回调做了防抓包偷取ipa直接调用本地网站增加后台登录日志功能自动识别重签名udid,已经修复多抓包漏洞支持多应用批量签名 PHP开发的UDID全自动签名工具源码插图 PHP开发的UDID全自动签名工具源码插图(1) PHP开发的UDID全自动签名工具源码插图(2) www.husohua.com.https://weibo.com/ttarticle/p/show?id=2309404629854296604883
12.PHP开发的UDID全自动签名工具源码/支持任何api签名+不掉证书+支持应用分类后台直接添加编辑 激活码权限可以选择对应分类生成 后台支持导入授权码 一键上架下架功能 修改老版本重复提交UDID不显示回调等回调 回调做了防抓包偷取ipa直接调用本地网站 增加后台登录日志功能 自动识别重签名udid,已经修复多抓包漏洞 支持多应用批量签名https://www.zztuku.com/detail-5928.html
13.iOS下一键调试Push的方法详解IOS第二步,创建虚拟网卡以便抓包 我们只需要将上面提取的设备 udid 作为参数传人创建网卡命令: 1 system_profiler SPUSBDataType | sed -n -E 's/Serial Number: (.+)/\1/1p' | xargs rvictl -s 执行完上述命令,应该能看到如下输出: 1 Starting device 198a630825ee39496411dc3e323039f2947fa16f [SUCCEEDEDhttps://www.jb51.net/article/136644.htm
14.wireshak手机抓包wicap手机抓包教程方法一、在Mac电脑使用wireshark抓包。(可以抓WIFI、4G、3G) 1.使用USB数据线将iOS设备连接到MAC上 2.点击ituns,查看复制UDID(重点是获取手机UDID,用什么工具获取不重要) 3.使用MAC命令行输入rvictl –s (注意命令里面的空格) 4.打开wireshark开始,点击相应网口,开始捕获。https://blog.51cto.com/u_16213676/10584082