Android逆向 JNI静态注册

admin 2021年1月18日19:59:10评论128 views字数 1807阅读6分1秒阅读模式
摘要

打开 ADT 新建Android空白项目 全部默认下一步
使用jni写的需要用native修饰首先在ADT中新建 jni文件夹

Android逆向 JNI静态注册

1. 新建空白Android项目

打开 ADT 新建Android空白项目 全部默认下一步
Android逆向 JNI静态注册

Android逆向 JNI静态注册

Android逆向 JNI静态注册

Android逆向 JNI静态注册

Android逆向 JNI静态注册

Android逆向 JNI静态注册

2. 新增jni代码

使用jni写的需要用native修饰

Android逆向 JNI静态注册

3. 生成头文件

首先在ADT中新建 jni文件夹

Android逆向 JNI静态注册

右击src文件夹 选择 Properties 查看文件夹路径
这里为 C:/Users/asura/source/repos/Android_JNI/02_JNI_register/Jnidemo/src

Android逆向 JNI静态注册

打开命令行 到达指定的目录执行javah命令

1 
javah -jni -d ../jni com.example.jnidemo.MainActivity 

刷新ADT后发现jni路径下生成对应的头文件

Android逆向 JNI静态注册

注意!

如果上述操作完全没错,但依然提示找不到xxx的类文件!需要先使用命令来进行切换

1 
set classpath=C:/Users/asura/source/repos/Android_JNI/02_JNI_register/Jnidemo/src 

4. 编写c++代码和ndk编译配置文件

在jni文件夹内新建文件

com_example_jnidemo_MainActivity.cpp

1 2 3 4 5 6 7 
#include "com_example_jnidemo_MainActivity.h"  JNIEXPORT jstring JNICALL Java_com_example_jnidemo_MainActivity_Hello   (JNIEnv * env, jobject obj) {     return env->NewStringUTF("Hello JNI"); } 

Android.mk

1 2 3 4 5 6 
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_MODULE    := hello                                    #模块名称 LOCAL_SRC_FILES := com_example_jnidemo_MainActivity.cpp     #源文件名 include $(BUILD_SHARED_LIBRARY)                             #编译为so库文件 

Application.mk

1 
APP_ABI := x86 armeabi-v7a 

Android逆向 JNI静态注册

5. 编译ndk代码

命令行进入jni目录下执行编译命令

1 
ndk-build 

看到输出.so文件成功则说明编译成功

Android逆向 JNI静态注册

6. java内加载so库和调用

回到java文件中 编写加载so代码的逻辑

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
package com.example.jnidemo;  import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.Toast;  public class MainActivity extends Activity {      static {         System.loadLibrary("hello"); //加载hello模块     }      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         Toast.makeText(this,MainActivity.this.Hello(), 1).show(); //调用jni内方法     }      @Override     public boolean onCreateOptionsMenu(Menu menu) {         // Inflate the menu; this adds items to the action bar if it is present.         getMenuInflater().inflate(R.menu.main, menu);         return true;     }      private native String Hello(); }  

7. 编译执行

Android逆向 JNI静态注册

相关代码

https://github.com/luodaoyi/Android_JNI/tree/master/02_JNI_register

如果是用android studio 请看NCK大佬的文章

安卓逆向4.Android Studio JNI静态注册(一个简单的JNI静态注册流程) – 凉游浅笔深画眉 – 博客园

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年1月18日19:59:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android逆向 JNI静态注册http://cn-sec.com/archives/245514.html

发表评论

匿名网友 填写信息