66#include < string>
77#include < cstdint>
88
9+ // thanks to shmoo and joeyjurjens for the usefull stuff under this comment.
910
10- #include " Logger.h"
11-
12-
13- void hook (void *offset, void *ptr, void **orig) {
14- #if defined(__aarch64__)
15- A64HookFunction (offset, ptr, orig);
16- #else
17- MSHookFunction (offset, ptr, orig);
18- #endif
19- }
20-
21-
22- #if defined(__aarch64__)
23-
11+ #if defined(__aarch64__) // Compile for arm64 lib only
2412#include < And64InlineHook/And64InlineHook.hpp>
2513
26- #define HOOK (offset, ptr, orig ) \
27- A64HookFunction ((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), \
28- (void *)ptr, (void **)&orig)
14+ #define HOOK (offset, ptr, orig ) A64HookFunction((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), (void *)ptr, (void **)&orig)
15+ #define HOOK_LIB (lib, offset, ptr, orig ) A64HookFunction((void *)getAbsoluteAddress(OBFUSCATE (lib), string2Offset(OBFUSCATE (offset))), (void *)ptr, (void **)&orig)
2916
30- #define HOOK_LIB (lib, offset, ptr, orig ) \
31- A64HookFunction ((void *)getAbsoluteAddress(OBFUSCATE (lib), string2Offset(OBFUSCATE (offset))), \
32- (void *)ptr, (void **)&orig)
17+ #define HOOK_NO_ORIG (offset, ptr ) A64HookFunction((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), (void *)ptr, NULL )
18+ #define HOOK_LIB_NO_ORIG (lib, offset, ptr ) A64HookFunction((void *)getAbsoluteAddress(OBFUSCATE (lib), string2Offset(OBFUSCATE (offset))), (void *)ptr, NULL )
3319
34- #define HOOK_NO_ORIG (offset, ptr ) \
35- A64HookFunction ((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), \
36- (void *)ptr, nullptr)
20+ #define HOOKSYM (sym, ptr, org ) A64HookFunction(dlsym(dlopen(targetLibName, 4 ), OBFUSCATE (sym)), (void *)ptr, (void **)&org)
21+ #define HOOKSYM_LIB (lib, sym, ptr, org ) A64HookFunction(dlsym(dlopen(OBFUSCATE (lib), 4 ), OBFUSCATE (sym)), (void *)ptr, (void **)&org)
3722
38- #define HOOKSYM (sym, ptr, orig ) \
39- A64HookFunction (dlsym(dlopen(targetLibName, RTLD_NOW ), OBFUSCATE(sym)), \
40- (void *)ptr, (void **)&orig)
23+ #define HOOKSYM_NO_ORIG (sym, ptr ) A64HookFunction(dlsym(dlopen(targetLibName, 4 ), OBFUSCATE (sym)), (void *)ptr, NULL )
24+ #define HOOKSYM_LIB_NO_ORIG (lib, sym, ptr ) A64HookFunction(dlsym(dlopen(OBFUSCATE (lib), 4 ), OBFUSCATE (sym)), (void *)ptr, NULL )
4125
42- #define HOOKSYM_NO_ORIG (sym, ptr ) \
43- A64HookFunction (dlsym(dlopen(targetLibName, RTLD_NOW ), OBFUSCATE(sym)), \
44- (void *)ptr, nullptr)
26+ #else // Compile for armv7 lib only. Do not worry about greyed out highlighting code, it still works
4527
46- #else
4728#include < Substrate/SubstrateHook.h>
4829#include < Substrate/CydiaSubstrate.h>
4930
50- #define HOOK (offset, ptr, orig ) \
51- MSHookFunction ((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), \
52- (void *)ptr, (void **)&orig)
53-
54- #define HOOK_LIB (lib, offset, ptr, orig ) \
55- MSHookFunction ((void *)getAbsoluteAddress(OBFUSCATE (lib), string2Offset(OBFUSCATE (offset))), \
56- (void *)ptr, (void **)&orig)
31+ #define HOOK (offset, ptr, orig ) MSHookFunction((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), (void *)ptr, (void **)&orig)
32+ #define HOOK_LIB (lib, offset, ptr, orig ) MSHookFunction((void *)getAbsoluteAddress(OBFUSCATE (lib), string2Offset(OBFUSCATE (offset))), (void *)ptr, (void **)&orig)
5733
58- #define HOOK_NO_ORIG (offset, ptr ) \
59- MSHookFunction ((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), \
60- (void *)ptr, nullptr)
34+ #define HOOK_NO_ORIG (offset, ptr ) MSHookFunction((void *)getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE (offset))), (void *)ptr, NULL )
35+ #define HOOK_LIB_NO_ORIG (lib, offset, ptr ) MSHookFunction((void *)getAbsoluteAddress(OBFUSCATE (lib), string2Offset(OBFUSCATE (offset))), (void *)ptr, NULL )
6136
62- #define HOOKSYM (sym, ptr, orig ) \
63- MSHookFunction (dlsym(dlopen(targetLibName, RTLD_NOW ), OBFUSCATE(sym)), \
64- (void *)ptr, (void **)&orig)
37+ #define HOOKSYM (sym, ptr, org ) MSHookFunction(dlsym(dlopen(targetLibName, 4 ), OBFUSCATE (sym)), (void *)ptr, (void **)&org)
38+ #define HOOKSYM_LIB (lib, sym, ptr, org ) MSHookFunction(dlsym(dlopen(OBFUSCATE (lib), 4 ), OBFUSCATE (sym)), (void *)ptr, (void **)&org)
6539
66- #define HOOKSYM_NO_ORIG (sym, ptr ) \
67- MSHookFunction (dlsym(dlopen(targetLibName, RTLD_NOW ), OBFUSCATE(sym)), \
68- (void *)ptr, nullptr)
40+ #define HOOKSYM_NO_ORIG (sym, ptr ) MSHookFunction(dlsym(dlopen(targetLibName, 4 ), OBFUSCATE (sym)), (void *)ptr, NULL )
41+ #define HOOKSYM_LIB_NO_ORIG (lib, sym, ptr ) MSHookFunction(dlsym(dlopen(OBFUSCATE (lib), 4 ), OBFUSCATE (sym)), (void *)ptr, NULL )
6942
7043#endif
7144
45+ // Obfuscate offset
46+ #define OBFUSCATEOFFSET (str ) string2Offset(OBFUSCATE (str)) // Encrypt offset
7247
73- #define OBFUSCATEOFFSET (str ) string2Offset(OBFUSCATE (str))
74-
75-
76- inline void patchOffset (const char *lib, uint64_t offset, const std::string &hex) {
77- MemoryPatch patch = MemoryPatch::createWithHex (lib, offset, hex);
78- if (!patch.isValid ()) {
79- LOGE (" Invalid patch offset: 0x%llX" , offset);
48+ // Patching a offset without switch.
49+ void patchOffset (const char *fileName, uint64_t offset, std::string hexBytes) {
50+ MemoryPatch patch = MemoryPatch::createWithHex (fileName, offset, hexBytes);
51+ if (!patch.isValid ()){
52+ LOGE (OBFUSCATE (" Failing offset: 0x%llu, please re-check the hex you entered." ), offset);
53+ return ;
54+ }
55+ if (!patch.Modify ()) {
56+ LOGE (OBFUSCATE (" Something went wrong while patching this offset: 0x%llu" ), offset);
8057 return ;
8158 }
82- patch.Modify ();
8359}
8460
85- inline void patchOffset (uint64_t offset, const std::string &hex) {
86- patchOffset (targetLibName, offset, hex);
61+ void patchOffset (uint64_t offset, std::string hexBytes) {
62+ MemoryPatch patch = MemoryPatch::createWithHex (targetLibName, offset, hexBytes);
63+ if (!patch.isValid ()){
64+ LOGE (OBFUSCATE (" Failing offset: 0x%llu, please re-check the hex you entered." ), offset);
65+ return ;
66+ }
67+ if (!patch.Modify ()) {
68+ LOGE (OBFUSCATE (" Something went wrong while patching this offset: 0x%llu" ), offset);
69+ return ;
70+ }
8771}
8872
89- #define PATCHOFFSET (offset, hex ) \
90- patchOffset (string2Offset(OBFUSCATE (offset)), OBFUSCATE(hex))
91-
92- #define PATCHOFFSET_LIB (lib, offset, hex ) \
93- patchOffset (OBFUSCATE (lib), string2Offset(OBFUSCATE (offset)), OBFUSCATE(hex))
94-
95-
9673inline void patchOffsetSym (uintptr_t addr,
9774 const std::string &hex,
9875 bool enable) {
@@ -121,6 +98,8 @@ inline void patchOffsetSym(uintptr_t addr,
12198 }
12299}
123100
101+ #define PATCHOFFSET (offset, hex ) patchOffset(string2Offset(OBFUSCATE (offset)), OBFUSCATE (hex))
102+ #define PATCHOFFSET_LIB (lib, offset, hex ) patchOffset(OBFUSCATE (lib), string2Offset(OBFUSCATE (offset)), OBFUSCATE (hex))
124103
125104#define PATCH_SYM_SWITCH (sym, hex, state ) \
126105patchOffsetSym ((uintptr_t )dlsym(dlopen(targetLibName, RTLD_NOW ), OBFUSCATE(sym)), \
@@ -129,5 +108,6 @@ patchOffsetSym((uintptr_t)dlsym(dlopen(targetLibName, RTLD_NOW), OBFUSCATE(sym))
129108#define PATCH_LIB_SYM_SWITCH (lib, sym, hex, state ) \
130109patchOffsetSym ((uintptr_t )dlsym(dlopen(OBFUSCATE (lib), RTLD_NOW), OBFUSCATE(sym)), \
131110 OBFUSCATE(hex), state)
111+
112+ #endif // ANDROID_MOD_MENU_MACROS_H
132113
133- #endif // ANDROID_MOD_MENU_MACROS_H
0 commit comments