欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]一个基于LLVM6.0的开源加固Hikari光

[原创]一个基于LLVM6.0的开源加固Hikari光

21岁, 学生desu。
闺女的Github地址 欢迎点Star
安装指南请看Wiki

已实现功能

  • 优化的伪控制流
  • 控制流平坦化
  • 指令替换
  • 反class-dump(部分实现。具体看Wiki)
  • 字符串加密。支持中文和Objective-C字符串,且实现更安全
  • 间接跳转化
  • API调用混淆
  • 基本块分割
  • 第二种不可描述的抗F5方式(仅限私有版本)
  • 代码完整性校验(可用于对抗静态/动态Patch/内连Hook/调试器,仅限私有版本)

开源版效果截图








在私有的版本中还额外增加了二进制校验及更多功能上的优化,已知的Bug请看README。总体来说目前稳定性可以在产品中使用了。开源版中现有的Bug可能不再会将私有版本中的修复向回移植,因为维护开源版本和私有版本还挺累的。
附件为一个打开了包括私有混淆在内所有混淆和保护的Demo。编译给macOS,编译自如下代码:

#import <Foundation/Foundation.h>

#import <CoreFoundation/CoreFoundation.h>

#import <dlfcn.h>

#import <objc/runtime.h>

#include <unistd.h>

#include <sys/ioctl.h>

@interface foo:NSObject

+(void)foo;

+(id)foo2;

@end

@implementation foo

+(void)foo{

  NSLog(@"FOOOO");

}

+(id)foo2{

  NSMutableDictionary *doo=[NSMutableDictionary new];

  [doo setObject:@"你好" forKey:@"世界"];

  return doo;

}

@end

@implementation foo2:foo

+(void)foo{

  [super foo];

  NSLog(@"FOOOO2");

}

@end

void fooooooo(int i){

  if(i%2==0){

    NSLog(@"You");

  }

  NSLog(@"Fuck");

}

int main(){

  NSLog(@"Fuck");

  [foo foo2];

  [foo2 foo];

  fooooooo(3);

  return 0;

}

Some Men Just Want to Watch the World Burn ----- Alfred Pennyworth

上传的附件 PatchREMe

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功