感谢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重签名及代码注入相关推荐

  1. php shell脚本怎么写,Shell脚本编程入门

    一.什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do tou ...

  2. 【跟晓月学shell脚本】掌握shell脚本变量实战案例

    前言 上篇文章我们探讨了shell脚本变量的基本原理和概念,本篇我们基于上面的内容增加一些实战. 如果你还没有学习shell脚本的变量理论,可以点击链接:[跟晓月学shell脚本]掌握shell脚本变 ...

  3. 【跟晓月学shell脚本】掌握shell脚本变量原理及概念

    前言 跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难. 想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇 文章目录 前言 ...

  4. Shell脚本,循环语句用于减少程序代码冗余和重复,for语句,while语句,使用let进行变量自增

    Shell脚本,循环语句用于减少程序代码冗余和重复,for语句,while语句 一.for语法: 1. for 变量 in 值列表 do 命令序列 done 例子:输出循环中的所有值 for i in ...

  5. ios重签名shell脚本_IOS应用重签名(三种方法)

    终端命令(相关的一些指令) •$security find-identity -v -p codesigning列出钥匙串里可签名的证书 •$Codesign–fs"证书串"文件名 ...

  6. shell脚本实现文件改名/重命名

    shell脚本实现文件改名小操作, 在此做一记录. #!/bin/bash #将数据文件.SAC名改为'<sta>.[N/E/Z].SAC' #例如2014.143.20.49.21.00 ...

  7. Linux Shell脚本 - 什么是Shell

    前言 笔者也是刚接触Linux,很多概念也是一边查资料一边摸索着理解,下面有一些专业性的术语是来源于网络资源. 一些概念笔者本人也还理解得比较模糊,看似简单的东西,深入发掘也会发现并不简单,很多概念都 ...

  8. linux shell脚本 引入外部shell文件

    shell脚本 引入文件 文件包含的语法格式如下: # 注意点号(.)和文件名中间有一空格 . filename # 或 source filename 实例: [root@hadoop01 shel ...

  9. shell在二级python_在python下运行时在shell脚本之间传递shell变量[duplicate]

    使用 shell=True 首先,就 --如果你在使用 外壳=真 ,您可以告诉开始运行未经修改的现有脚本内容的shell. 也就是说--如果你最初这么做的话: subprocess.Popen(['y ...

最新文章

  1. Visual Studio 2010 and .NET 4 RTM中文版发布
  2. vlan之间互相访问_VLAN的划分和网络的配置实例
  3. -----------最小生成树----------------
  4. 如何用crontab每隔1分钟执行一个命令行脚本
  5. php数据库数组去重复数据库,PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)...
  6. 单例模式及C++实现代码
  7. mysql-5.7.13-winx64如何安装_mysql 5.7.13 winx64安装配置方法图文教程
  8. 浅谈XSS攻击的那些事(附常用绕过姿势)
  9. PropertyGrid中的枚举显示为中文(转)
  10. sql语句查询优化总结,建议及写法技巧(汇总)
  11. 【经典】MIT人工智能实验室: 如何做研究?
  12. mySQL及可视化界面navicat在window的配置
  13. 分享10种用户点击率高的汽车软文标题公式
  14. php好趣网抓取_PHP抓取卫视直播源
  15. 威纶通触摸屏如何在报警的同时,显示出异常数据的当前值?
  16. pycharm-professional-2020.1下载与激活
  17. 用python玩转数据Python便捷数据获取与预处理 quiz
  18. 一文必懂-深入理解Automatic、CAS、Unsafe类
  19. 塔望食业洞察丨中国清酒市场消费调查、发展趋势、品牌策略分析
  20. 单片机C51 - 串行通信原理及串口编程实验

热门文章

  1. oracle session_wait,转载:学习Oracle动态性能表-(8)-V$SESSION_WAIT,V$SESSION_EVENT
  2. matlab向量归一化_已知近似的特征值,求特征向量
  3. wcf获取MySQL中午乱码,如何启用WCF日志记录,以便它写入数据库?
  4. cpu开核_新锐龙让AMD重返巅峰,但逆袭的50年里这些CPU也不应忘记
  5. python+OpenCV图像处理(五)图像的阈值分割
  6. ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行
  7. PyTorch框架学习十六——正则化与Dropout
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 19丨行转列【难度中等】​
  9. 《算法小白历险记》3.最长公共前缀【python-简单】
  10. 开源数据分析工具 CyberChef