ios逆向培训,ios游戏逆向培训

http://www.itjxue.com  2023-01-21 07:07  来源:未知  点击次数: 

iOS 逆向(一)

学习了一段时间的iOS逆向工程,在此记录一下学习中的遇到的问题和知识点

iOS逆向必须要有一个越狱手机,最好是完美越狱的手机

爱思助手 或者 pp助手 中有详细的讲解,最好用ARM64位的手机,iPhone5s(以上)。

判断手机是否越狱:判断手机上是否安装了Cydia

SSH

Secure Shell的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议

使用SSH,可以把所有传输的数据进行加密,“中间人”攻击方式就不可能实现,能防止DNS欺骗和IP欺骗

OpenSSH

是SSH协议的免费开源实现

可以通过OpenSSH的方式让Mac远程登录到iPhone

在iPhone上通过Cydia安装OpenSSH工具(软件源 )

很多人会将SSH、OpenSSH、SSL、OpenSSL搞混

SSL

Secure Sockets Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密

OpenSSL

SSL的开源实现

绝大部分HTTPS请求等价于:HTTP + OpenSSL

OpenSSH的加密就是通过OpenSSL完成的

查看SSH版本(查看配置文件的Protocol字段)

客户端:/etc/ssh/ssh_config

服务端:/etc/ssh/sshd_config

SSH的通信过程可以分为3大主要阶段

建立安全连接

客户端认证

数据传输

SSH-2提供了2种常用的客户端认证方式

基于密码的客户端认证

使用账号和密码即可认证

基于密钥的客户端认证

免密码认证

最安全的一种认证方式

SSH-2默认会优先尝试“密钥认证”,如果认证失败,才会尝试“密码认证”

在客户端生成一对相关联的密钥(Key Pair):一个公钥(Public Key),一个私钥(Private Key)

ssh-keygen

一路敲回车键(Enter)即可

OpenSSH默认生成的是RSA密钥,可以通过-t参数指定密钥类型

生成的公钥:~/.ssh/id_rsa.pub

生成的私钥:~/.ssh/id_rsa

把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部

ssh-copy-id root@服务器主机地址

需要输入root用户的登录密码

ssh-copy-id会将客户端 /.ssh/id_rsa.pub的内容自动追加到服务器的 /.ssh/authorized_keys尾部

注意:由于是在~文件夹下操作,所以上述操作仅仅是解决了root用户的登录问题(不会影响mobile用户)

可以使用ssh-copy-id将客户端的公钥内容自动追加到服务器的授权文件尾部,也可以手动操作

复制客户端的公钥到服务器某路径

scp ~/.ssh/id_ rsa.pub root@服务器主机地址:~

scp是secure copy的缩写,是基于SSH登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上

上面的命令行将客户端的 /.ssh/id_rsa.pub拷贝到了服务器的 地址

SSH登录服务器

ssh root@服务器主机地址

需要输入root用户的登录密码

在服务器创建.ssh文件夹

mkdir .ssh

追加公钥内容到授权文件尾部

cat ~/id_rsa.pub ~/.ssh/authorized_keys

删除公钥

rm ~/id_rsa.pub

端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)

有些端口号是保留的,已经规定了用途,比如

21端口提供FTP服务

80端口提供HTTP服务

22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段)

更多保留端口号:

默认情况下,使用22端口进行SSH通信,采用的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi

为了加快传输速度,也可以通过USB连接的方式进行SSH登录

Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone

/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)

不一定非要10010端口,只要不是保留端口就行

端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了

新开一个终端界面,SSH登录到Mac本地的10010端口(以下方式2选1)

ssh root@localhost -p 10010

ssh root@127.0.0.1 -p 10010

localhost是一个域名,指向的IP地址是127.0.0.1,本机虚拟网卡的IP地址

usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口

远程拷贝文件也可以直接跟Mac本地的10010端口通信

