安卓逆向so篇(一):so文件调用

本教程介绍了如何在安卓应用中调用原生签名算法,提供了两种方法:通过hook函数和调用so文件。重点讲解了如何反编译定位签名函数,将so文件移植到自己的App中,创建对应类并直接调用,强调了这种方法的优点如内存占用小和稳定性高。同时提到了jar包方式的优缺点,适合在Linux环境中运行。
摘要由CSDN通过智能技术生成

一.前言

安卓逆向分析时偶尔会遇到签名算法在native层的,想要调用该签名算法,可以采用以下三种方法:

(1)hook相关函数:hook是逆向中最常用的了,不过在电脑端还要整个虚拟机,装对应的app,内存占用较大,有时app还会崩溃,手机端的话也是得装app,需要hook几个不同软件的话内存也是吃力的。

(2)逆向so文件:使用IDA逆向so文件,需要定位到加密函数,还要看得懂汇编和C代码,工作量挺大。

(3)调用so文件:通过反编译技术定位到签名函数,找到定义native方法的类,确定使用的so文件,将so文件移植到自己的项目中,可以随时调用,而且可以整合多个so文件,占内存小,稳定性高。

二.正文

本教程介绍调用so文件的方法,有两种途径:

1.Android App

通过反编译工具jadx搜索定位到签名函数,继续深入找到定义native方法的类,确定使用的so文件,将so文件移植到自己的App中,可以随时调用。

(1) 解压目标App,在lib文件夹中找到目标so文件,将该so文件复制到自己App项目的libs目录下

(2) 在自己App项目中建立签名类(具体的native方法定义通过反编译技术获取),要注意的是包名和类名要和原App一致,否则调用不了。例如某个调用了libNativeHelper.so的类定义如下:

package com.xxxxx.helpers;

public class AppNativeHelper {
    public static native int applyPatch(String str, String str2, String str3);

    public static final native String desCbcDecrypt(String str);

    public static final native String desCbcEncrypt(String str);

    public static final native String getDailySignApi(String str);

    public static final native String getFileMd5(String str);

    public static final native String getMd5(String str);

    public static final native String getServerApi(String str);

    public static native int makePatch(String str, String str2, String str3);

    public static final native String tokenDecrypt(String str);

    public static final native String tokenEncrypt(String str);

    public static native void uninstall(String str, int i, String str2, boolean z);

    static {
        try {
            System.loadLibrary("NativeHelper");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

(3) 在需要的地方直接调用相关即可

String sign = AppNativeHelper.getServerApi("123456");

优点:可以整合多个so文件到自己的APP中,占内存小,稳定性高;可以搭建简易签名服务,给局域网内用户使用;

缺点:需要Android Studio开发经验,开发一个App;

2.jar包

(1) 在JDK环境下建立签名类,最后打包成jar包;

(2) 将so文件放在系统的lib或lib64文件下;

(3) 调用jar包中的类即可;

优点:可以运行在Linux内核系统上,其他编程语言可以调用,通用性高;

缺点:一些App只提供ARM架构的so文件,在x86架构的PC上调用不了;

三.结语

以上教程针对的是没有验证机制的so文件,有些so文件会对App进行包名和签名验证,验证失败则调用不了,有空再写个so文件的去签名验证教程。

本教程基于本身需求经验编写,只供参考学习,不足之处还请指正,欢迎伙伴们来一起探讨交流!

### 回答1: 混淆SO文件是指对Android native执行文件(.so文件)中的函数和数据进行加密和混淆,以保护代码的安全性和隐私性。与Java代码混淆不同的是,SO文件的混淆是在编译阶段完成的,而不是在打包和发布阶段。 在Android开发中,NDK(Native Development Kit)是一款可用于编写本地代码的工具集。使用NDK开发的应用程序使用SO文件来提供C/C++函数和库。由于NDK代码不会在应用程序中进行编译,因此它们没有类似于Java代码的混淆和加密工具。因此,为了加强SO文件安全性,需要使用其他的工具来进行混淆。 现在有许多开源的SO混淆工具可供使用。例如,Android NDK提供了一个名为LLVM混淆器的工具,它使用一些与Java代码混淆器不同的技术来优化指令流和掩盖代码逻辑。此外,其他SO混淆工具如YASC、MOVfuscator、O-LLVM等也可以用于混淆SO文件。 SO文件混淆可以通过多种方式实现。例如,针对代码文件进行重命名或修改,删除未引用的函数和数据,加密和混淆重要内容等。此外,也可以通过将硬编码的值替换为映射的值,使用一些外部定义的数据结构来防止反汇编和静态分析等技术来实现混淆。无论采用何种方法,SO文件混淆对于保护代码的安全性和隐私性都具有重要意义。 ### 回答2: 使用Android Studio中的ProGuard工具可以对一个应用程序的Java class文件进行混淆,但是它并不支持对Native代码的混淆。由于so文件是编译后的二进制文件,没有人可读的,对so文件进行混淆通常都是为了防止逆向工程而不是优化程序的运行或缩小它的大小。 现在有一些第三方工具可以用来对so文件进行混淆,比如Bangcle、Qihoo 360、Baidu和信鸽。这些工具通过改变so文件的代码结构、函数名称和变量名等方法来混淆so文件,使之更加难以阅读和理解。 混淆so文件是有一定风险的,因为这可能会导致应用程序的崩溃和功能异常。此外,混淆so文件可能会和某些平台实现产生不兼容的问题。但是如果您确实担心你的so文件受到攻击,那么混淆so文件可能是一个值得考虑的安全策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发大观园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值