博文

LLVM-Symbol Obfuscation的采坑之旅 依然踩坑中...

1.要判断数据类型,如果GlobalVariable的getInitializer()为空和dyn_cast转为ConstantDataArray的getInitializer()不是isCString(),都要跳过,不能进行混淆。 2.改名前后的长度要一致。

Cross-compile the LLVM + clang

1.Checkout llvm/clang/compiler-rt(optional) 2.Organize the directory like: llvm/ /tools/ clang /projects/ compiler-rt 3.Run the script below in Terminal. $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/ $ make -j5 //5 is the compiler threads, make it bigger to compile faster.

LLVM的LTOPass插件编写

由于LLVM出色的结构,所以我们可以很方便的在LLVM中添加我们自己想要的功能,比如代码结构优化、代码混淆、代码膨胀、控制流混淆等。 参考文档: LLVM.org - WritingAnLLVMPass LLVM.org - LinkTimeOptimization 我们要做的就是编写我们自己的LTOPass模块,然后将其注册进LLVM的代码中然后进行编译。 注册方法: 编写我们自己的Pass模块 修改llvm/Transforms/IPO/PassManagerBuild.cpp 然后把自己的Pass放进 populateLTOPassManager 中 把模块放进 llvm/Transforms/IPO/LLVMBuild.txt 中 编译!

iOS 安全笔记 - App加固方法

iOS Class-Guard -> Symbols Obfuscator Obfuscator-LLVM -> Code Obfuscate Custom LLVM IR 基于libLTO的修改方案(混淆符号) http://llvm.org/docs/LinkTimeOptimization.html

WKWebview与原生的JS交互(js调用原生)

如果在js端直接使用window.webkit.messageHandlers.postMessage方法进行交互,可以是可以,不过如果js需要和安卓进行js交互的话,就需要写两套方案了。 所以,要实现js“优雅”地调用原生,需要实现3个部分: 1.js的注入脚本准备, 2.WKUserContentController的配置, 3.WKWebview的配置。 1.准备js的注入脚本。 我们要声明一个js对象,然后将交互所需的方法放到这个对象里面。 js脚本文件内容如下(实现了setTitle方法): var jsObject = {}; //声明js交互对象 jsObject.bridge = function(name) { //js交互桥接方法   var args = new Array(arguments.length - 1);   for (var i = 0; i < args.length; i++) {     args[i] = arguments[i + 1];   }   window.webkit.messageHandlers[name].postMessage(args); }; jsObject.setTitle = function(title){ //js实际中需要调用的方法         jsObject.bridge("setTitle",title);     }; 2.配置WKUserContentController: 新建一个WKUwerContentController的子类,然后在里面实现载入UserScript的方法。 -(void)loadScript {     NSString *jsPath = [[NSBundle bundleForClass:self.class] pathForResource:@"bridge" ofType:@"js"]; if (jsPath != nil) { NSString *jsContent = [NSString stri...

有关设置NavigationbarItem.titleView的一个坑

今天遇到一个bug, 仅仅是设置了titleView,然后发现push出去再pop回来,内存和CPU占用暴涨,界面锁死。 然后去查了内存泄露发现没有任何问题。 后来去跑了Time Profile发现NavigationBar一直在做LayoutSubviews 后来才发现titleView里重写了layoutSubviews方法。 用autolayout实现了相关布局,就解决了问题。

present的延迟问题

要强制放到主线程来执行。。不然会出现奇怪的延迟问题 如下: DispatchQueue.main.async {     self.present(#YourViewController#, animated: true, completion: nil) }