|
|
本帖最后由 hehua 于 2026-2-7 17:55 编辑
1. 加固壳运行流程分析(时序逻辑)
1.1 启动阶段流程:
```
Application.attachBaseContext()
→ RuntimeProtector.initialize()
→ SecurityChecker.checkEnvironment()
→ SoLoader.loadCoreLibrary()
→ nativeInitialize()
```
1.2 动态加载阶段:
```
Activity.onCreate()
→ RuntimeProtector.loadDynamicDex()
→ DexDecryptor.decrypt()
→ MultiDex.install()
```
2. 核心类协作分析
2.1 RuntimeProtector 运行流程:
```java
public class RuntimeProtector {
// 初始化阶段
public void initialize() {
// 1. 安全检查
if (new SecurityChecker().checkEnvironment()) {
exitProcess();
}
// 2. 加载防护so
SoLoader.Config config = new SoLoader.Config.Builder()
.setLibName("libshield.so")
.setEnableMemoryLoad(true)
.build();
SoLoader.load(config);
// 3. 初始化native防护
initNativeProtection();
}
// 动态加载阶段
public void loadDynamicDex(InputStream encryptedStream) {
// 解密流程
byte[] dexData = new DexDecryptor()
.setKey("dynamic_key")
.decrypt(encryptedStream);
// 动态加载
new DexLoader(getClassLoader())
.load(dexData);
}
}
```
2.2 SecurityChecker 检测逻辑增强:
```java
public class SecurityChecker {
// 新增的检测维度
public boolean checkEnvironment() {
return checkRoot()
|| checkDebugger()
|| checkXposed()
|| checkMemoryTamper();
}
private boolean checkXposed() {
try {
Class.forName("de.robv.android.xposed.XposedBridge");
return true;
} catch (Exception e) {
return false;
}
}
private boolean checkMemoryTamper() {
// 通过native方法校验内存完整性
return nativeCheckMemory();
}
}
```
3. 特定类深度分析
3.1 CrashHandler 异常处理机制:
```java
public class CrashHandler implements Thread.UncaughtExceptionHandler {
public void init() {
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread t, Throwable e) {
// 1. 加密崩溃日志
String crashLog = encryptLog(buildCrashReport(e));
// 2. 上传到服务器
new CrashReporter().upload(crashLog);
// 3. 安全退出
System.exit(1);
}
private String encryptLog(String log) {
return new AESEncryptor()
.setKey("crash_key")
.encrypt(log);
}
}
```
3.2 SoLoader$Config 配置详解:
```java
public class SoLoader {
public static class Config {
// 内存加载模式
private boolean memoryLoad;
// 库搜索路径
private List<String> libPaths;
// 解密配置
private DecryptConfig decryptConfig;
public static class Builder {
public Builder setMemoryLoad(boolean enable) {
this.memoryLoad = enable;
return this;
}
public Config build() {
return new Config(this);
}
}
}
}
```
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|