为移动应用与企业工具提供 逆向分析 · 加固防护 · 授权体系 · 定制开发 的落地实现,交付可直接接入项目的源码与方案。
费县安柯逆向软件开发工作室位于山东省临沂市费县,聚焦移动应用的逆向分析、协议还原与安全加固,同时承接桌面工具的定制开发。
不做只停留在演示层面的效果,交付的是能跑起来、能长期维护、能顺利交接的实现方案与完整源码。
把核心 DEX 加密后作为资源打进 APK,运行时由壳在内存中解密并加载。反编译工具直接打开只能看到壳代码,看不到真实业务逻辑。
// 1) 读取加密后的核心 DEX
byte[] enc = Assets.read(context, "core.dex");
// 2) 密钥来自 so 层,不在 Java 层硬编码
byte[] key = KeyBox.key();
byte[] dex = Crypto.aesGcmDecrypt(enc, key);
// 3) Android 8+ 内存加载,不在文件系统落地
ClassLoader loader = new InMemoryDexClassLoader(
ByteBuffer.wrap(dex), getClassLoader());
Class<?> entry = loader.loadClass("com.xxx.core.Entry");
entry.getMethod("attach", Context.class).invoke(null, ctx);
启动时校验 APK 签名与关键文件指纹,与预埋的正版信息比对,防止应用被篡改后重新打包分发。
// 取 APK 签名摘要(Android 9+ 用 signingInfo)
PackageInfo pi = pm.getPackageInfo(pkg,
PackageManager.GET_SIGNING_CERTIFICATES);
Signature[] signers = pi.signingInfo.getApkContentsSigners();
byte[] digest = MessageDigest.getInstance("SHA-256")
.digest(signers[0].toByteArray());
// 比对失败先上报风控,再结束进程
if (!safeEqual(digest, KeyBox.expectSign())) {
Risk.report("sign_mismatch");
Process.killProcess(Process.myPid());
}
对配置、脚本、图片、离线 HTML 包等资源做构建期加密,运行期按需解密,避免解包即可直接取走核心素材与配置。
// 构建期已加密的运行期配置,按需解密
try (InputStream in = Assets.openEncrypted("pay_config.bin")) {
byte[] plain = Crypto.aesGcmDecrypt(readAll(in), KeyBox.key());
Config cfg = Config.parse(new String(plain, UTF_8));
}
// 图片 / 离线包同理:流式解密后直接解码使用
Bitmap bmp = BitmapFactory.decodeStream(
Crypto.wrapStream(Assets.openEncrypted("guide.bin")));
卡密与设备机器码绑定,服务端用私钥签发授权凭证,客户端仅内置公钥即可离线校验,支持天卡、月卡、年卡与试用。
// 1) 激活:卡密 + 机器码一起提交
String mid = DeviceId.get(); // CPUID / 主板 UUID / 硬盘序列
AuthResp r = Api.active(cardNo, mid); // code / msg / expire_time
// 2) 保存服务端签发的授权凭证
License.save(r.credential);
// 3) 每次启动本地校验,离线同样可用
boolean ok = License.verify(mid, r.credential);
// 公钥验签 + 机器码比对 + 有效期 + 时钟回拨检测
DEX 加壳、指令抽取、反调试、反注入与环境检测组合使用,提升动态分析门槛,对抗二次打包、内存 dump 与 Hook 框架。
// 进程自附加,阻止调试器再次 ptrace
ptrace(PTRACE_TRACEME, 0, 0, 0);
// 扫描关键函数是否被写入软断点指令
if (scan_breakpoint(g_key_func)) report_and_exit();
// 检测 Hook 框架与调试连接
if (detect_frida() || detect_xposed() || is_debugger_connected()) {
report_and_exit();
}
把关键方法的 Dalvik 字节码编译成自定义虚拟指令,原指令从 DEX 中移除,由 native 层解释器逐条解释执行。
// Java 层:原实现已被虚拟化,只剩 native 声明
public class PaySign {
public native String sign(String body, long ts);
}
// Native 层:V-Bytecode 由解释器逐条执行
while ((op = fetch(vm)) != OP_EXIT) {
switch (op) {
case OP_ADD: push(vm, pop(vm) + pop(vm)); break;
case OP_CALL: handle_call(vm); break;
}
}
所有软件的最新版本、更新日志与安装包,统一在版本发布平台更新维护。点击下方按钮前往查看并获取最新版本。
也可先在上方「技术服务领域」确认所需能力,沟通更高效