【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )(一)

简介: 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )(一)

文章目录

一、Android 平台代码调试器代码

二、Android.mk 构建脚本内容

三、Application.mk 构建脚本内容

四、正式编译






一、Android 平台代码调试器代码


将代码放在 Y:\002_WorkSpace\001_AS\HackTool 目录下 , 之后需要用到该路径 ;


image.png






二、Android.mk 构建脚本内容


Android.mk 构建脚本 更详细的配置方法 , 参考 https://developer.android.google.cn/ndk/guides/android_mk#tiv 文档 ;



完整的 Android.mk 构建脚本 : 每行配置都添加了详细注释 ;


# 代码调试器核心代码 
JNI_SRC     := HackTool.cpp main.cpp public.cpp Ptrace.cpp
# base 代码路径
BASE_SRC    := $(wildcard ./Base/*.cpp)
# json 代码路径
JSON_SRC    := $(wildcard ./Json/*.cpp)
# zlib 代码路径
ZLIB_SRC       := $(wildcard ./zlib/*.c) $(wildcard ./zlib/*.cpp)
# 当前路径
LOCAL_PATH    := $(call my-dir)
# 头文件路径
SRC_INCLUDES    += $(LOCAL_PATH)/zlib $(LOCAL_PATH)/json $(LOCAL_PATH)/base
####libNative####
include     $(CLEAR_VARS)
LOCAL_ARM_MODE    := arm
# 指定头文件路径
LOCAL_C_INCLUDES     += $(LOCAL_PATH) $(SRC_INCLUDES)
# 链接的动态库
LOCAL_LDLIBS    += -llog -latomic
# 指定代码依赖于特定 C++ 功能
LOCAL_CPPFLAGS    += -frtti -fexceptions -std=c++11 -DDEBUG -DTHUMB
# 静态块前后是有顺序的,前面的依赖后面的库
LOCAL_MODULE    := hacktool
# 指定代码路径 
LOCAL_SRC_FILES   := $(JNI_SRC) $(JSON_SRC) $(ZLIB_SRC)
# 编译出来是一个可以在 Android 的 adb shell 命令行可执行的程序 
include     $(BUILD_EXECUTABLE)
####libBridge####
include     $(CLEAR_VARS)
# 指定链接库路径
LOCAL_LDLIBS    += -llog
# 指定编译模块名称
LOCAL_MODULE    := bridge
# 指定 C 代码路径
LOCAL_SRC_FILES   := bridge.c
#NDK_APP_DST_DIR    := ../Debug/$(TARGET_ARCH_ABI)
# 编译目标是动态库 
include     $(BUILD_SHARED_LIBRARY)





三、Application.mk 构建脚本内容


Application.mk 构建脚本编写 , 参考 https://developer.android.google.cn/ndk/guides/application_mk 博客 ;



Application.mk 构建脚本内容 : 每行配置都添加了详细注释 ;


# 指定要编译的 CPUU 架构
APP_ABI     := armeabi armeabi-v7a x86
# 指定用于此应用的 C++ 标准库
APP_STL     := gnustl_static
# 指定编译的 Android 平台 , 一般是 Android 兼容的最低版本 
APP_PLATFORM    := android-19






四、正式编译


ndk-build 脚本的用法参考 https://developer.android.google.cn/ndk/guides/ndk-build 文档 ;



在 命令行中断 , 进入 Y:\002_WorkSpace\001_AS\HackTool 路径 , 这是 NDK 项目的存放路径 ;


执行


Y:/001_DevelopTools/002_Android_SDK/ndk/android-ndk-r14b-windows-x86_64/android-ndk-r14b/ndk-build.cmd NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk


命令 , 编译 Android 平台的代码调试器 ;


其中 Y:/001_DevelopTools/002_Android_SDK/ndk/android-ndk-r14b-windows-x86_64/android-ndk-r14b/ndk-build.cmd 是 android-ndk-r14b 版本 ndk 的 ndk-build.cmd 编译工具 , 注意不要用错版本 ;


NDK_PROJECT_PATH=. 用于指定 NDK 项目的路径 , 一般都是在当前路径执行 ;


APP_BUILD_SCRIPT=./Android.mk 用于指定 Android.mk 构建脚本 ;


NDK_APPLICATION_MK=./Application.mk 用于指定 Application.mk 构建脚本 ;


目录
相关文章
|
1月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
276 76
|
2月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
85 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
2月前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
126 1
|
Java Android开发 C++
【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )(二)
【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )(二)
609 0
【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )(二)
|
7月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
253 1
|
9月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
215 4
|
10月前
|
XML Java Android开发
Android Studio2.2 中支持NDK开发HelloJNI例子
Android Studio2.2 中支持NDK开发HelloJNI例子
46 0
|
Android开发
【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )(二)
【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )(二)
449 0
|
Java Android开发 C++
【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives )
【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives )
716 0
|
算法 Java 编译器
Android NDK开发初试(基础)
首先,什么是NDK开发,听到这个词,我的第一感觉是高大上的,其实倒也没错,NDK在Android开发中属于偏底层的,需要与C++等进行联系,它没有像应用层开发那么灵活,但是作为开发者,我们必须了解其简单的使用,及为什么要使用它?
348 0

热门文章

最新文章