安卓 java hook调用so_Android JIN编程与Cydia hook So函数

关于JNI的简介在上面已经说了,这篇文章要实现两个方面的内容,第一个是JNI编程的流程,将通过一个简单的SO函数做示例;另一个是使用Cydia对SO函数做hook操作;第一个方面是Android开发中常用的方式,如果要对native层进行逆向那么最好先理解native层开发的流程即JNI;Cydia对native的hook操作,基本要过时了,因为Cydia对Android的支持在Android4.x版本。

JNI开发流程(Androidstudio 3.4)

新建一个简单的Android应用 JniDome

12ced498b82554be5026ceca8594edc9.png

安装ndk

e69b5fdc65c18a2149a911458f862668.png

在app>src>main>java下创建jni目录

0b7dbf421739054f6b904bcfa4397426.png

创建javah自定义命令,用于快捷创建c++相关文件

8d5b1aa0ff2b121b605e378a5feb4149.png

在输入框对应位置复制下面内容填入Program:$JDKPath$\bin\javah.exe

Parameters:-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$

Working directory:$ModuleFileDir$\src\main\Java

点击确定,该条命令就填完了。

然后在java包里面创建一个java类用来引入c++函数

a1dff41e6cfcf1a082bf467c85cdd1ca.png

然后执行开始创建的javah命令,生成对应的c++头文件

948642a9c9f156b08bdf93bfe6c27953.png

创建文件 JniLib.cpp 、Android.mk、Application.mk

创建JniLib.cpp文件,删除JniLib.h文件

a4bafc0fec4da506f5aadae5fbb8212b.png

修改JniLib里面的源码

067d4dd37e1ae8e80255caec00b7993e.png/* DO NOT EDIT THIS FILE - it is machine generated */

#include 

/* Header for class com_jni_jnitest_JNITest */

/*

* Class:     com_jni_jnitest_JNITest

* Method:    getString

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_example_jnidome_JNITest_test

(JNIEnv * env, jobject jobject){

return (*env).NewStringUTF("JIN So函数执行结果:HelloWord");

}

创建Android.mk文件复制下面源码写入:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JniLib

LOCAL_SRC_FILES =: JniLib.cpp

include $(BUILD_SHARED_LIBRARY)

创建Application.mk文件复制下面源码写入:

APP_MODULES := JniLib

APP_ABI := all

在build.gradle内增加下面源码:ndk{

moduleName "JniLib"

}

sourceSets.main{

jni.srcDirs = []

jniLibs.srcDir "src/main/libs"

}

026291579f3e0b050e8fc7b386a1337a.png

创建构建so库的命令

c36469d3042583456bba72ab6c354a44.png

program写Androidstudio安装目录下的ndk下的ndk-build.cmd路径,如:C:\Users\test\AppData\Local\Android\Sdk\ndk-bundle\build\ndk-build.cmd

working directory写下面内容:

$ProjectFileDir$\app\src\main

创建好命令后运行该命令。

5329e9900aa26c17f1a6ff118194575b.png

构建过程显示:

724d88e08622420a603745d7e95d9cf5.png

构建成功后会多出下面几个文件:

c2ef4c01189ce5d6f2929fe821f40564.png

然后我们修改源码导入穿件的JniTest函数

5024415992f81cda182471d076ef1832.png

编译并运行app效果如图:

575d5442455747e5d9ca47bd18711418.png

Cydia hook native函数

声明:本博客原创内容,欢迎转发,转载请来源:www.likeinlove.com/info/101.html。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值