【摘录】之前在进行iOS测试过程中由于要获取一定数据信息,因此需要对原本的安装包进行代码注入并且重新打包安装,因此就需要使用重签名策略,在此进行分享,希望大家可以使用其中的方法来运用到自身的项目中。

 工具:

  MachOview 查看 进制 Mach-O 文件

  yololib Mach-O 文件注入

 步骤:

  首先,对所需砸壳 ipa 利用Clutch 利用越狱设备砸壳

  下载后拷贝到越狱设备 /usr/bin/ 内

  通过 ssh 或者 mobileterminal 等进入命令行模式

  直接调用 Clutch命令

  Usage: Clutch-2.0.4[OPTIONS]

  -b --binary-dump <value> Only dump binary files from specified     bundleID

  -d --dump <value> Dump specified bundleID into .ipa file

  -i --print-installed Print installed applications

  --clean Clean /var/tmp/clutch directory

  --version Display version and exit

  -? --help Display this help and exit

  -n --no-color Print with colors disabled

  其次,我们将制作好的framework注入到输入法的二进制文件,方法如下:

  yololib XXXXXXXXXX XXXXX.framework/XXXXX

  注入这串代码后我们可以通过MachOView查看该二进制文件,如果在Load Commands中查看到存在刚刚注入的framework,则证明该注入成功,如下图所示:

 

  最后,我们就需要对二进制文件以及framework进行重签名,具体方法如下:

  重签名打包

  // 查看是否加密

  otool -l XXX | grep crypt

  // 查看可签名证书

  security find-identity -p codesigning -v

  // 导出 entitlements

  security cms -D -i AwesomeRepackaging.mobileprovision > profile.plist

  /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' profile.plist > entitlem

  ents.plist

  // 对注入的 framework和原?进制文件签名

  codesign --entitlements entitlements.plist -f -s #your identity#TYActions.f

  ramework/TYActions

  codesign --entitlements entitlements.plist -f -s #your identity# SogouInput

  // 打包

  xcrun -sdk iphoneos PackageApplication -v ~/Desktop/tySogou/SogouInput.app-

  o ~/Desktop/SogouInput.ipa

  // 安装

  ideviceinstaller -i ~/Desktop/SogouInput.ipa

  // 查看签名信息

  codesign -vv -d Example.app

  // 查看完整性

  codesign --verify Example.app

 注意:

  1. 通过 mobileprovision 文件导出对应的 entitlements.plist,并将二者拷贝到对应的目录下

  2. 目录下的每个文件需要用对应的证书单独签名,包含的 Framework 也用其证书签名

  3. 用主文件的证书对主文件及Frameworks目录下的所有文件进行重签名

  4. 我们需要确保在 Info.plist 中的 BundleID 是否跟我们的描述文件里面指定的一致。因为在重签的过程中, codesign会检查我们的Info.plist 文件里面的 Bundle ID,如果不匹配则会返回一个错误值。

  5. 除了需要对app中的info.plist更改Bundle ID, 还需要对重签名的插件中的info.plist 也更改符合的Bundle ID

  6. embedded.mobileprovision 还要从中导出entitlements.plist

  codesign 签名时 需要用 --entitlements entitlements.plist 附加参数进行签名

  7. 重新签名整个 app下的所有二进制文件

 总结:

  重签名整个过程非常的繁琐,不仅包含上述的步骤,还需要我们进行证书的申请,证书安装等过程,这些在这里都没有进行介绍,如果大家感兴趣可以去查找相关资料。注入+重签名往往可以让我们在获得更多的权限同时也不再完全依赖于越狱环境。这也使得该方法变得更加稳定和长久。

附录:几个工具顺便发下:

class-dump : https://pan.baidu.com/s/1bJI-p9QOFTKlOzB1Hx_L4A 提取码: e3cj

yololib : https://pan.baidu.com/s/1v3EzmZwJ4MI0dg2i9l1zXg 提取码: 8198

IPA注入动态库 + 企业签包工具 : https://pan.baidu.com/s/1CY79tX58jYVooWiD0LcgSw 提取码: w7tq

MachOView : https://pan.baidu.com/s/1Xfei2zaB-yuVlK73bQhdvg 提取码: 6dt9

