美文网首页
10.代码注入

10.代码注入

作者: _顺_1896 | 来源:发表于2018-05-12 17:13 被阅读19次

[TOC]

Framework注入

  • yololib,修改macho文件的工具,存储在usr/local/bin
  • 需要对目标framework进行引用:在build parse中添加copy file将目标framework引用进去;
  • 指令:yololib WeChat Frameworks/JackHookFramework.framework/JackHookFramework,需要注意的是framework的路径是相对于执行文件的路径。
  • 在注入时首先对原始IPA中的可执行文件进行修改,修改后在放入ORG_APP目录下,避免编译后被覆盖;
  • 如果macho的Load Commands中存在对库的引用,而对应的库却不存在,在运行时app会crash并报错:Reason: image not found 。并且如果指定的路径上不是framework的可执行文件会报错:Reason: no suitable image found

dylib注入

dylib是macOS下的,iOS是framework;

创建时默认是动态库;

创建时需要对库进行签名;

build后生成的路径时和iOS的路径不一致:dylib:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME),framework:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

直接修改baseSDK位iOS

MethodSwizzle

对象的class,而class的class的获取方法:

通过getInstanceMethod获取到类方法的方案:对object_getClass(对象.class),将得到的结果传入getInstanceMethod中。

Hook微信注册方法

使用LLDB查看UI触发的事件目标方法,如查看某个button的点击事件、button的类型等。

通过class-dump查看方法的类型,是类方法还是对象方法;

object_getClass—传入ID

objc_getClass —传入字符串

通过在load方法中使用method_exchangeImplementations 方法对原始方法和自定义方法进行交换已达到目标;

[TOC]

Framework注入

  • yololib,修改macho文件的工具,存储在usr/local/bin
  • 需要对目标framework进行引用:在build parse中添加copy file将目标framework引用进去;
  • 指令:yololib WeChat Frameworks/JackHookFramework.framework/JackHookFramework,需要注意的是framework的路径是相对于执行文件的路径。
  • 在注入时首先对原始IPA中的可执行文件进行修改,修改后在放入ORG_APP目录下,避免编译后被覆盖;
  • 如果macho的Load Commands中存在对库的引用,而对应的库却不存在,在运行时app会crash并报错:Reason: image not found 。并且如果指定的路径上不是framework的可执行文件会报错:Reason: no suitable image found

dylib注入

dylib是macOS下的,iOS是framework;

创建时默认是动态库;

创建时需要对库进行签名;

build后生成的路径时和iOS的路径不一致:dylib:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME),framework:$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

直接修改baseSDK位iOS

MethodSwizzle

对象的class,而class的class的获取方法:

通过getInstanceMethod获取到类方法的方案:对object_getClass(对象.class),将得到的结果传入getInstanceMethod中。

Hook微信注册方法

使用LLDB查看UI触发的事件目标方法,如查看某个button的点击事件、button的类型等。

通过class-dump查看方法的类型,是类方法还是对象方法;

object_getClass—传入ID

objc_getClass —传入字符串

通过在load方法中使用method_exchangeImplementations 方法对原始方法和自定义方法进行交换已达到目标;

非category方式添加交互方法

一般情况在正向开发中,需要给某一个无源码但可以继承或直接引用的类添加方法逻辑时,可以通过添加分类,在分类中使用swizzle方式重写原方法

而要在不能引用的情况下对原类进行添加和修改(更新原始方法到新方法方法后,执行完新方法内容后继续执行原方法内容)时,需要先对原类进行方法注入,然后再在对注入后的类进行方法交换。eg:

+ (void)load { 
    Class orgClass = NSClassFromString(@"WCAccountLoginControlLogic");
    
    SEL tarSel = @selector(hook_loginAccount:data:);
    Method tarMethod = class_getInstanceMethod(self, tarSel);
    class_addMethod(orgClass, tarSel, method_getImplementation(tarMethod), method_getTypeEncoding(tarMethod));
    
    Method orgLogin = class_getInstanceMethod(orgClass, @selector(loginAccount:data:));
    Method newLogin = class_getInstanceMethod(orgClass, tarSel);
    
    method_exchangeImplementations(orgLogin, newLogin);   
    
}

- (void)hook_loginAccount:(_Bool)arg1 data:(id)arg2 {
    [self hook_loginAccount:arg1 data:arg2];
}

相关文章

  • 10.代码注入

    [TOC] Framework注入 yololib,修改macho文件的工具,存储在usr/local/bin 需...

  • iOS逆向 代码注入+Hook

    iOS逆向 代码注入+HookiOS逆向 代码注入+Hook

  • iOS应用代码注入防护

    iOS应用代码注入防护 iOS应用代码注入防护

  • iOS开发逆向之代码注入(上)

    本文主要讲解代码注入的两种方式:FrameWork注入、dylib注入 代码注入 一般修改原始的程序,是利用代码注...

  • 代码注入

    Framework库中代码注入工程的步骤:(选择iOS下创建库) Dylib库中代码注入工程的步骤:(选择MacO...

  • 代码注入

  • 代码注入

    typedef注意用法

  • 代码注入

    在学习代码注入之前,先看一下iOS 程序 main 函数之前发生了什么 一、framework形式代码注入 1.创...

  • 代码注入

    代码注入 一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等第三方库...

  • 代码注入

    前提使用了重签名脚本。1.framework注入(1)新建名为YPHOOK的framework (2)在YPHOO...

网友评论

      本文标题:10.代码注入

      本文链接:https://www.haomeiwen.com/subject/cpdhdftx.html