(七)编写具有.so文件的Android APK

适用于Android studio 3.5以上的版本

1. 环境搭建准备

确定安装了NDK和CMake,3.5版本还要下载LLDB,3.6版本默认有,不需要安装。
(七)编写具有.so文件的Android APK_第1张图片

2. 新建项目,并完成配置

(七)编写具有.so文件的Android APK_第2张图片
拉到最下面,选择Native c++
(七)编写具有.so文件的Android APK_第3张图片
打开夜神模拟器执行下面操作
(七)编写具有.so文件的Android APK_第4张图片

填写项目信息。在添加SDK的时候,不要超出上面的SDK版本,这里也就是不能超过22,需要注意,不过新建之后还可以修改
(七)编写具有.so文件的Android APK_第5张图片
(七)编写具有.so文件的Android APK_第6张图片
构建过程中报错了,所以要构建
在这里插入图片描述
(七)编写具有.so文件的Android APK_第7张图片
(七)编写具有.so文件的Android APK_第8张图片
确定NDK安装位置
如果是离线包形式的ndk,选择离线包目录,如果是我们Android studio 中下载的,去这个目录下寻找,可能找不到,默认隐藏了,可以直接到SDK目录找ndk
(七)编写具有.so文件的Android APK_第9张图片
点击ok后,等待构建完成
(七)编写具有.so文件的Android APK_第10张图片
(七)编写具有.so文件的Android APK_第11张图片

3. 声明native方法,即编写c或c++方法

就是去创建 c 或 c++ 方法

首先先切换项目到project
(七)编写具有.so文件的Android APK_第12张图片
新建一个class(注意位置)
(七)编写具有.so文件的Android APK_第13张图片
输入名称
(七)编写具有.so文件的Android APK_第14张图片
输入下面代码(注意:灰色部分是自动生成的,不要手动输入)
(七)编写具有.so文件的Android APK_第15张图片

4. 生成头文件,即使用javac去编译,生成.class文件

(七)编写具有.so文件的Android APK_第16张图片
在当前目录下打开cmd
(七)编写具有.so文件的Android APK_第17张图片
使用javac 编译该class
在这里插入图片描述

然后进入到java目录内
(七)编写具有.so文件的Android APK_第18张图片
使用 javah 命令生成生成c\c++头文件(jni开发第一步)
(七)编写具有.so文件的Android APK_第19张图片
将生成的文件,剪贴到cpp目录下
(七)编写具有.so文件的Android APK_第20张图片
然后删除cpp目录下的该文件
(七)编写具有.so文件的Android APK_第21张图片

5. 编写头文件函数

在 CPP 目录内新建文件 main.c
(七)编写具有.so文件的Android APK_第22张图片
(七)编写具有.so文件的Android APK_第23张图片
编写文件,将头文件包含进来,并实现sayHello方法

#include "com_example_mytest_myJNI.h"

JNIEXPORT jstring JNICALL Java_com_example_mytest_myJNI_sayHello(JNIEnv *env,jclass jobj){
    return (*env) ->NewStringUTF(env,"hello c++");
}

(有红色报错,不着急)
(七)编写具有.so文件的Android APK_第24张图片

使用CMake生成so文件,去修改CmakeLists.txt
(七)编写具有.so文件的Android APK_第25张图片
(七)编写具有.so文件的Android APK_第26张图片

6. 生成so库并在项目中调用

1-----重构项目
(七)编写具有.so文件的Android APK_第27张图片
2----查看so文件
(七)编写具有.so文件的Android APK_第28张图片

3—将so文件放入项目中

新建一个目录
(七)编写具有.so文件的Android APK_第29张图片
(七)编写具有.so文件的Android APK_第30张图片
找到含有so文件的目录
在这里插入图片描述
将上面的文件复制到新建的目录下
(七)编写具有.so文件的Android APK_第31张图片
3----调用

进入 MainActivity,注释掉下面内容
(七)编写具有.so文件的Android APK_第32张图片
修改和添加新内容
(七)编写具有.so文件的Android APK_第33张图片
运行 app 到模拟器 查看效果
(七)编写具有.so文件的Android APK_第34张图片

7. 对刚刚生成的apk进行逆向分析

1----将 apk 拖入 Androd Killer

2----找 hello c++ 文本哪里来的
可以找到函数调用,但是函数没有逻辑内容。

3----分析可能在 so 文件中,我们使用 IDA-Pro 进行 so文件分析

4----查看该文件中的字符串
(七)编写具有.so文件的Android APK_第35张图片
就会多出来一个这个窗口
在这里插入图片描述
该窗口有我们所有的该apk使用到的字符串
在这里插入图片描述
双击该字符串,就会跳转到指定位置,进行修改或者查看

修改和保存的两个方法:

  • 可以通过 F2 进行修改和保存(需要注意鼠标放置的位置),第一次可以进行修改,再按F2进行保存
  • 也可以直接通过 patch 修改
    (七)编写具有.so文件的Android APK_第36张图片
    需要将hello c++!改为 hello world!
    百度 http://www.asciima.com/。通过字母进行查看ascll码

然后将修改写入文件:(一定要保存到文件)
(七)编写具有.so文件的Android APK_第37张图片
(七)编写具有.so文件的Android APK_第38张图片
然后需要关闭 IDA-Pro 。否则会占用文件,无法打包。

你可能感兴趣的:(Android逆向分析)