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的安装文件,可以留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android微信支付服务端,Android 微信支付返回-1

本地服务端测试是可以拉起微信支付的,但是项目移到服务器上就不行呢?开放平台的app签名已经改了发布版的(签名是通过微信官方给的Gen_Signature_Android.apk获取的),appid没换、APP_SECRET 也没换、商户密钥key也没换,证书更没换哈…

android手机解除root,手机显示被root什么意思(手机root怎么解除)

手机root后有什么坏处?如何一键获取手机ROOT权限?在信息时代的大环境下,“黑科技”夺走了大部分的眼球,获取手机root属于所有安卓手机的最大黑科技,也是最基础的搞机技能,本篇就给大家讲解下手机root权限获…

sip 时序图_SPI总线协议及SPI时序图详解

一、SPI总线介绍SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚&…

Android11MIUI12,安卓11版MIUI12来了,3款已适配

原标题:安卓11版MIUI12来了,3款已适配现在安卓11系统第二个测试版升级更新都已经推送了,不知道各位有没有升级更新到安卓11系统体验一下新系统。不知道你的手机能不能升级安卓11系统,厂商有没有为你的手机适配安卓11系统&#xff…

简述ipython的特点 app_介绍、基本语法、流程控制

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并…

grasp设计模式应用场景_grasp设计模式笔记回顾

根据讲师所讲做了一下笔记以便自己能方便学习:------------------------------------------grasp设计模式;grasp(general responsibility assignment software patterns:通用职责分配软件模式)模式相对于gof23模式更加抽象,它的核心思想&…

html修改details范围,HTML details 标签

HTML 标签标签用于创建一个可展开折叠的元件,用户可以从中检索其他附加的信息。实例使用 元素:Copyright 1999-2011.- by Refsnes Data. All Rights Reserved.All content and graphics on this web site are the property of the company Refsnes Data.…

c# 计算圆锥的体积_用C#如何编写程序计算球,圆柱和圆锥的表面积和体积? 用C#编写方法并通过方法...

//球体表面积A4π*R^2,体积V4/3π*R^3Console.WriteLine("请输入圆的半径R");double RConvert.ToInt32(Console.ReadLine());double round 4 * Math.PI * R * R;double volume 4 * Math.PI * R * R * R / 3;Console.WriteLine("圆的的表面积是{0};…

html中如何设计对话框,用纯css3和html制作泡沫对话框实现代码

现在,泡沫对话框是一种比较流行的趋势,一般都是用html和javascript,和或者图片来实现,今天用纯css3和html来实现一些基本的简单的泡沫对话框html代码如下:复制代码代码如下:The basic bubble variantsThis only needs …

clickhouse建库_专访ClickHouse创始人:数据库竞争依旧火热,技术整合势在必行

加入「公开课」交流群,获取更多学习资料、课程及热招岗位等信息翻译|郑天祺 (Amos Bird) 中科院计算所博士整理 | 夕颜2000 年以来,随着自互联网和云计算技术变革,数据库技术从底层计算系统开始发生一次蜕变,进入了以开…

html获取此次点击的id,github项目解析(八)--Activity启动过程中获取组件宽高的三种方式...

转载请标明出处:1片枫叶的专栏上1个github小项目中我们介绍了避免按钮重复点击的小框架,其实现的核心逻辑是重写OnClickListener的onClick方法,添加避免重复点击的逻辑,即为第2次点击与第1次点击的时间间隔添加阙值,若…

minitab怎么算西格玛水平_16:三因子二水平全因子实验设计和MINITAB应用训练

16:思慧慧咨询官网――精益生产、六西格玛黑带、绿带、TRIZ创新发明、实验设计DOE、价值工程、全面设备管理(TPM)培训和项目咨询​www.sihuide.com分享地址:千聊入口1 https://m.qlchat.com/topic/details?topicId20000087131743…

sqlserver 过滤html,sqlserver 过滤掉某些字段查询剩余字段的方法

select * from syscolumns a, sysobjects b where a.object_idb.object_id and b.namedingdan and a.name not in(编号,datafilename)报错,是因为我是sqlserver2005,没有obejct_id,而是id,所以改一下是:select * from …

python写软件测试用例_Python单元测试框架unittest:单个测试用例编写步骤及实例...

一、Python单元测试框架的编写步骤导入模块必须继承unittest.TestCase主要是配置环境:进行测试前的初始化工作,比如在接口测试前面做一些前置的参数赋值,数据库操作等等定义测试用例,名字以“test”开头定义assert断言&#xff0c…

html css position,[CSS]CSS Position 详解

一. CSS position 属性介绍CSS中position属性指定一个元素(静态的,相对的,绝对或固定)的定位方法的类型。有static,relative,absolute和fixed四种取值,默认是static。二. position: staticstatic:没有定位&…

基克的聚合 机器人_重做秒变神器!基克的聚合成辅助标配

导读:7.12版本登陆国服一周有余,在这次更新中有一件装备值得我们关注。它就是基克的聚合,乍一听你可能有点不熟悉,其实它就是之前基克的先驱重做之后的产物。今天笔者就要跟大家详细说说这件装备,它在改动之后俨然成为…

win2008无法用计算机名共享,Windows Server 2008 R2中文件共享

在网上找过很多次相关资料,还是自己整理一下吧。实践了才是自己的,只看永远是别人的。服务器:Server 2008 R2(IP:192.168.1.106);客户端:Server 2008 R2(IP:192.168.1.107)一、 创建用户itjong运…

hive udf 分组取top1_Hive中分组取前N个值的实现-row_number()

背景假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩。这个就是典型在分组取Top N的需求。解决思路对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做orderby排序,然后对排序后的成绩&…

线性规划图解法求最优解_高中数学:简单的线性规划问题

1. 简单线性规划问题的有关概念先来看一道高考题:某公司招收男职员x名,女职员y名,x和y须满足约束条件,则的最大值是( )A. 80 B. 85 C. 90 D. 95(1)约束条件:变量x、y满足的一组条件,如上面高考题中的二元一…

在桌面关闭计算机关机不了怎么办,为什么我电脑按关机屏幕一直显示正在关机却一直关不了机怎么办...

“开始”-->“运行”-->键入“Regedit”-->“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\control\Shutdown子项,在右边窗口中新建一个"字符串值",命名为"FastReboot",同时将"数值数据"设为0即可。如果还不行再…