【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
文章目錄
- 一、Android 平臺代碼調試器代碼
- 二、Android.mk 構建腳本內容
- 三、Application.mk 構建腳本內容
- 四、正式編譯
- 五、博客資源
一、Android 平臺代碼調試器代碼
將代碼放在 Y:\002_WorkSpace\001_AS\HackTool 目錄下 , 之后需要用到該路徑 ;
二、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 構建腳本 ;
命令行輸出 :
Microsoft Windows [版本 10.0.19041.1288] (c) Microsoft Corporation。保留所有權利。Y:\002_WorkSpace\001_AS\HackTool>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 [armeabi] Compile thumb : bridge <= bridge.c [armeabi] SharedLibrary : libbridge.so [armeabi] Install : libbridge.so => libs/armeabi/libbridge.so [armeabi] Compile++ arm : hacktool <= HackTool.cpp [armeabi] Compile++ arm : hacktool <= main.cpp [armeabi] Compile++ arm : hacktool <= public.cpp [armeabi] Compile++ arm : hacktool <= Ptrace.cpp [armeabi] Compile++ arm : hacktool <= json_reader.cpp [armeabi] Compile++ arm : hacktool <= json_value.cpp [armeabi] Compile++ arm : hacktool <= json_writer.cpp [armeabi] Compile arm : hacktool <= adler32.c [armeabi] Compile arm : hacktool <= compress.c [armeabi] Compile arm : hacktool <= crc32.c [armeabi] Compile arm : hacktool <= deflate.c [armeabi] Compile arm : hacktool <= gzclose.c [armeabi] Compile arm : hacktool <= gzlib.c [armeabi] Compile arm : hacktool <= gzread.c [armeabi] Compile arm : hacktool <= gzwrite.c [armeabi] Compile arm : hacktool <= infback.c [armeabi] Compile arm : hacktool <= inffast.c [armeabi] Compile arm : hacktool <= inflate.c [armeabi] Compile arm : hacktool <= inftrees.c [armeabi] Compile arm : hacktool <= trees.c [armeabi] Compile arm : hacktool <= uncompr.c [armeabi] Compile arm : hacktool <= zutil.c [armeabi] Compile++ arm : hacktool <= Compressor.cpp [armeabi] Executable : hacktool [armeabi] Install : hacktool => libs/armeabi/hacktool [armeabi-v7a] Compile thumb : bridge <= bridge.c [armeabi-v7a] SharedLibrary : libbridge.so [armeabi-v7a] Install : libbridge.so => libs/armeabi-v7a/libbridge.so [armeabi-v7a] Compile++ arm : hacktool <= HackTool.cpp [armeabi-v7a] Compile++ arm : hacktool <= main.cpp [armeabi-v7a] Compile++ arm : hacktool <= public.cpp [armeabi-v7a] Compile++ arm : hacktool <= Ptrace.cpp [armeabi-v7a] Compile++ arm : hacktool <= json_reader.cpp [armeabi-v7a] Compile++ arm : hacktool <= json_value.cpp [armeabi-v7a] Compile++ arm : hacktool <= json_writer.cpp [armeabi-v7a] Compile arm : hacktool <= adler32.c [armeabi-v7a] Compile arm : hacktool <= compress.c [armeabi-v7a] Compile arm : hacktool <= crc32.c [armeabi-v7a] Compile arm : hacktool <= deflate.c [armeabi-v7a] Compile arm : hacktool <= gzclose.c [armeabi-v7a] Compile arm : hacktool <= gzlib.c [armeabi-v7a] Compile arm : hacktool <= gzread.c [armeabi-v7a] Compile arm : hacktool <= gzwrite.c [armeabi-v7a] Compile arm : hacktool <= infback.c [armeabi-v7a] Compile arm : hacktool <= inffast.c [armeabi-v7a] Compile arm : hacktool <= inflate.c [armeabi-v7a] Compile arm : hacktool <= inftrees.c [armeabi-v7a] Compile arm : hacktool <= trees.c [armeabi-v7a] Compile arm : hacktool <= uncompr.c [armeabi-v7a] Compile arm : hacktool <= zutil.c [armeabi-v7a] Compile++ arm : hacktool <= Compressor.cpp [armeabi-v7a] Executable : hacktool [armeabi-v7a] Install : hacktool => libs/armeabi-v7a/hacktool [x86] Compile : bridge <= bridge.c [x86] SharedLibrary : libbridge.so [x86] Install : libbridge.so => libs/x86/libbridge.so [x86] Compile++ : hacktool <= HackTool.cpp [x86] Compile++ : hacktool <= main.cpp [x86] Compile++ : hacktool <= public.cpp [x86] Compile++ : hacktool <= Ptrace.cpp [x86] Compile++ : hacktool <= json_reader.cpp [x86] Compile++ : hacktool <= json_value.cpp [x86] Compile++ : hacktool <= json_writer.cpp [x86] Compile : hacktool <= adler32.c [x86] Compile : hacktool <= compress.c [x86] Compile : hacktool <= crc32.c [x86] Compile : hacktool <= deflate.c [x86] Compile : hacktool <= gzclose.c [x86] Compile : hacktool <= gzlib.c [x86] Compile : hacktool <= gzread.c [x86] Compile : hacktool <= gzwrite.c [x86] Compile : hacktool <= infback.c [x86] Compile : hacktool <= inffast.c [x86] Compile : hacktool <= inflate.c [x86] Compile : hacktool <= inftrees.c [x86] Compile : hacktool <= trees.c [x86] Compile : hacktool <= uncompr.c [x86] Compile : hacktool <= zutil.c [x86] Compile++ : hacktool <= Compressor.cpp [x86] Executable : hacktool [x86] Install : hacktool => libs/x86/hacktoolY:\002_WorkSpace\001_AS\HackTool>編譯后 , 在 ndk 工程目錄下生成了 libs 和 obj 目錄 ;
libs 目錄下是編譯結果 , 分別表示不同 cpu 架構的編譯結果 ;
Y:\002_WorkSpace\001_AS\HackTool\libs\x86\hacktool 是編譯出來可以在 x86 手機 , 也就是電腦上的 Android 模擬器中 , 可以運行的 Android 代碼調試器 程序 ;
五、博客資源
CSDN 下載 : https://download.csdn.net/download/han1202012/35933121
總結
以上是生活随笔為你收集整理的【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】代码调试器开发
- 下一篇: 【Android 逆向】修改运行中的 A