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
b8775fba
Commit
b8775fba
authored
Jan 23, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix thumb code offset
parent
6ad5dca1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
22 additions
and
15 deletions
+22
-15
native-lib.cpp
app/src/main/cpp/native-lib.cpp
+1
-5
trampoline.h
app/src/main/cpp/trampoline/trampoline.h
+7
-3
trampoline_manager.cpp
app/src/main/cpp/trampoline/trampoline_manager.cpp
+8
-6
MainActivity.java
app/src/main/java/com/swift/sandhook/MainActivity.java
+6
-1
No files found.
app/src/main/cpp/native-lib.cpp
View file @
b8775fba
...
...
@@ -115,11 +115,7 @@ bool doHookWithInline(JNIEnv* env,
//backup
memcpy
(
backupMethod
,
originMethod
,
SandHook
::
CastArtMethod
::
size
);
Code
callOriginCode
=
hookTrampoline
->
callOrigin
->
getCode
();
if
(
hookTrampoline
->
callOrigin
->
isThumbCode
())
{
callOriginCode
=
hookTrampoline
->
callOrigin
->
getThumbCodePcAddress
(
callOriginCode
);
}
SandHook
::
CastArtMethod
::
entryPointQuickCompiled
->
set
(
backupMethod
,
callOriginCode
);
SandHook
::
CastArtMethod
::
entryPointQuickCompiled
->
set
(
backupMethod
,
hookTrampoline
->
callOrigin
->
getCode
());
if
(
SDK_INT
>=
ANDROID_N
)
{
disableCompilable
(
backupMethod
);
...
...
app/src/main/cpp/trampoline/trampoline.h
View file @
b8775fba
...
...
@@ -106,6 +106,7 @@ namespace SandHook {
class
Trampoline
{
public
:
Code
code
;
Trampoline
()
=
default
;
...
...
@@ -152,7 +153,11 @@ namespace SandHook {
}
Code
getCode
()
{
return
code
;
if
(
isThumbCode
())
{
return
getThumbCodePcAddress
(
code
);
}
else
{
return
code
;
}
}
Size
getCodeLen
()
{
...
...
@@ -169,7 +174,7 @@ namespace SandHook {
//tweak imm of a 32bit asm code
void
tweakOpImm
(
Size
codeOffset
,
unsigned
char
imm
)
{
Code32Bit
code32Bit
;
code32Bit
.
code
=
*
reinterpret_cast
<
uint32_t
*>
(((
Size
)
getCode
()
+
codeOffset
));
code32Bit
.
code
=
*
reinterpret_cast
<
uint32_t
*>
(((
Size
)
code
+
codeOffset
));
if
(
isBigEnd
())
{
code32Bit
.
op
.
op4
=
imm
;
}
else
{
...
...
@@ -193,7 +198,6 @@ namespace SandHook {
virtual
Size
codeLength
()
=
0
;
virtual
Code
templateCode
()
=
0
;
private
:
Code
code
;
Code
tempCode
;
Size
codeLen
;
bool
isThumb
=
false
;
...
...
app/src/main/cpp/trampoline/trampoline_manager.cpp
View file @
b8775fba
...
...
@@ -91,7 +91,11 @@ namespace SandHook {
inlineHookTrampoline
->
setOriginMethod
(
reinterpret_cast
<
Code
>
(
originMethod
));
inlineHookTrampoline
->
setHookMethod
(
reinterpret_cast
<
Code
>
(
hookMethod
));
inlineHookTrampoline
->
setEntryCodeOffset
(
quickCompileOffset
);
inlineHookTrampoline
->
setOriginCode
(
getEntryCode
(
originMethod
));
if
(
inlineHookTrampoline
->
isThumbCode
())
{
inlineHookTrampoline
->
setOriginCode
(
inlineHookTrampoline
->
getThumbCodeAddress
(
getEntryCode
(
originMethod
)));
}
else
{
inlineHookTrampoline
->
setOriginCode
(
getEntryCode
(
originMethod
));
}
hookTrampoline
->
inlineSecondory
=
inlineHookTrampoline
;
//注入 EntryCode
...
...
@@ -105,12 +109,10 @@ namespace SandHook {
if
(
directJumpTrampoline
->
isThumbCode
())
{
originEntry
=
directJumpTrampoline
->
getThumbCodeAddress
(
originEntry
);
directJumpTrampoline
->
setExecuteSpace
(
originEntry
);
directJumpTrampoline
->
setJumpTarget
(
directJumpTrampoline
->
getThumbCodePcAddress
(
inlineHookTrampoline
->
getCode
()));
}
else
{
directJumpTrampoline
->
setExecuteSpace
(
originEntry
);
directJumpTrampoline
->
setJumpTarget
(
inlineHookTrampoline
->
getCode
());
}
directJumpTrampoline
->
setExecuteSpace
(
originEntry
);
directJumpTrampoline
->
setJumpTarget
(
inlineHookTrampoline
->
getCode
());
hookTrampoline
->
inlineJump
=
directJumpTrampoline
;
//备份原始方法
...
...
app/src/main/java/com/swift/sandhook/MainActivity.java
View file @
b8775fba
...
...
@@ -74,10 +74,15 @@ public class MainActivity extends AppCompatActivity {
return
true
;
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
}
public
static
int
methodBeHooked
(
int
a
,
int
b
)
{
a
=
a
+
1
+
2
;
b
=
b
+
a
+
3
;
//Toast.makeText(MyApp.context, "call origin!", Toast.LENGTH_SHORT).show(
);
Log
.
e
(
"MainActivity"
,
"call methodBeHooked origin"
);
return
a
+
b
;
}
...
...
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