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
86cdff44
Commit
86cdff44
authored
Feb 03, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ReplaceHook]set x0
parent
5bc325a2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
2 deletions
+32
-2
sandhook.cpp
hooklib/src/main/cpp/sandhook.cpp
+11
-2
trampoline_manager.cpp
hooklib/src/main/cpp/trampoline/trampoline_manager.cpp
+21
-0
No files found.
hooklib/src/main/cpp/sandhook.cpp
View file @
86cdff44
...
...
@@ -85,6 +85,10 @@ bool doHookWithReplacement(JNIEnv* env,
if
(
entryPointFormInterpreter
!=
NULL
)
{
originMethod
->
setInterpreterCodeEntry
(
entryPointFormInterpreter
);
}
if
(
hookTrampoline
->
callOrigin
!=
nullptr
)
{
backupMethod
->
setQuickCodeEntry
(
hookTrampoline
->
callOrigin
->
getCode
());
backupMethod
->
flushCache
();
}
originMethod
->
flushCache
();
return
true
;
}
else
{
...
...
@@ -144,17 +148,19 @@ Java_com_swift_sandhook_SandHook_hookMethod(JNIEnv *env, jclass type, jobject or
bool
isInlineHook
=
false
;
int
mode
=
reinterpret_cast
<
int
>
(
hookMode
);
if
(
mode
==
INLINE
)
{
if
(
!
origin
->
isCompiled
())
{
if
(
SDK_INT
>=
ANDROID_N
)
{
Size
threadId
=
getAddressFromJavaByCallMethod
(
env
,
"com/swift/sandhook/SandHook"
,
"getThreadId"
);
isInlineHook
=
compileMethod
(
origin
,
reinterpret_cast
<
void
*>
(
threadId
));
isInlineHook
=
origin
->
compile
(
env
);
}
}
else
{
isInlineHook
=
true
;
}
goto
label_hook
;
}
else
if
(
mode
==
REPLACE
)
{
isInlineHook
=
false
;
goto
label_hook
;
}
...
...
@@ -174,6 +180,9 @@ Java_com_swift_sandhook_SandHook_hookMethod(JNIEnv *env, jclass type, jobject or
isInlineHook
=
true
;
}
label_hook
:
char
*
msg
;
if
(
isInlineHook
&&
trampolineManager
.
canSafeInline
(
origin
,
msg
))
{
...
...
hooklib/src/main/cpp/trampoline/trampoline_manager.cpp
View file @
86cdff44
...
...
@@ -69,7 +69,9 @@ namespace SandHook {
return
getHookTrampoline
(
originMethod
);
HookTrampoline
*
hookTrampoline
=
new
HookTrampoline
();
ReplacementHookTrampoline
*
replacementHookTrampoline
=
nullptr
;
CallOriginTrampoline
*
callOriginTrampoline
=
nullptr
;
Code
replacementHookTrampolineSpace
;
Code
callOriginTrampolineSpace
;
replacementHookTrampoline
=
new
ReplacementHookTrampoline
();
replacementHookTrampoline
->
init
();
...
...
@@ -81,12 +83,31 @@ namespace SandHook {
replacementHookTrampoline
->
setHookMethod
(
reinterpret_cast
<
Code
>
(
hookMethod
));
hookTrampoline
->
replacement
=
replacementHookTrampoline
;
if
(
backupMethod
!=
nullptr
)
{
callOriginTrampoline
=
new
CallOriginTrampoline
();
checkThumbCode
(
callOriginTrampoline
,
getEntryCode
(
originMethod
));
callOriginTrampoline
->
init
();
callOriginTrampolineSpace
=
allocExecuteSpace
(
callOriginTrampoline
->
getCodeLen
());
if
(
callOriginTrampolineSpace
==
0
)
goto
label_error
;
callOriginTrampoline
->
setExecuteSpace
(
callOriginTrampolineSpace
);
callOriginTrampoline
->
setOriginMethod
(
reinterpret_cast
<
Code
>
(
originMethod
));
Code
originCode
=
getEntryCode
(
originMethod
);
if
(
callOriginTrampoline
->
isThumbCode
())
{
originCode
=
callOriginTrampoline
->
getThumbCodePcAddress
(
originCode
);
}
callOriginTrampoline
->
setOriginCode
(
originCode
);
hookTrampoline
->
callOrigin
=
callOriginTrampoline
;
}
trampolines
[
originMethod
]
=
hookTrampoline
;
return
hookTrampoline
;
label_error
:
delete
hookTrampoline
;
delete
replacementHookTrampoline
;
if
(
callOriginTrampoline
!=
nullptr
)
delete
callOriginTrampoline
;
return
nullptr
;
}
...
...
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