某云盘脱壳

这个云盘使用梆*加固企业版,记录一下如何脱壳。

这个加固会检测frida,暂时不知道怎么绕过frida检测,也不知道怎么把dex dump出来。找到一个网站 APK加固安全测试 ,上传APK,等待一段时间后,它就帮你把dex dump出来了。

有了dex文件之后,怎么脱壳呢?可以看这个视频

首先要还原AndroidManifest.xml文件,首先是这两个需要修改

1
2
3
4
<application
    android:name="com.secneo.apkwrapper.AW"
    android:appComponentFactory="com.secneo.apkwrapper.AP"
>

那改成什么值呢?找到 com.secneo.apkwrapper.H 这个类查看

1
2
public static String APPNAME = "com.*******.client.CCloudApplication"; // 对应 android:name
public static String ACFNAME = "androidx.core.app.CoreComponentFactory"; // 对应 android:appComponentFactory

然后拉到最后,去掉这个provider

1
2
3
4
5
<provider
    android:name="com.secneo.apkwrapper.CP"
    android:exported="false"
    android:authorities="com.*****.CP"
    android:initOrder="2147483647"/>

如果在windows上修改,可以用APK.Tool.GUI解包后直接修改文件再打包。

然后是要把dex塞回apk里面。塞回之前,需要先用MT管理器修复dex文件。另外apk里面已经有了一个classes.dex,如果直接覆盖,启动时会退出,使用android studio看日志报了一个NullPointer错误,原因是里面的代码还是要依赖classes.dex。所以得用MT管理器重命名文件,把classes2.dex开始重命名,然后把它们塞进去。

最后使用MT管理器去掉签名验证后安装,然后运行。但是发现这个软件还做了检测,告诉我这个版本有问题,点击后进程就退出了。使用 android studio 查看日志可以看到退出堆栈,这里就能看到点击按钮的回调方法。

使用frida hook这个方法,直接跳过退出代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Java.perform(function () {
  const ClsName = 'com.******.client.ui.MenuActivity$28';
  const C = Java.use(ClsName);
  C.cancel.implementation = function () {
    console.log('[+] bypass ' + ClsName + '.cancel()');
    // 不调用原 cancel(),直接返回
    return;
  };
  C.submit.implementation = function () {
    console.log('[+] bypass ' + ClsName + '.submit()');
    // 不调用原 submit(),直接返回
    return;
  };
  console.log('[+] hooked ' + ClsName + '.cancel/submit as no-op');
});
updatedupdated2026-01-132026-01-13