Rytter 发表于 2023-10-5 11:23

Android逆向学习(番外四)native code类的操作调用

# Android Native Code开发学习(三)对类进行操作

本教程为native code学习笔记,希望能够帮到有需要的人

我的电脑系统为ubuntu 22.04,当然windows也是可以的,区别不大

这个操作其实并不是很难,所以写的有点短了

## 对java中的对象变量进行操作

首先我们新建一个java的类

```java
public class ClassForJNI {
    public int a;
    public int b;
    public void add(){
      System.out.println("a+b is :"+(a+b));
      return;
    }
}
```

我们的目标就是更改里面的a和b,并且调用这个类,就可以看到我们的输出

```cpp
//查询类名
jclass clz_2 = env->FindClass("com/example/nativecodelearn/ClassForJNI");
//查询构造函数的id
jmethodID jcmid_2 = env->GetMethodID(clz_2, "<init>", "()V");
//创建对象
jobject = env->NewObject(clz_2, jcmid_2);
jfieldID fid_a =env->GetFieldID(clz_2,"a","I");
jint num_a =env->GetIntField(jobject,fid_a);
env->SetIntField(jobject,fid_a,9);
jfieldID fid_b =env->GetFieldID(clz_2,"b","I");
jint num_b =env->GetIntField(jobject,fid_b);
env->SetIntField(jobject,fid_b,10);
//获取方法id
jmethodID jmeid_2 = env->GetMethodID(clz_2,"add","()V");
env->CallVoidMethod(jobject,jmeid_2);
```

其实这个步骤一共就这几步

1. 找到类名
2. 准备构造函数
3. 创建对象
4. 获得fieldID
5. 得到对应的变量
6. 更改变量的值

通过这样我们就可以运行了,这样就可以得到最终的结果了



正己 发表于 2023-10-5 13:45

到frida篇章可以看一下hooker

Cribug666 发表于 2023-10-5 19:31

hooker有些问题,在哪里反馈

Slimu 发表于 2023-10-5 22:51

最近Android逆向多了起来

Rytter 发表于 2023-10-6 00:00

Slimu 发表于 2023-10-5 22:51
最近Android逆向多了起来

因为正己大大在更新Android逆向教程,所以相应的学习贴和讨论贴也多了起来

zjh889 发表于 2023-10-8 00:21

不错的东西,谢谢大师!

WJH0628 发表于 2023-10-8 19:31

谢谢分享{:1_927:}

jsncy 发表于 2023-10-13 13:50

还不错,谢谢。

zhangsf123 发表于 2023-10-21 21:18

还可以,多谢了。
页: [1]
查看完整版本: Android逆向学习(番外四)native code类的操作调用