scp -P 10010 ~/Desktop/1.txt root@localhost:~/test

将Mac上的 /Desktop/1.txt文件,拷贝到iPhone上的 /test路径

注意:scp的端口号参数是大写的-P

cycript 开启

cycript -p 进程ID

cycript -p 进程名称

取消输入:Ctrl + C

退出:Ctrl + D

清屏:Command + R

ps命令是process status的缩写,使用ps命令可以列出系统当前的进程

列出所有的进程

ps –A

ps aux

搜索关键词

ps –A | grep 关键词

顾名思义,它的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件

官方地址:

抖音 iOS端逆向

前言:网上关于微信逆向的文章很多,而关于抖音的就相对较少,主要原因是在逆向Hopper分析的时候,里面大多是函数调用地址,不知道具体的方法直线,笔者研究了几天之后,有些小心得与各位分享.

逆向需求:实现评论功能,模拟不同的用户评论.

开发环境:脱过壳的抖音IPA(Aweme.app), Xcode(安装MonkeyDev), Hopper(解析执行文件), 导出抖音所有头文件

1运行MonkeyDev,查看抖音的层级结构,先找到评论的控制器?AWECommentListViewController

搜索头文件,看看里面有什么有用的属性,replyComment:这个可能是回复评论时候生成的模型,model:,listManager:可能是用来处理评论逻辑的,- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2:点击发送评论,这个应该是关键方法,随便发一条评论,在该方法下一个断点,进行验证

确实来到了这个方法,而且这个方法是由? AWECommentListInputView ?这个View来调起的,猜想这个View应该是文本输入框的View,而且评论控制器实现了这个View的代理方法- (_Bool)commentInputViewShouldReturn:(id)arg1,代理方法里面调用了评论控制器的- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2方法, 所以理论上我们可以手动调用这个方法,能实现发送评论,

2在评论控制器添加一个按钮,按钮的点击事件设为- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2 这个方法,看是否能够评论成功,

验证评论可以发送成功,

3继续跟进方法调用,查看是哪个类来发送的评论请求,我们需要了解必须上送什么参数,以及请求路径. 打开Hopper 寻找突破口,搜索AWECommentListViewController userTappedSendWithContent,找到三个可疑的方法,点进去跟进

实现这三个方法,分别打入断点,运行Xcode,当发送一条评论时,会进到-sendCommentContent 这个方法,进到这个方法里面,看到一条有用信息

点进这个方法,发现一个熟悉的味道?AWECommentListManager,方法是属于它的,还记不记得在文章开始的那个listManager,就是它,惊不惊喜,还原成控制器的调用就是 [self.listManager?commentWithContent:?replyId:?replySubCommentID:?replySubCommentAuthorID:?extraInfo:?referString:?completion:], 顺藤摸瓜,继续往下走,最终跟进到+(void)commentAwemeItemWithID:(void *)arg2 content:(void *)arg3 replyCommentID:(void *)arg4 replySubCommentID:(void *)arg5 extraInfo:(void *)arg6 sticker:(void *)arg7 referString:(void *)arg8 completion:(void *)arg9 这个方法之后,就无法再跟进了;于是转换思路,看看listManager里面会不会调用其他方法,我的做法是将里面的所有方法都打上断点,来到了_cmd 对应的这个方法,看到了传入的那个字典,aweme_id 是评论的id,就是你当前刷的这条抖音,text是我评论的内容,""是发送端口路径.

在调试过程中,我发现评论完的请求发送完成之后,又会发一个交易,通过

看到了一个关键词heartbeat,当我定在这个断点,会发现评论会失败,这应该是抖音的某种机制,这个心跳包如果不对,那么你的评论就会失效.

