自己的Android 反外挂SDK,主要还是cpp代码,对自己的代码还是不太放心,还是找个工具测试测试
环境
windows 10 + Android Studio 4.0 + ndk r18b + MIX3 API28 root / Pixel2 API27 root
配置
1.模块的 build.gradle 中配置自己CMake参数
cmake{
arguments "-DANDROID_ARM_MODE=arm", "-DANDROID_STL=c++_shared", "-DANDROID_TOOLCHAIN=clang"
ndk {
abiFilters "armeabi-v7a"
}
}
2.在AndroidManifest.xml中application标签添加android:debuggable="true"属性(似乎没啥用哈)
3.把ndk目录下的asan动态库拷贝到工程中
动态库位置在 ${NDK_PATH}\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\7.0.2\lib\linux
动态库名大概是 libclang_rt.asan-*-android.so,比如我这里是armeabi-v7a,文件名就是 libclang_rt.asan-arm-android.so
把相应的库文件放在jniLibs相应的目录下
工程目录4.添加封装的shell脚本
如上图所示,创建一个resources/lib/[armeabi-v7a]目录,并创建一个wrap.sh文件,文件内容如下,可参考官网
#!/system/bin/sh
HERE="$(cd "$(dirname "$0")" && pwd)"
export ASAN_OPTIONS=log_to_syslog=false,allow_user_segv_handler=1,fast_unwind_on_fatal=1
ASAN_LIB=$(ls $HERE/libclang_rt.asan-*-android.so)
if [ -f "$HERE/libc++_shared.so" ]; then
export LD_PRELOAD="$ASAN_LIB $HERE/libc++_shared.so"
else
export LD_PRELOAD="$ASAN_LIB"
fi
"$@"
tips:我在官网的基础上多添加了一个fast_unwind_on_fatal=1选项(第三行末尾),可参考issue
!!!注意!!!:上面这个脚本每一行的换行符都需要从CRLF换成LF,不然运行时会报错说 No such file or directory,可参考issue,和网友提供解决方案,不过我用网友提供的决解方案后,发现还是报错(具体原因是在进行字符替换的时候将我脚本第一个字符'#'给删除了)。最后我是通过010Editor把脚本的0xD 0xA全部替换成0xA
粗暴。jpg在apk被安装后,这个wrap.sh会放在/data/app/<pkg-name>/lib/[arm]目录下,为了确保正确,可以手动执行一下脚本,不报错就ok
5.在CMakeLists.txt中设置各种标志
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -fsanitize=address")
6.编译-安装-运行
如果有崩溃,logcat过滤AddressSanitizer参看详细信息
网友评论