这是我参加8月更文应战的第4天,活动概略检查:8月更文应战

iOS 底层原理 + 逆向 文章汇总

本文主要解说代码注入的两种方法:FrameWork注入、dylib注入

代码注入

一般批改原始的程序,是运用代码注入的方法,注入代码就会挑选运用FrameWork或许Dylib等三方库的方法注入。

检查Mach-O文件

在了解注入前,我们首要需求了解ipa包中的静态库是怎么注入的,ios手游下载平台有以下两种方法检查Mach-O可实施文件

  • 1、终端指令二进制转十进制计算器otool -l WeChat
  • 2、MachOView二进制 二进制文件分二进制析东西(注:分析时或许出现无法分析的情况,能够经过 CMD + o 翻开)

Mach-O文件中主要看load Commands(即加载指令集),从这儿能够看出动态库的加载等。其间大部分格局为:LC_LOAD_DYLIB(xxx),是在指定途径下加载xxx二进制,如下所示
iOS逆向 11:代码注入(上)

所以,综上所述,假如需求注入代码,ios下载以动态库的方法注入

方法ios8备忘录1:Framework手动注入

第一步:动态库进入App包,即Framework注入

  • 1、创立一个Framework,命名为 CJLHook(创立方位:target -> + -> ios -> Framework)

iOS逆向 11:代码注入(上)

  • 2、在CJLHook中创立inject文件,在生命周期方法load函数中写注入代码
+(void)load{
NSLog(@"CJLHook ------ 注入成功");
}
  • 3、编译工程(注:这儿的工程仍然需求重签名),然后检查工程的可实施文件Wech二进制手表at,查找其间的Frameworks,从这儿能够看到CJLHook,但是此时并不会实施其间的load函数

iOS逆向 11:代码注入(上)load不会实施的原因ios8备忘录检查此时的Mach-O文件中ios是什么意思的Load Commands,并没有发现CJLHook,所以此时是不会实施其间的load函ios体系数的

第二步:yololib手动注入,批改Mach-O字段

  • 4、经过yololib东西批改Mach-O字段:./yololib WeChat Framewoios14.4.1更新了什么rks/CJLHook.framework/CJios最好玩的手游LHook(注:需求将WeChat可实施文件仿制过来)

iOS逆向 11:代码注入(上)
– 第一个参数:方针可实施文件

- 第二个参数:CJLHook的途径
  • 5、检查Mach-O可实施文件,能够看到现已加进来了

iOS逆向 11:代码注入(上)

  • 6、从头打包,过程如下:

    • 解压微信-7.0.8.ipa

    • 替换Payload中的可实施文件为上一步的Mach-O文件

    • 从头打包:zip -ry WeChat.ipa Payload/

    • 然后替换ipa包

  • 7、作业程序,能够看到成功实施了 CJLHook中的load

iOS逆向 11:代码注入(上)

方法2:dylib注入

准备作业:创立一个空工程,并进行WeChat的重签名,能够参阅这篇文章iOS逆向 10:运用重签名(下)

dylib注入

  • 1、挑选target -> + –xcode病毒检测工具> mac os -> Library,命名为CJLHook

iOS逆向 11:代码注入(上)

  • 2、在Build Setting中配备CJLHook
    • 1)Base SDK 改为 ios

    • 2)Code Signing identify 改为 iOS Developer

  • 3、其时工程中仿制lib

iOS逆向 11:代码注入(上)
– 1)、Build Phasexcode病毒检测工具 -> + -> New Copy File...
– 2)、然后挑选仿制到的方针文件:Frameworks
– 3)、添加dylib

  • 4、在CJLH二进制转八进制ook.m文件中重写load函数
#import "CJLHook.h"
@implementation CJLHook
+(void)load{
NSLoxcode病毒检测工具g(@"CJLHook ---- 注入成功");
}
@end
  • 5、脚本注入dylib,将yololib仿制至根目录,在appSign.sh结尾逆向思维添加以下指令
#注入
./yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libCJLHook.dylib"
  • 6、编译工程,检查Mac二进制手表h-O文件中的Frameworks文件,现已包含了CJLHook的dylib

iOS逆向 11:代码注入(上)

  • 7、作业程序,从日志能够看出实施了CJLHook中的load

iOS逆向 11:代码注入(上)

总结

  • 代码注入:一般会挑选运用FrameWork或许Dylib等三方库的方法注入

  • Framwork手动注xcode汽车流程:

    • 1、经过Xcode新建Framwork,将库设备进入APP包

    • 2、经过yololib注入Framwork库途径。指令:$yololib(空格)MmacosmojaveachO文件途径(空格)库途径

    • 3、一切的Framwork加载都是由DYLD加载进入内存被实施的

    • 4、注入成功的库途径会写入到MachO文件的LCios最好玩的手游_LOAD_DYLIB字段中

  • Dylib注入流程:

    • 1、经过Xcode新建Dylib库(留意:Dylib归于MacOS所以需求批改相关特色配备)

    • 2、添加Target依靠,让Xcode将自界说Dylib文件打包进入APP包。

    • 3、运用yololib进行注入。