4思路:(1).发送评论肯定得知道用户的信息,比如userid,昵称,头像路径,这样才能区分是谁发的评论,找到这个";pass-region=0pass-route=0js_sdk_version=1.43.0.1webcast_sdk_version=1330app_name=awemevid=019C3DD5-08D3-49B6-AF5B-939154B6B148app_version=9.2.0language=zh-Hans-USdevice_id=40613784883channel=ppmcc_mnc=46011aid=1128effect_sdk_version=5.8.0screen_width=414openudid=02a6db71a7ae780f226b95032b116da6852f13e8webcast_language=zhos_api=18ac=WIFIos_version=12.4.6webcast_locale=zh-Hans_CNdevice_platform=iphonebuild_number=92013iid=110910203440device_type=iPhone%206%20Plusidfa=25D32F6D-CBC3-42E9-9A7C-2D72277497D4", ? 它是一个POST请求 请求参数 就是aweme_id=6812025407865425166channel_id=0text=%E4%BD%A0%E8%AF%B4%E7%9A%84%E5%AF%B9,这三个,接下来就得看请求头里面有没有我们需要的信息,只有iid=110910203440这个参数比较可疑,

5查看一下评论的模型信息,点进个人主页,查看userId的格式是怎么样的---待续...

iOS逆向工程(4)SSH免密码连接iPhone

先摘抄一段简单介绍:

安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。SecureShell,又可记为SSH,最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。

在我理解就是类似Windows 系统上面的Telnet,但是SSH相对于Telnet的一个重要优势就是所有传输都是经过加密的。

在iOS中我们使用OpenSSH软件。

OpenSSH原是一个在Linux下很实用的一个软件。iPhone本身就是一个运行BSD系统(可认为是一种Liunx)的硬件,因此,Cydia的作者Saurik把OpenSSH这一软件移植到了iOS平台上,并且简化了安全认证密钥的繁琐,使之成为一款可以在iPhone上运行的Cydia插件。

在iOS的系统管理中,多半是使用命令行。在远程管理中,多半是用OpenSSH通过Wi-Fi或者3G来对iPhone、iPad、iPod Touch执行命令修改文件等操作。

OpenSSH用途是在PC或者Mac上远程输入命令操作iOS设备,免去使用MobileTerminal,同时,也是一种在多系统下管理iPhone、iPad系统文件的方法。

连接到iPhone后可以执行各种UNIX命令,比如文件操作,拷贝删除,等等很多用途。

如果没有配置SSH免密码连接,那么我们在连接SSH的时候就会提示输入密码,每次都要输入很麻烦,比如:

1,如果本人是做iOS开发的,项目用到了GIT版本控制,一般都配置SSH密钥了。密钥已经存在了电脑的./ssh目录中,如果没有配置,那么可手动重新生成SSH密钥,比如:

ssh-keygen -t rsa -b 4096 -C "zhangdasen@126.com"

2,生成完成后,我们会在./ssh目录中发现id_rsa.pub公钥这个文件。

然后我们把它copy出来放到个人目录下,并重命名,比如:

cp /Users/zhangdasen/.ssh/id_rsa.pub ~/authorized_keys

3,我们手动SSH进入设备中,或者通过PP助手进入设备中,查看是否存在var/root/.ssh目录,如果没有,我们手动创建下。可通过SSH连接后mkdir创建,或者PP助手连接后创建。

4,创建后我们把authorized_keys拷贝到设备中,可利用SCP命令:

scp ~/authorized_keys root@10.10.245.208:/var/root/.ssh

5,然后按正常我们就可以直接SSH连接的时候不用输入密码了,如图:

6,这个时候,如果我们使用tweak打包时候,也不会再让我们输入SSH密码了。

下一篇: iOS逆向工程(8) 一条命令砸壳(详细菜鸟版)

iOS-逆向22-砸壳

应用加壳(加密)

提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)

应用砸壳(解密)

静态砸壳

静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术

动态砸壳

动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。

Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用。

otool -l QQ,查看可执行文件QQ结构

越狱插入,不污染三方应用的插件

非越狱的注入

Github开源工具。 dumpdecrypted这个工具就是通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。

