Android逆向 JNI静态注册

admin 2021年1月18日19:59:10评论139 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静态注册https://cn-sec.com/archives/245514.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息