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
a3329836
Commit
a3329836
authored
Jan 31, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add backup method stubs & remove error flag setting
parent
e0d65df0
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
131 additions
and
16 deletions
+131
-16
CustmizeHooker.java
...n/java/com/swift/sandhook/testHookers/CustmizeHooker.java
+0
-6
sandhook.cpp
hooklib/src/main/cpp/sandhook.cpp
+0
-9
BackupMethodStubs.java
...in/java/com/swift/sandhook/wrapper/BackupMethodStubs.java
+122
-0
HookWrapper.java
...src/main/java/com/swift/sandhook/wrapper/HookWrapper.java
+9
-1
No files found.
app/src/main/java/com/swift/sandhook/testHookers/CustmizeHooker.java
View file @
a3329836
...
...
@@ -29,10 +29,4 @@ public class CustmizeHooker {
return
0
;
}
@HookMethodBackup
(
"methodBeHooked"
)
@MethodParams
({
int
.
class
,
int
.
class
})
public
static
int
staticMethodHookedBackup
(
int
a
,
int
b
)
{
return
0
;
}
}
hooklib/src/main/cpp/sandhook.cpp
View file @
a3329836
...
...
@@ -53,12 +53,6 @@ void disableInterpreterForO(art::mirror::ArtMethod* method) {
SandHook
::
CastArtMethod
::
accessFlag
->
set
(
method
,
accessFlag
);
}
void
disableAccessCheck
(
art
::
mirror
::
ArtMethod
*
method
)
{
uint32_t
accessFlag
=
SandHook
::
CastArtMethod
::
accessFlag
->
get
(
method
);
accessFlag
|=
0x00080000
;
SandHook
::
CastArtMethod
::
accessFlag
->
set
(
method
,
accessFlag
);
}
void
setPrivate
(
art
::
mirror
::
ArtMethod
*
method
)
{
uint32_t
accessFlag
=
SandHook
::
CastArtMethod
::
accessFlag
->
get
(
method
);
accessFlag
&=
~
0x1
;
...
...
@@ -123,7 +117,6 @@ bool doHookWithReplacement(art::mirror::ArtMethod *originMethod,
disableInterpreterForO
(
backupMethod
);
}
tryDisableInline
(
backupMethod
);
disableAccessCheck
(
backupMethod
);
setPrivate
(
backupMethod
);
SandHook
::
Trampoline
::
flushCache
(
reinterpret_cast
<
Size
>
(
originMethod
),
SandHook
::
CastArtMethod
::
size
);
}
...
...
@@ -163,7 +156,6 @@ bool doHookWithInline(JNIEnv* env,
}
tryDisableInline
(
originMethod
);
disableAccessCheck
(
originMethod
);
SandHook
::
HookTrampoline
*
hookTrampoline
=
trampolineManager
.
installInlineTrampoline
(
originMethod
,
hookMethod
,
backupMethod
,
isNative
(
originMethod
));
if
(
hookTrampoline
==
nullptr
)
...
...
@@ -183,7 +175,6 @@ bool doHookWithInline(JNIEnv* env,
disableInterpreterForO
(
backupMethod
);
}
tryDisableInline
(
backupMethod
);
disableAccessCheck
(
backupMethod
);
setPrivate
(
backupMethod
);
hookTrampoline
->
callOrigin
->
flushCache
(
reinterpret_cast
<
Size
>
(
backupMethod
),
SandHook
::
CastArtMethod
::
size
);
}
...
...
hooklib/src/main/java/com/swift/sandhook/wrapper/BackupMethodStubs.java
0 → 100644
View file @
a3329836
package
com
.
swift
.
sandhook
.
wrapper
;
import
java.lang.reflect.Method
;
public
class
BackupMethodStubs
{
final
static
int
maxStub
=
100
;
private
static
volatile
int
curStub
=
0
;
public
static
synchronized
Method
getStubMethod
()
{
while
(
curStub
<=
maxStub
)
{
try
{
return
BackupMethodStubs
.
class
.
getDeclaredMethod
(
"stub"
+
curStub
++);
}
catch
(
NoSuchMethodException
e
)
{
}
}
return
null
;
}
public
void
stub0
()
{}
public
void
stub1
()
{}
public
void
stub2
()
{}
public
void
stub3
()
{}
public
void
stub4
()
{}
public
void
stub5
()
{}
public
void
stub6
()
{}
public
void
stub7
()
{}
public
void
stub8
()
{}
public
void
stub9
()
{}
public
void
stub10
()
{}
public
void
stub11
()
{}
public
void
stub12
()
{}
public
void
stub13
()
{}
public
void
stub14
()
{}
public
void
stub15
()
{}
public
void
stub16
()
{}
public
void
stub17
()
{}
public
void
stub18
()
{}
public
void
stub19
()
{}
public
void
stub20
()
{}
public
void
stub21
()
{}
public
void
stub22
()
{}
public
void
stub23
()
{}
public
void
stub24
()
{}
public
void
stub25
()
{}
public
void
stub26
()
{}
public
void
stub27
()
{}
public
void
stub28
()
{}
public
void
stub29
()
{}
public
void
stub30
()
{}
public
void
stub31
()
{}
public
void
stub32
()
{}
public
void
stub33
()
{}
public
void
stub34
()
{}
public
void
stub35
()
{}
public
void
stub36
()
{}
public
void
stub37
()
{}
public
void
stub38
()
{}
public
void
stub39
()
{}
public
void
stub40
()
{}
public
void
stub41
()
{}
public
void
stub42
()
{}
public
void
stub43
()
{}
public
void
stub44
()
{}
public
void
stub45
()
{}
public
void
stub46
()
{}
public
void
stub47
()
{}
public
void
stub48
()
{}
public
void
stub49
()
{}
public
void
stub50
()
{}
public
void
stub51
()
{}
public
void
stub52
()
{}
public
void
stub53
()
{}
public
void
stub54
()
{}
public
void
stub55
()
{}
public
void
stub56
()
{}
public
void
stub57
()
{}
public
void
stub58
()
{}
public
void
stub59
()
{}
public
void
stub60
()
{}
public
void
stub61
()
{}
public
void
stub62
()
{}
public
void
stub63
()
{}
public
void
stub64
()
{}
public
void
stub65
()
{}
public
void
stub66
()
{}
public
void
stub67
()
{}
public
void
stub68
()
{}
public
void
stub69
()
{}
public
void
stub70
()
{}
public
void
stub71
()
{}
public
void
stub72
()
{}
public
void
stub73
()
{}
public
void
stub74
()
{}
public
void
stub75
()
{}
public
void
stub76
()
{}
public
void
stub77
()
{}
public
void
stub78
()
{}
public
void
stub79
()
{}
public
void
stub80
()
{}
public
void
stub81
()
{}
public
void
stub82
()
{}
public
void
stub83
()
{}
public
void
stub84
()
{}
public
void
stub85
()
{}
public
void
stub86
()
{}
public
void
stub87
()
{}
public
void
stub88
()
{}
public
void
stub89
()
{}
public
void
stub90
()
{}
public
void
stub91
()
{}
public
void
stub92
()
{}
public
void
stub93
()
{}
public
void
stub94
()
{}
public
void
stub95
()
{}
public
void
stub96
()
{}
public
void
stub97
()
{}
public
void
stub98
()
{}
public
void
stub99
()
{}
public
void
stub100
()
{}
}
hooklib/src/main/java/com/swift/sandhook/wrapper/HookWrapper.java
View file @
a3329836
...
...
@@ -64,10 +64,15 @@ public class HookWrapper {
if
(
hookMethodBackup
==
null
)
continue
;
for
(
HookEntity
hookEntity:
hookEntityMap
.
values
())
{
if
(
TextUtils
.
equals
(
hookEntity
.
target
.
getName
(),
hookMethodBackup
.
value
())
&&
hookEntity
.
backup
!=
null
&&
samePars
(
classLoader
,
field
,
hookEntity
.
pars
))
{
if
(
TextUtils
.
equals
(
hookEntity
.
target
.
getName
(),
hookMethodBackup
.
value
())
&&
samePars
(
classLoader
,
field
,
hookEntity
.
pars
))
{
field
.
setAccessible
(
true
);
if
(
hookEntity
.
backup
==
null
)
hookEntity
.
backup
=
BackupMethodStubs
.
getStubMethod
();
if
(
hookEntity
.
backup
==
null
)
continue
;
try
{
field
.
set
(
null
,
hookEntity
.
backup
);
hookEntity
.
hookIsStub
=
true
;
}
catch
(
IllegalAccessException
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -105,6 +110,7 @@ public class HookWrapper {
entity
=
new
HookEntity
(
foundMethod
);
hookEntityMap
.
put
(
foundMethod
,
entity
);
}
entity
.
pars
=
pars
;
entity
.
hook
=
method
;
}
else
if
(
hookMethodBackupAnno
!=
null
)
{
methodName
=
hookMethodBackupAnno
.
value
();
...
...
@@ -271,6 +277,8 @@ public class HookWrapper {
public
Method
hook
;
public
Method
backup
;
public
boolean
hookIsStub
=
false
;
public
Class
[]
pars
;
public
HookEntity
(
Member
target
)
{
...
...
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