Android 逆向调用so(一)

今天读一篇论文中提到“盗版应用可在未读取SO库实现源码的情况下,对其中的方法进行调用”,既然这样今天就小小的实现一发,不知道怎么取名?就索性暂时取名为“Android 逆向调用so(一)”,可能到后来脑洞一开实现一个进阶篇,这谁说的来呢是吧

原理篇:

前提:

先写一个简单的Demo,比如实现一个最简单针对IDA反附加的反调试,在移动端这一块反调试还算不是很多吧相对PC,我到后面肯定会专门写一个关于Android反调试的专题,我们知道IDA的动态调试在建立android_server的时候,是android_server这个进程ptrace调试进程,一旦附加上以后,在/proc/pid/status/TracerPid这个值就不是为0,如果我们一旦检测到它,说明进程正在被调试,这时候选择退出就OK,这里为了进行很好的说明,我们选择不退出,选择输出字符串显示被调试,额,似乎跑题了,又不是讲反调试,这里只是作为一个样例,后面会专门讲反调试。。。

目标:

我们假设上面那个拥有反调试的APK是我们逆向要分析的对象,再假设我们自己建立一个HelloWorld的工程,想拥有上面那个反调试的功能但是又不会自己用源码来实现,那么这里就进行逆向调用上面那个有反调试的.so文件中的执行反调试的函数,来使得这个简单的HelloWorld有这个反调试功能。

实现篇:

我自己实现了一个反调试,源码会放在后面附件中。因为这不是重点,重点在后面;

接下来进行逆向调用:

假设我们现在只拿到一个拥有以上反调试的一个APK,我们开始逆向分析它;用AK打开,核心函数在.so文件里面,我们接着用IDA分析它;

Android 逆向调用so(一)_第1张图片

我们可以看到有两个核心函数,一个Java_com_example_zbb_jiagu02_Myndk_antidebugs();另一个Java_com_example_zbb_jiagu02_Myndk_Stringfromnative();我们从IDA分析或者APK的运行知道它是返回一个字符串;这里为了简单期间我们先实现在HelloWorld中显示这个字符串,然后再实现那个饭调试的功能。

首先显示字符串:

第一步:在工程的/app/src/main/下面建立一个/jniLibs/armeabi/的文件,把我们要调用的核心libptrace.so文件放在下面;

第二步:由于调用本地层,所以建立java层与本地层之间的联系,因此新建一个以被调用的.so工程中的包名为名字的包,把对应的调用建立java层与本地层之间的文件拷贝过来;

如下图所示:

Android 逆向调用so(一)_第2张图片

里面按照以下这样的格式来,就可以。

public class Myndk {
    static
    {
        System.loadLibrary("ptrace");
    }
    public static native String Stringfromnative();
}

第三步:在MainActivity.java中调用相应Stringfromnative(),函数来显示,

最后的运行结果就是:

Android 逆向调用so(一)_第3张图片

调用反调试的功能:

第一步:与上面一样,在工程的/app/src/main/下面建立一个/jniLibs/armeabi/的文件,把我们要调用的核心libptrace.so文件放在下面;

第二步:与上面一样,步骤一样故省略;

第三步:在MainActivity.java中调用相应antidebugs函数来判断反调试;

接下来我们进行一发看看反调试是否起到作用:

 Android 逆向调用so(一)_第4张图片

OK,说明这种方法是可行的。

总结篇:

大家可能觉得这个不是特别有说服力,但是这里最重要的是提供了一个思路:就是我们可以逆向调用别人的.so文件里面的方法。


核心步骤:
第一步:在工程的/app/src/main/下面建立一个/jniLibs/armeabi/的文件,把我们要调用的核心libptrace.so文件放在下面;
第二步:新建一个以被调用的.so工程中的包名为名字的包,把对应的调用建立java层与本地层之间的文件拷贝过来;
第三步:在MainActivity.java中调用相应的功能函数;
*****************************************************
注意:
1.这个是建立在逆向的基础上,只有了解了你需要调用的函数的功能以及返回参数  ,才可以进行调用;
2.优点是:逆向开发,不需要知道中间的实现过程,效率高;
3.缺点是:对于保护过后的,需要逆向能力强,并且成本高,在下一篇中来进行进阶篇;



源码下载:点击打开链接






你可能感兴趣的:(android逆向安全,Android,代码保护与逆向)