IPA的动态库注入+企业重签名过程的更多相关文章

  1. Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind

    实际上,Linux的调试方法非常多,针对不同的问题,不同的场景,不同的应用,都有不同的方法.很难去概括.本篇文章主要涉及本专栏还没有涵盖,但是的确有很重要的方法.本文主要包括动态库注入调试:使用ltr ...

  2. iOS企业重签名管理软件之风车签名

    这是一款在Mac平台下安全可控的iOS签名管理软件,旨在对签名后的APP能够完全控制,包括APP的开启或禁用.设置到期时间锁.注入第三方动态库文件.设置安装限量.修改APP名称和自定义Bundle I ...

  3. Windows下静态库、动态库的创建和调用过程

    静态库和动态库的使用包括两个方面,1是使用已有的库(调用过程),2是编写一个库供别人使用(创建过程).这里不讲述过多的原理,只说明如何编写,以及不正确编写时会遇见的问题. //注:本文先从简单到复杂, ...

  4. 关于IPA文件重签名后如何跟踪管理APP的技术探讨和实践演示

    前言:开发iOS的朋友都知道,在功能开发完成后,我们就会用申请的苹果账号在后台做证书配置,然后提交到AppStore,但是也有部分APP我们不需要提交到AppStore,比如内部测试用的APP.定制给 ...

  5. WWDC2014之iOS使用动态库 framework【转】

    from:http://www.cocoachina.com/industry/20140613/8810.html JUN 12TH, 2014 苹果的开放态度 WWDC2014上发布的Xcode6 ...

  6. WWDC2014之iOS使用动态库

    苹果的开放态度 WWDC2014上发布的Xcode6 beta版有了不少更新,其中令我惊讶的一个是苹果在iOS上开放了动态库,在Xcode6 Beta版的更新文档中是这样描述的: Frameworks ...

  7. 写动态库时遇到了symbol lookup error问题

    之前写TLPI上的代码一直是手动进行错误处理,感觉代码冗余量很大,最后还是决定使用书上的tlph_hdr.h,顺便回顾下动态库的创建/使用. 参考很久之前的一篇博客 linux上静态库和动态库的编译和 ...

  8. autotools入门笔记(二)——创建和使用静态库、动态库

    带有静态库或者动态库的工程的构建过程与上一节()只包含一个源文件的工程的构建过程是类似的.只是对于复杂的工程,如果包含多个还有源文件的目录时,需要对每个包含源文件的目录执行构建过程,另外创建和使用库文 ...

  9. Linux程序编译链接动态库版本号的问题

    不同版本号的动态库可能会不兼容,假设程序在编译时指定动态库是某个低版本号.执行是用的一个高版本号,可能会导致无法执行. Linux上对动态库的命名採用libxxx.so.a.b.c的格式.当中a代表大 ...

随机推荐

  1. 11 vue 自定义全局方法

    //global.js// 定义vue 全局方   // 定义vue 全局方法 建议自定义的全局方法加_ 以示区分 export default {   install(Vue, options =  ...

  2. 水仙花数的条件:1.是一个三位数,2.个百千位数字的3次方加起来的和等于当前的三位数。如果,想要完美一点可以在外部加while循环

    #!/usr/bin/env python# -*- coding: utf-8 -*-print("请输入三位数:")num = input()# 定义常量SumNum = 0# ...

  3. 常用API【2】

    常用API 1.Math类 1.1 Math类概述 Math包含执行基本数字运算的方法 没有构造方法,如何使用类中的成员呢? 看类的成员是否是静态的,如果是,可以通过类名直接调用 1.2Math类的常 ...

  4. 阿里面试官:HashMap 熟悉吧?好的,那就来聊聊 Redis 字典吧!

    最近,小黑哥的一个朋友出去面试,回来跟小黑哥抱怨,面试官不按套路出牌,直接打乱了他的节奏. 事情是这样的,前面面试问了几个 Java 的相关问题,我朋友回答还不错,接下来面试官就问了一句:看来 Jav ...

  5. 跟着尚硅谷系统学习Docker-【day05】

    day05-20200717   p21.docker容器数据卷容器   就是活动硬盘上面挂载硬盘进行数据的传递.     [docker run -it --name dc01 fyr/centos ...

  6. 存储过程中拼接SQL语句

    很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANS ...

  7. 8.ffmpeg-基础常用知识

    1.封装格式MPEG-4其中 MPEG-1 和 MPEG-2 是采用相同原理为基础的预测编码.变换编码. 熵编码及运动补偿等第一代数据压缩编码技术:MPEG-4(ISO/IEC 14496)则是基于第 ...

  8. Spring框架学习笔记(1)

    Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...

  9. 图解冒泡排序及算法优化(Java实现)

    冒牌排序 基本思想 定义:冒泡排序的英文是bubblesort,它是一种基础的交换排序 原理:每次比较两个相邻的元素,将较大的元素交换至右端 (升序排序) 思路:相邻的元素两两比较,当一个元素大于右侧 ...

  10. Apache 和 Nginx 下绑定域名

    Apache 方法一 参考:链接 版本:2.3 配置文件位置:/usr/share/doc/httpd/httpd-vhosts.conf 添加域名和站点信息: vim /usr/share/doc/ ...