该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件。

解决办法

遇到警告,sudo后面加-H

进入/opt/MonkeyDev/bin目录执行frida-ps列出所有进程

frida-ps -U此时列出USB连接的进程

frida的作用:

/opt/MonkeyDev/bin下直接进入具体应用

frida -U 微信

报错是因为我的手机里面安装了一个正版微信,一个砸壳微信

frida -U 支付宝,前提是支付宝在前台运行,可正常进入,并能执行frida语句,语法见 官网 doc

解决办法是将dump.py中的python改为python3,python版本是2改为python2,是python3就改为python3,通过python --version查看当前版本

scp -P 12345 .inputrc root@localhost:/var/root/

谈谈iOS逆向

从业iOS后,也算兢兢业业,平时关注一些OC,swift动态,看别人造的完美轮子来学习,而自己造的轮子和自己做的饭有相同功效,只有自己能吃的下去。然而这并不是重点,重点是自己一直忽略的ios黑产,其实依然一片繁荣。

最近会帮朋友搞一些ios破壳和逆向、外挂的功能,也算是涨了见识。下面列举一些常见的黑产需求:

杂谈:

时间久了,到现在记得的一些逆向过程中印象比较深的事情。

游戏启动的时候要验证授权,没有授权直接kill。

程序启动的时候,有6、7个方法判断是否是越狱手机,是越狱手机kill,加大逆向成本。

修改程序中的所有连接域名,换壳。

还有逆向的较量,别人加的外挂防破解,而你又要去破解他的外挂,逆向之防逆向。

最近的需求时在别人破解过的包中再次破解。

原始App是一个保险销售使用的销售软件,被人破解,加入随时随地指定坐标打卡。但是加了一个授权码,收费使用。

而我的需求就是在已破解的情况下,再次绕过授权码。

通过抓接口,找到验证接口域名,然后确定是每个动态库 的作用。(以为是已经破解的,所有 framwork 目录下已经有了5,6个自定义的dylib)。

如下:其中真实名字已隐藏,毕竟搞别人的app不太地道。

经确定控制验证的库为 custom3.dylib,然后用hopper找验证函数。

其中 !@#$*@#(!@^#(!@^#(!@^# 为key,我就想着直接在启动时写入正确的激活码就可以了。但是并不是一帆风顺,key其实和设备有绑定关系,这个被我忽略了,走了挺多弯路才知道。所以我还需要修改设备的标示,继续找。

额,然后在想办法在 UUIDManager getUUID 返回已经绑定过的UUID就可以。

这个算是通过了。但是要有一些dylib打包的错误。这个都是小问题了。

如果是做ios开发的话,对逆向有了解的话,对开发和安全都会有提高,比如上面的key就可以不用写成明文。

iOS 逆向----otool命令入门

首先可以拿自己的ipa包进行尝试。

选择你的ipa包,然后把后缀名改为zip,解压缩得到Payload文件夹,里面就是你的APP。

打开终端,直接cd到你的xxxx.app目录下。具体做法,输入cd,然后把xxxx.app直接拖到终端里打个回车。

然后输入otool,会显示如下内容:

有兴趣的同学可以仔细研究一下每个命令是干吗用的,这里介绍几个常用命令:

可执行文件的名称可以右键xxxx.app文件,选择显示包内容,然后找到里面的exec文件,把名字打进去。一般来说这个文件的名字跟xxxx是一样的

然后奇迹就出现了。。。

是不是很熟悉?这个命令列出了你使用的所有库的名字。

查看ipa包是否加壳:

其中cryptid代表是否加壳,1代表加壳,0代表已脱壳。我们发现打印了两遍,其实代表着该可执行文件支持两种架构armv7和arm64.

这里给大家推荐一个自动化检测的神器:

MobSF

根据Document的提示自行研究一下吧。

(责任编辑:IT教学网)

更多

推荐其他营销文章