秒赞网站建设,wordpress远程安装,建设网站创业,南昌网站空间如果您有耐心看完这篇文章#xff0c;您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术#xff0c;另外#xff0c;通过“入侵”#xff0c;将帮助您理解如何规避常见的安全漏洞#xff0c;文章大纲#xff1a;
简单介绍ios二进制文件结构与入侵的原理介绍入…如果您有耐心看完这篇文章您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术另外通过“入侵”将帮助您理解如何规避常见的安全漏洞文章大纲
简单介绍ios二进制文件结构与入侵的原理介绍入侵常用的工具和方法包括pc端和手机端讲解黑客技术中的静态分析和动态分析法通过一个简单的实例来介绍如何综合运用砸壳、寻找注入点、lldb远程调试、追踪、反汇编技术来进行黑客实战讲解越狱破解补丁和不需越狱的破解补丁制作方法和差别
iOS黑客关键字
iOS的入侵离不开越狱开发一切的破解、入侵都是建立在越狱的基础上的如果没有拿到系统级权限一切的想法都是空谈了当然市面上存在免越狱的破解补丁但是它的开发过程也是基于越狱环境的
tweak
在iOS的黑客界要做破解或越狱开发就必须了解tweak它是各种破解补丁的统称在google上如果你想搜索一些越狱开发资料或者开源的破解补丁代码它是最好的关键字。
iOS的tweak大致分为两种
第一种是在cydia上发布的需要越狱才能安装大部分是deb格式的安装包iOS在越狱后会默认安装一个名叫mobilesubstrate的动态库它的作用是提供一个系统级的入侵管道所有的tweak都可以依赖它来进行开发目前主流的开发工具有theos和iOSOpenDev前者是采用makefile的一个编译框架后者提供了一套xcode项目模版可以直接使用xcode开发可调试但是这个项目已经停止更新了对高版本的xcode支持不好大家酌情选择本文中的例子全部采用theos第二种是直接打包成ipa安装包并使用自己的开发证书或者企业证书签名不需越狱也可以安装可直接放到自己的网站上可实现在线安装对于没有越狱的手机由于权限的限制我们是没有办法写系统级的tweak的例如springboard的补丁是没法运行的这种tweak大多是针对某个app把目标app进行修改注入处理再重新签名和发布有点类似于windows软件的xxx破解版、xxx免注册版
没有越狱的机器由于系统中没有mobilesubstrate这个库我们有二个选择第一个是直接把这个库打包进ipa当中使用它的api实现注入第二个是直接修改汇编代码第一个适用于较为复杂的破解行为而且越狱tweak代码可以复用第二种适用于破解一些if...else...之类的条件语句
Mobilesubstrate
下面的图展示的就是oc届著名的method swizzling技术他就是iOS的注入原理类似于windows的钩子所以我们注入也称为hook Mobilesubstrate为了方便tweak开发提供了三个重要的模块
MobileHooker 就是用来做上面所说的这件事的它定义一系列的宏和函数底层调用objcruntime和fishhook来替换系统或者目标应用的函数MobileLoader 用来在目标程序启动时根据规则把指定目录的第三方的动态库加载进去第三方的动态库也就是我们写的破解程序他的原理下面会简单讲解一下Safe mode 类似于windows的安全模式比如我们写的一些系统级的hook代码发生crash时mobilesubstrate会自动进入安全模式安全模式下会禁用所有的第三方动态库
app注入原理
上面讲到了mobileloader他是怎么做到把第三方的lib注入进目标程序的呢这个我们要从二进制文件的结构说起从下面的图来看Mach-O文件的数据主体可分为三大部分分别是头部Header、加载命令Load commands、和最终的数据Data。mobileloader会在目标程序启动时会根据指定的规则检查指定目录是否存在第三方库如果有则会通过修改二进制的loadCommands来把自己注入进所有的app当中然后加载第三方库。 为了让大家看的更清楚下面我用machoview来打开一个真实的二进制文件给大家看看可以看出二进制当中所有引用到的动态库都放在Load commands段当中所以通过给这个段增加记录就可以注入我们自己写的动态库了 那么问题来了在这里插入我们自己的动态库有什么用我们自己写的代码没有执行的入口我们一样没发干坏事嗯恭喜你问到点子上了我们还需要一个main函数来执行我们自己的代码这个main函数在oc里面称为构造函数只要在函数前声明 attribute((constructor)) static 即可有了它我们就可以发挥想象力进行偷天换日干点坏事了 到这里为止我们已经知道了怎么在目标程序注入自己的代码那么我们怎么知道需要hook哪些方法怎么找到关键点进行实际的破解呢下面讲一下常见的app入侵分析方法
iOS逆向分析方法
逆向分析最常用的有三种方法1.网络分析
通过分析和篡改接口数据可以有效的破解通过接口数据来控制客户端行为的app常用的抓包工具有Tcpdump, WireShark, Charles等windows平台有fidller
2. 静态分析
通过砸壳、反汇编、classdump头文件等技术来分析app行为通过这种方式可以有效的分析出app实用的一些第三方库甚至分析出app的架构等内容常用的工具有dumpdecrypted砸壳、hopper disassembler反汇编、class_dump导头文件
3. 动态分析
有静就有动万物都是相生相克的动态分析指的是通过分析app的运行时数据来定位注入点或者获取关键数据常用的工具有cycript运行时控制台、 lldbdebugserver远程断点调试、logify追踪
Demo:微信抢红包插件 上面讲了很多原理性的东西相信大家已经看的不耐烦了下面我们一起动点真格的我们从头开始一步一步的做一个微信的自动抢红包插件当然网上可能已经有相关的开源代码了但是我这里要讲的是这些代码是怎么得出来的我么重点讲一讲分析过程
工欲善其事必先利其器
一台越狱的手机并装有以下软件 cycript dumpdecrypted debug server openssh 一台苹果电脑并装有以下软件 class_dump Theos Hopper Disassembler v3 xcode insert_dylib pp助手
寻找注入点
砸壳
首先我们要做的就是把微信的壳砸掉砸壳其实是为了把它的头文件classdump出来因为从appstore下载的app二进制都是经过加密的直接进行classdump操作是啥也看不出来的
用pp助手把dumpdecrypted.dylib文件copy到微信的documents目录ssh到手机的终端cd到documents目录中执行下面的命令进行砸壳操
xxx$ cp /usr/lib/dumpdecrypted.dylib /path/to/app/document
xxx$ DYLD_INSERT_LIBRARIESdumpdecrypted.dylib /path/to/WeChat
最后砸壳完成后会在documents目录生成砸了壳后的二进制文件用pp助手copy出来并class-dump他的头文件备用 动态分析cycript 要想实现自动抢红包我们必须找到收到红包消息的handler方法怎么入手呢我们先从界面出发进入微信的消息首发窗口 ssh进手机的终端输入ps命令查找到微信的进程id ps aux | grep WeChat
祭起神器cycript根据上一步找到的pid注入到微信的进程 cycript -p pidxxx
在cycript的终端输入这一串方法作用就是打印出当前界面的view层级cycript还有很多妙用大家可以上官网看文档这里不详细介绍 UIApp.keyWindow.recursiveDescription().toString() 最终的输出如下内容太多大家肯定看不清楚不过没关系这个不是重点这里只是展示一下打印的结果形式 我们可以随机的选取一个节点不要太靠树叶也不要太靠树根例如我选的是标红的部分把这个节点的内存地址copy出来这个内存地址就代表了这个节点的view对象ios开发的老油条们都知道通过view的nextResponder方法可以找出它所属的视图控制器ViewController所以我么在cycript的控制台中持续输入如下的命令 看到没有通过四个nextResponder方法调用我么找到了当前聊天窗口的ViewController类名他就是BaseMsgContentViewController现在我们缩小了目标范围下面我们还需要继续缩小范围要找到具体的消息处理函数才行。
动态分析Logify
要继续缩小范围就得祭起神器Logify了它是theos的一个模块作用就是根据头文件自动生成tweak生成的tweak会在头文件的所有方法中注入NSLog来打印方法的入参和出参非常适合追踪方法的调用和数据传递
现在我们根据此前砸壳后class_dump出来的头文件找到BaseMsgContentViewController在pc终端执行如下命令
logify.pl /path/to/BaseMsgContentViewController.h /out/to/Tweak.xm
输出的tweak文件大概是这个样子的 这里带百分号的关键字例如 %hook、%log、%orig 都是mobilesubstrate的MobileHooker模块提供的宏其实也就是把method swizzling相关的方法封装成了各种宏标记使用起来更简单大家想要更深入了解各种标记可以google一下logos语言
theos创建tweak
上面我们用logify生成了一个tweak代码我们要把它安装到手机上首先需要使用theos进行编译安装了theos之后在pc终端输入nic.pl 首先选择项目模版当然是tweak啦然后是项目名称、作者后面两个选项要注意
首先是bundle filter这个需要填你需要注入的目标app的bundle idMobileLoader模块会根据它来寻找你的tweak的注入目标最后是list id applications to terminate upon installation这里指定当tweak安装成功之后需要kill的进程我们要hook微信这里就填微信的二进制文件名就可以了为什么要kill 因为我么的插件是需要在app启动时加载进去的如果不重启app插件是不会生效的 最后一切都完成后在当前目录会生成下列文件 把上面logify生成的tweak文件覆盖到当前目录并用文本编辑器打开makefile文件在文件的开头增加你的ios设备的ip地址和ssh端口 最后在pc终端进入项目目录输入 make package install 命令 期间会让你输入设备的ssh密码越狱机器的默认ssh密码是alpinemake命令会生成deb安装包放在debs目录我们如果想对外发布自己的插件可以把生成的安装包上传到cydia即可
安装成功后再次进入微信的聊天界面并使用另外一个微信在群里发个普通消息连接xcode打开越狱机器控制台查看输出会发现有类似下面的输出
Jun 7 09:56:13 Administratorde-iPhone WeChat[85972] Notice: [1;36m[WxMsgPreview] [m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[BaseMsgContentViewController: 0x15e0c9a00 addMessageNode:{m_uiMesLocalID2, m_ui64MesSvrID0, m_nsFromUsrccg*675~9, m_nsToUsr1037957572chatroom, m_uiStatus1, type1, msgSource(null)} layout:1 addMoreMsg:0]
看出来了吧消息处理函数是BaseMsgContentViewController的addMessageNode:layout:addMoreMsg:方法大家可以看出方法的参数内容也打印出来了