Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
SandHook
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
SandHook
Commits
7a8cde98
Commit
7a8cde98
authored
Jan 22, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add call origin trampoline
parent
cfa2690d
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
34 additions
and
4 deletions
+34
-4
arm32.S
app/src/main/cpp/trampoline/arch/arm32.S
+3
-0
arm64.S
app/src/main/cpp/trampoline/arch/arm64.S
+1
-1
trampoline.cpp
app/src/main/cpp/trampoline/trampoline.cpp
+21
-0
trampoline.h
app/src/main/cpp/trampoline/trampoline.h
+5
-0
trampoline_manager.cpp
app/src/main/cpp/trampoline/trampoline_manager.cpp
+4
-3
No files found.
app/src/main/cpp/trampoline/arch/arm32.S
View file @
7a8cde98
...
@@ -22,4 +22,7 @@ FUNCTION_END(DIRECT_JUMP_TRAMPOLINE)
...
@@ -22,4 +22,7 @@ FUNCTION_END(DIRECT_JUMP_TRAMPOLINE)
FUNCTION_START(INLINE_HOOK_TRAMPOLINE)
FUNCTION_START(INLINE_HOOK_TRAMPOLINE)
FUNCTION_END(INLINE_HOOK_TRAMPOLINE)
FUNCTION_END(INLINE_HOOK_TRAMPOLINE)
FUNCTION_START(CALL_ORIGIN_TRAMPOLINE)
FUNCTION_END(CALL_ORIGIN_TRAMPOLINE)
#endif
#endif
\ No newline at end of file
app/src/main/cpp/trampoline/arch/arm64.S
View file @
7a8cde98
...
@@ -63,7 +63,7 @@ FUNCTION_END(INLINE_HOOK_TRAMPOLINE)
...
@@ -63,7 +63,7 @@ FUNCTION_END(INLINE_HOOK_TRAMPOLINE)
FUNCTION_START(CALL_ORIGIN_TRAMPOLINE)
FUNCTION_START(CALL_ORIGIN_TRAMPOLINE)
ldr RegMethod, origin_art_method
ldr RegMethod, origin_art_method
ldr Reg0, addr_
target
ldr Reg0, addr_
origin
br Reg0
br Reg0
origin_art_method:
origin_art_method:
.long 0
.long 0
...
...
app/src/main/cpp/trampoline/trampoline.cpp
View file @
7a8cde98
...
@@ -82,6 +82,27 @@ namespace SandHook {
...
@@ -82,6 +82,27 @@ namespace SandHook {
}
}
};
};
class
CallOriginTrampoline
:
public
Trampoline
{
public
:
void
setOriginMethod
(
Code
originMethod
)
{
codeCopy
(
reinterpret_cast
<
Code
>
(
&
originMethod
),
OFFSET_CALL_ORIGIN_ART_METHOD
,
BYTE_POINT
);
}
void
setOriginCode
(
Code
originCode
)
{
codeCopy
(
reinterpret_cast
<
Code
>
(
&
originCode
),
OFFSET_CALL_ORIGIN_JUMP_ADDR
,
BYTE_POINT
);
}
protected
:
Size
codeLength
()
override
{
return
SIZE_CALL_ORIGIN_TRAMPOLINE
;
}
Code
templateCode
()
override
{
return
reinterpret_cast
<
Code
>
(
CALL_ORIGIN_TRAMPOLINE
);
}
};
}
}
#endif //SANDHOOK_TRAMPOLINE_CPP
#endif //SANDHOOK_TRAMPOLINE_CPP
app/src/main/cpp/trampoline/trampoline.h
View file @
7a8cde98
...
@@ -66,12 +66,17 @@
...
@@ -66,12 +66,17 @@
#define OFFSET_INLINE_ADDR_ORIGIN_METHOD 4 * 18
#define OFFSET_INLINE_ADDR_ORIGIN_METHOD 4 * 18
#define OFFSET_INLINE_OFFSET_ENTRY_CODE 4 * 20
#define OFFSET_INLINE_OFFSET_ENTRY_CODE 4 * 20
#define OFFSET_INLINE_ADDR_HOOK_METHOD 4 * 22
#define OFFSET_INLINE_ADDR_HOOK_METHOD 4 * 22
#define SIZE_CALL_ORIGIN_TRAMPOLINE 4 * 7
#define OFFSET_CALL_ORIGIN_ART_METHOD 4 * 3
#define OFFSET_CALL_ORIGIN_JUMP_ADDR 4 * 5
#else
#else
#endif
#endif
extern
"C"
void
DIRECT_JUMP_TRAMPOLINE
();
extern
"C"
void
DIRECT_JUMP_TRAMPOLINE
();
extern
"C"
void
INLINE_HOOK_TRAMPOLINE
();
extern
"C"
void
INLINE_HOOK_TRAMPOLINE
();
extern
"C"
void
REPLACEMENT_HOOK_TRAMPOLINE
();
extern
"C"
void
REPLACEMENT_HOOK_TRAMPOLINE
();
extern
"C"
void
CALL_ORIGIN_TRAMPOLINE
();
namespace
SandHook
{
namespace
SandHook
{
...
...
app/src/main/cpp/trampoline/trampoline_manager.cpp
View file @
7a8cde98
...
@@ -74,7 +74,7 @@ namespace SandHook {
...
@@ -74,7 +74,7 @@ namespace SandHook {
HookTrampoline
*
hookTrampoline
=
new
HookTrampoline
();
HookTrampoline
*
hookTrampoline
=
new
HookTrampoline
();
InlineHookTrampoline
*
inlineHookTrampoline
=
nullptr
;
InlineHookTrampoline
*
inlineHookTrampoline
=
nullptr
;
DirectJumpTrampoline
*
directJumpTrampoline
=
nullptr
;
DirectJumpTrampoline
*
directJumpTrampoline
=
nullptr
;
DirectJump
Trampoline
*
callOriginTrampoline
=
nullptr
;
CallOrigin
Trampoline
*
callOriginTrampoline
=
nullptr
;
Code
inlineHookTrampolineSpace
;
Code
inlineHookTrampolineSpace
;
Code
callOriginTrampolineSpace
;
Code
callOriginTrampolineSpace
;
Code
originEntry
;
Code
originEntry
;
...
@@ -105,13 +105,14 @@ namespace SandHook {
...
@@ -105,13 +105,14 @@ namespace SandHook {
//备份原始方法
//备份原始方法
if
(
backupMethod
!=
nullptr
)
{
if
(
backupMethod
!=
nullptr
)
{
callOriginTrampoline
=
new
DirectJump
Trampoline
();
callOriginTrampoline
=
new
CallOrigin
Trampoline
();
callOriginTrampoline
->
init
();
callOriginTrampoline
->
init
();
callOriginTrampolineSpace
=
allocExecuteSpace
(
callOriginTrampoline
->
getCodeLen
());
callOriginTrampolineSpace
=
allocExecuteSpace
(
callOriginTrampoline
->
getCodeLen
());
if
(
callOriginTrampolineSpace
==
0
)
if
(
callOriginTrampolineSpace
==
0
)
goto
label_error
;
goto
label_error
;
callOriginTrampoline
->
setExecuteSpace
(
callOriginTrampolineSpace
);
callOriginTrampoline
->
setExecuteSpace
(
callOriginTrampolineSpace
);
callOriginTrampoline
->
setJumpTarget
(
inlineHookTrampoline
->
getCallOriginCode
());
callOriginTrampoline
->
setOriginMethod
(
reinterpret_cast
<
unsigned
char
*>
(
originMethod
));
callOriginTrampoline
->
setOriginCode
(
inlineHookTrampoline
->
getCallOriginCode
());
hookTrampoline
->
callOrigin
=
callOriginTrampoline
;
hookTrampoline
->
callOrigin
=
callOriginTrampoline
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment