ios重签名shell脚本_iOS逆向——shell重签名及代码注入
感谢hank老师
上一章我们讲了应用签名原理和重签名原理,不再赘述,没有看过的同学可以点这里——
这章概述shell脚本重签名。可能有的同学认为有很多工具都能快速的帮助我们重签名实现需求,但我更希望在这里与大家沟通原理性的东西,而不是简单的使用第三方工具来满足我们。
shell脚本
什么是shell脚本?
shell是一种特殊的交互式工具,它为用户提供了启动程序、管理文件系统中文件以及运行在系统上的进程的途径。Shell一般是指命令行工具。它允许你输入文本命令,然后解释命令,并在内核中执行。
Shell脚本,也就是用各类命令预先放入到一个文本文件中,方便一次性执行的一个脚本文件。
脚本执行相关命令
$source FileName 复制代码
意思:在当前shell环境中读取并执行FileName中的命令
特点: •命令可以强行让一个脚本去立即影响当前的环境(一般用于加载配置文件)。
•命令会强制执行脚本中的全部命令,而忽略文件的权限。
$bash FileName 、 $zsh FileName复制代码
意思:重新建立一个子shell,在子shell中执行脚本里面的句子。
$./FileName复制代码
意思:读取并执行文件中的命令。但有一个前提,脚本文件需要有可执行权限。
下面来点干货,脚本重签名的源码。网上搜也有很多,大家开心就好。不知道为什么,我写在bash后,代码格式总乱,大家可以找到其他文献源码,这里我贴图
如果你想要简单的了解shell,参考Andy哥的文献。共三篇文章,简明粗暴易懂。
用户、组、权限
Unix和Linux都是多用户、多任务的系统,所以这样的系统里面就拥有了用户、组的概念。那么同样文件的权限也就有相应的所属用户和所属组了。
Mac文件属性
↑
[ 权限 ]
[连接][所有者]
[所属组] [文件大小][最后修改日期][文件名称]
第一位:文件类型
常见:[d]目录(dictionary)
[-]文件
后九位,文件权限,每三位一组,第一组:文件所有者的权限 rwx
第二组:这一组其他用户的权限 r-x
第三组:非本组用户的权限 r-x
文件权限
[r]:read,读
[w]:write,写
[x]:execute,执行
注意:这三组权限的位置不会变,依次是rwx,出现[-]对应位置,代表没有此权限
改变权限:chmod
文件权限的改变使用chmod命令。设置方法有两种:数字类型改变
和
符号类型改变。
由于文件权限分为三种身份:[user][group][other] 三个权限:[read]
[write]
[execute]
数字类型:
各个权限数字对照:r:4
w:2 x:1
如果一个文件权限为 [–rwxr-xr-x ]
User :
4+2+1 = 7
Group: 4+0+1
=
5
Other: 4+0+1
=
5
命令:chmod
755
文件名
符号类型:
chmod [u、g、o、a] [+(加入)、-(除去)、=(设置)]
[r、w、x]
文件名称
[a]代表all,[a]=[u+g+o],在我们加入权限的时候,没有添加身份,默认为[a]
代码注入
一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的方式注入。
在这里我们先简单介绍一下DYLD,Dynamical Load,又叫动态链接器,存在于操作系统中。在手机开机的时候,该程序就默认启动。DYLD在手机内存中执行,CPU调度DYLD,DYLD就会把加载的应用(MacO)加载到内存中去。当DYLD读取MacO文件的时候,首先就会读取Load Commands字段,该字段包含了Foundation \UIKit等库,例如我们在调用NSLog函数,一定会到Foundation这个库中调用,但是谁知道Foundation这个库的真实地址,DYLD。如果依赖的库不再内存当中,所以就加载该库。
所以,我们要在Load Commands中插入一个我们自己写的Framework。
注入步骤
用MacOview查询ipa文件夹下包内容的二进制文件,查看Load Commands。
Framwork注入
• 通过Xcode新建Framwork,将库安装进入APP包
• 通过yololib注入Framwork库路径。命令:$yololib(空格)MachO文件路径(空格)库 路径
yololib WeChat Frameworks/xxxxHook.framework/xxxxHook //库加载到MachO中Load Command下的LC_LOAD_DYLIB中复制代码
• 所有的Framwork加载都是由DYLD加载进入内存被执行的
• 注入成功的库路径会写入到MachO文件的LC_LOAD_DYLIB字段中
然后将成功注入后的二进制文件替换掉前文提到的TARGET_IPA_PATH下的二进制文件。
保留Payload文件夹,压缩Payload。
zip -ry WeChat.ipa Payload复制代码
最后生成的ipa,用重签的方式可以安装到手机。Dylib注入
• 通过Xcode新建Dylib库(注意:Dylib属于MacOS所以需要修改属性)
• 添加Target依赖,让Xcode将自定义Dylib文件打包进入APP包。
• 利用yololib进行注入。
两种方式都可以实现代码的注入。如果我哪里写的不对、不清楚,还希望你能提出来,我们共同探讨进步,如果你喜欢此文章,就动一动小手点个赞吧。
想要yololib和MachOview的安装文件,可以留言。
ios重签名shell脚本_iOS逆向——shell重签名及代码注入相关推荐
- php shell脚本怎么写,Shell脚本编程入门
一.什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do tou ...
- 【跟晓月学shell脚本】掌握shell脚本变量实战案例
前言 上篇文章我们探讨了shell脚本变量的基本原理和概念,本篇我们基于上面的内容增加一些实战. 如果你还没有学习shell脚本的变量理论,可以点击链接:[跟晓月学shell脚本]掌握shell脚本变 ...
- 【跟晓月学shell脚本】掌握shell脚本变量原理及概念
前言 跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难. 想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇 文章目录 前言 ...
- Shell脚本,循环语句用于减少程序代码冗余和重复,for语句,while语句,使用let进行变量自增
Shell脚本,循环语句用于减少程序代码冗余和重复,for语句,while语句 一.for语法: 1. for 变量 in 值列表 do 命令序列 done 例子:输出循环中的所有值 for i in ...
- ios重签名shell脚本_IOS应用重签名(三种方法)
终端命令(相关的一些指令) •$security find-identity -v -p codesigning列出钥匙串里可签名的证书 •$Codesign–fs"证书串"文件名 ...
- shell脚本实现文件改名/重命名
shell脚本实现文件改名小操作, 在此做一记录. #!/bin/bash #将数据文件.SAC名改为'<sta>.[N/E/Z].SAC' #例如2014.143.20.49.21.00 ...
- Linux Shell脚本 - 什么是Shell
前言 笔者也是刚接触Linux,很多概念也是一边查资料一边摸索着理解,下面有一些专业性的术语是来源于网络资源. 一些概念笔者本人也还理解得比较模糊,看似简单的东西,深入发掘也会发现并不简单,很多概念都 ...
- linux shell脚本 引入外部shell文件
shell脚本 引入文件 文件包含的语法格式如下: # 注意点号(.)和文件名中间有一空格 . filename # 或 source filename 实例: [root@hadoop01 shel ...
- shell在二级python_在python下运行时在shell脚本之间传递shell变量[duplicate]
使用 shell=True 首先,就 --如果你在使用 外壳=真 ,您可以告诉开始运行未经修改的现有脚本内容的shell. 也就是说--如果你最初这么做的话: subprocess.Popen(['y ...
最新文章
- Visual Studio 2010 and .NET 4 RTM中文版发布
- vlan之间互相访问_VLAN的划分和网络的配置实例
- -----------最小生成树----------------
- 如何用crontab每隔1分钟执行一个命令行脚本
- php数据库数组去重复数据库,PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)...
- 单例模式及C++实现代码
- mysql-5.7.13-winx64如何安装_mysql 5.7.13 winx64安装配置方法图文教程
- 浅谈XSS攻击的那些事(附常用绕过姿势)
- PropertyGrid中的枚举显示为中文(转)
- sql语句查询优化总结,建议及写法技巧(汇总)
- 【经典】MIT人工智能实验室: 如何做研究?
- mySQL及可视化界面navicat在window的配置
- 分享10种用户点击率高的汽车软文标题公式
- php好趣网抓取_PHP抓取卫视直播源
- 威纶通触摸屏如何在报警的同时,显示出异常数据的当前值?
- pycharm-professional-2020.1下载与激活
- 用python玩转数据Python便捷数据获取与预处理 quiz
- 一文必懂-深入理解Automatic、CAS、Unsafe类
- 塔望食业洞察丨中国清酒市场消费调查、发展趋势、品牌策略分析
- 单片机C51 - 串行通信原理及串口编程实验
热门文章
- oracle session_wait,转载:学习Oracle动态性能表-(8)-V$SESSION_WAIT,V$SESSION_EVENT
- matlab向量归一化_已知近似的特征值,求特征向量
- wcf获取MySQL中午乱码,如何启用WCF日志记录,以便它写入数据库?
- cpu开核_新锐龙让AMD重返巅峰,但逆袭的50年里这些CPU也不应忘记
- python+OpenCV图像处理(五)图像的阈值分割
- ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行
- PyTorch框架学习十六——正则化与Dropout
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 19丨行转列【难度中等】​
- 《算法小白历险记》3.最长公共前缀【python-简单】
- 开源数据分析工具 CyberChef