v0.3.0
Androline v0.3.0
Release Date: May 28, 2025
Welcome to Androline v0.3.0! 🚀 This native Android development library provides powerful tools for memory manipulation, scanning, and library patching with safety and efficiency. This release introduces new features, performance improvements, and bug fixes to enhance your Android development experience.
What's New
- String Obfuscation: Encrypt sensitive strings (library names, offsets, hex) using XOR to protect against static analysis. (#12)
- Thread Safety: Added
std::mutexfor memory operations and caching, ensuring safety in multi-threaded environments. (#15) - Memory Region Caching: Optimized scanning with
/proc/self/mapscaching to reduce I/O overhead. (#18) - Original Bytes Storage: Support for saving and restoring original bytes for reversible memory patching. (#20)
- Robust Library Loading: Implemented
robustDlopenwith fallback to full library paths usingfindLibraryPath. (#22) - Unique Module Logging: Per-module logging tags (
Androline,AndroWriteData,AndroUtils,AndroHook,AndroScanner) for easier debugging via logcat. (#25) - Library Path Search: Search for library paths in system directories like
/system/lib64/and/data/app/. (#23) - Multi-Architecture Support: Full compatibility with
arm64-v8a,armeabi-v7a, andx86usingPRIxPTRandSCNxPTR. (#28)
Improvements
- Enhanced hex string validation and error handling across all modules. (#19)
- Optimized macros in
AndroHook.hppfor flexible and secure patching. (#21) - Improved internal documentation with informative logging for debugging. (#26)
Notes
- Ensure NDK version 24.0.8215888 and CMake 3.22.1 for build compatibility.
- Tested on Android API 21 and above.
- See CONTRIBUTING.md for contribution guidelines and README.md for usage instructions.
Usage Example
#include "AndroHook.hpp"
#include "AndroWriteData.hpp"
const char* targetLibName = OBFUSCATE("libtarget.so");
std::string libPath = Androline::Memory::findLibraryPath(targetLibName);
void* handle = Androline::Memory::robustDlopen(targetLibName, RTLD_LAZY);
ANDROHOOK("0x1234", "9090"); // Patch memory
std::vector<uintptr_t> results = ANDROHOOK_SCAN("\xDE\xAD\xBE\xEF", "xxxx");