【移动安全】so动态调试对抗反编译及反调试

本文介绍了移动安全领域中如何对抗反编译和反调试的技术。包括环境配置,如设置JDK和ApkIDE的JDK路径;去除反编译,通过修改smali代码绕过签名检查;去除反调试,处理ptrace判断来避免进程被检测到处于调试状态;以及函数恢复和经验总结,如利用ida和jdb进行动态调试,以及ARM中的NOP指令和BEQ/BNE指令的应用。
摘要由CSDN通过智能技术生成

环境配置

1、设置JDK环境变量后需要修改JEB的配置脚本jeb_wincon.bat
rem Prefer a JDK over a JRE, which allows support for JEB native Java plugins
if defined JAVA_HOME (set base=”d:\Program Files\Java\jdk1.8.0_65\bin”) else (set base=”%SystemRoot%\System32”)
set JAVA=%base%\java.exe
2、ApkIDE环境中工具-》配置中设置JDK的安装路径

去除反编译

1、下面是判断签名信息的函数,修改反编译后的smali代码,使其最后判断签名处始终为真,这时可以跳过签名,此时可以重新打包。

 public static boolean a(Context arg4, String arg5) {
        PackageInfo v1_1;
        boolean v0 = false;
        try {
            v1_1 = arg4.getPackageManager().getPackageInfo(arg4.getPackageName(), 64);
        }
        catch(PackageManager$NameNotFoundException v1) {
            v1.printStackTrace();
            return v0;
        }

        byte[] v1_2 = v1_1.signatures[0].toByteArray();
        try {
            v1_2 = CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(
                    v1_2)).getEncoded();
        }
        catch(CertificateException v1_3) {
            v1_3.printStackTrace();
            return v0;
        }

        try {
            String v2 = new String(Base64.encode(MessageDigest.getInstance("md5").digest(v1_2), 19));
        }
        catch(NoSuchAlgorithmException v1_4) {
            v1_4.printStackTrace();
            return v0;
        }

        if("WJmkxxkkGnYbExi3dqzeaA".equals(v2)) {
            v0 = Ch.ch(arg5);
        }

        return v0;
}
.method public static a(Landroid/content/Context;Ljava/lang/String;)Z
    .locals 6

    const/4 v0, 0x0

    :try_start_0
    invoke-virtual {p0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;

    move-result-object v1

    invoke-virtual {p0}, Landroid/content/Context;->getPackageName()Ljava/lang/String;

    move-result-object v2

    const/16 v3, 0x40

    invoke-virtual {v1, v2, v3}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值