Skip to content

v0.3.0

Choose a tag to compare

@Qwanwin Qwanwin released this 28 May 10:01
· 10 commits to main since this release
98e0b06

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::mutex for memory operations and caching, ensuring safety in multi-threaded environments. (#15)
  • Memory Region Caching: Optimized scanning with /proc/self/maps caching 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 robustDlopen with fallback to full library paths using findLibraryPath. (#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, and x86 using PRIxPTR and SCNxPTR. (#28)

Improvements

  • Enhanced hex string validation and error handling across all modules. (#19)
  • Optimized macros in AndroHook.hpp for 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");