上一篇 《教我兄弟学Android逆向05 在smali代码中插入Log》我教会了你随心所欲的在smali代码中插入log,你也很认真的学习了,那么这节课我将带你走进so的世界,这时你有一些疑问,经常听比人说soso的那么so到底是什么呢?我是来学破解技术的啊为什么这节课要让我编写so?
先看一下下面的介绍:
Android开发中,我们经常会用到.so文件。原因有很多,比如部分方法不想暴露,如加密规则。比如部分秘钥需要存储,哪怕最简单的一个String我们使用.so调用获取这个String,也比直接明文写在代码中要来的安全。那么逆向破解也是一样,你要破解一个so就得先学习这个so是怎么编写的 为了避免以后破解so时知其然而不知其所以然 所以今天我为你带来了这篇教程。
那么今天的主线是:如何用AndroidStudio编写一个so并在java层调用so中的方法?
带着这条主线 我将开始今天的教程 下面要认真听课了!
一. 打开AndroidStudio 新建一个类,声明native方法。这个类是java与C/C++交互的中介,方法由java声明,由C/C++实现。
<ignore_js_op>
[Java] 纯文本查看 复制代码
|
1
2
3
4
5
6
7
8
|
public class myJNI {
//加载so库
static {
System.loadLibrary("JniTest");
}
//native方法
public static native String sayHello();
} |
二.打开android studio终端,使用javac编译上述文件,生成class文件。
1.打开myJNI类所在的目录,并复制路径
<ignore_js_op>3.生成的h文件
[C] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_jwxdxnx06_myJNI */#ifndef _Included_com_jwxdxnx06_myJNI#define _Included_com_jwxdxnx06_myJNI#ifdef __cplusplusextern "C" {
#endif/** Class: com_jwxdxnx06_myJNI* Method: sayHello* Signature: ()Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_com_jwxdxnx06_myJNI_sayHello(JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif |
拷贝修改后的main.c
[C] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_jwxdxnx06_myJNI */#ifndef _Included_com_jwxdxnx06_myJNI#define _Included_com_jwxdxnx06_myJNI#ifdef __cplusplusextern "C" {
#endif/** Class: com_jwxdxnx06_myJNI* Method: sayHello* Signature: ()Ljava/lang/String;*///就实现了个函数 JNIEnv的用法可以自行百度,这里就不展开了JNIEXPORT jstring JNICALL Java_com_jwxdxnx06_myJNI_sayHello(JNIEnv *env, jclass jobj){//返回一句话return (*env)->NewStringUTF(env,"hello 52pojie!");
}#ifdef __cplusplus}#endif#endif |
4.还要在jni文件夹下添加一个空白的util.c文件,不然会报错,我也不知道为什么。
<ignore_js_op>注意这里的moduleName,是我们在之前自己编写的类里面加载的so库名
[Java] 纯文本查看 复制代码
|
1
2
3
4
5
|
ndk {moduleName "JniTest"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
} |
<ignore_js_op>教我兄弟学Android逆向07 IDA破解第一个so》