Android NDK 28 自定义 Clang & OLLVM (New Pass Manager) 混淆编译实战指南
引言
在移动端安全对抗中,对 C++ 核心逻辑(如 Cocos 游戏引擎逻辑、加解密算法)进行混淆是防逆向分析的重要一环。LLVM 混淆器(OLLVM / Hikari / Pluto)是最常用的方案。
随着 Android NDK 28(搭载 LLVM 19)的发布,旧版的 Pass 管理器(Legacy Pass Manager)已被完全移除,取而代之的是 **New Pass Manager (NPM)**。这意味着以往传统的 -Xclang -load 注入方式已失效,我们必须为新版 NDK 构建自定义的 Clang 编译器并适配新版 Pass 插件。
本文将详细介绍如何从源码一步步构建支持 NDK 28 的自定义 Clang 编译器和 Obfuscator.dylib 混淆插件,并规避交叉编译中的各种“大坑”(如编译时间过长、缺失 32 位目标后端等问题)。
Android 15/16 Cocos2d-x V8 Crash 问题分析与 GLThread 复用解决方案
背景
修复v8::HandleScope::Initialize(v8::Isolate*)+144
接上一篇文章。由于平时更新不算频繁,加上个人也有些懒,一直没有深入思考 Cocos2d-x 2.x 在 Android 15/16 上的 V8 Crash 问题如何彻底修复。
最近重新整理这个问题时,想到一个新的思路:
如何可以通过复用同一个 GLThread 来避免问题?
因为之前分析发现,Crash 的核心原因很可能来自 GLSurfaceView 在 View 重建时重新创建 GLThread。如果能够保证整个生命周期中始终使用 同一个 GLThread,也许就可以绕开这个问题。
于是开始重新阅读 GLSurfaceView 的源码,并尝试寻找可行的干预点。
Cocos2.x版本 HandleScope::Initialize(v8::Isolate*) 问题分析
问题背景
公司使用 Cocos 2.4.15 开发游戏时,发现一个 crash 在 Android 15 以上的设备上非常频繁。起初以为是 16KB 的兼容性问题,但分析后发现包其实是兼容 16KB 的。
在 Cocos 社区中,也有相关讨论:v8::HandleScope::Initialize(v8::Isolate*)。官方曾提供过基于 Activity 在 onDestroy 时的修复方案,但我们发现还有其它触发场景。
Crash 日志示例:
1 | (v8::HandleScope::Initialize(v8::Isolate*)+144) (BuildId: a222c0a549189d49b84a5433428e92f58cba47f0) |
nx54你别升级了
android打包固定id
前言
6月份跳槽来了一家广告公司,整个业务逻辑就是流量玩法,上架市场,买量,赚广告费。因为gp上架越来越难,就衍生出一种玩法叫AB面。关于AB面,这里先不讲,主要说说B包的资源处理。这篇没技术,单纯自己记下来当笔记用。
id
id其实是个整数,应用内的id一般情况是0x7fxxxxxx,这个hex其实是package,type,value的结构。而代码中如果有R.id.xx,会在编译时直接替换成该整数。做AB面的包,B包都是通过动态加载的,这就导致这个整数,必须在使用时,和你的资源对应。10年有,有种粗暴的解决办法,就是构建一个自己的aapt,可以指定package,也就是前面的7f,然后再用添加Resources的方式,将资源添加到资源管理器中。这样就能一劳永逸。B包打包,使用0x7e的资源,A包不处理,这样AB的资源就不会冲突。
1 | android{ |
遥遥领先的DNS配置
android 14安装CA证书
mac mini配合linux当服务器使用
前言
我主业是安卓开发,但不务正业的我又在折腾别的了。
之前写过一篇关于 NX54 如何配置 iptables 以开放指定 IP 的 IPv6 防火墙规则。最近又把手上的一块 14 年的废弃 ARM 开发板翻出来,挂了块硬盘,让我在任意设备上都能访问家里的网络。要说这块板子,官方系统只到ubuntu 2014,连python3都没法装,之前折腾过armbian,但kernel有问题,usb不工作。最近看论坛去年有人升级了内核了,赶紧换一下系统。
过年期间家属送了一台 Mac mini(现在百亿补贴入手价 2899,血亏 600),于是我又折腾了一下,把整个网络重新整理了一遍。熬了几个夜晚和午休时间,总算弄好了,这里记录一下过程中遇到的问题和解决方案。
之前我做了什么
- 桥接路由,这样可以直接获取公网ipv6地址,供自己在外边连接。
- 关防火墙。大多数路由器都有ipv6防火墙,像我的NX54就是基于ip6tables的配置,需要关掉。我是只关掉了我的linux的ip。我使用了脚本自动更新,脚本流程如下: 不得不说,cloudflare真的是互联网之光,域名便宜,免费加速,还提供Pages,Workers。
1
linux定时任务 -> python脚本 -> 获取ipv6 -> 发现变化 -> 更新nx54防火墙 -> 更新cloudflare dns AAAA(最早做了一版发email的,后来改ddns了)
- linux关闭ssh密码访问,把常用的设备公钥加进去。