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
bd46d435
Commit
bd46d435
authored
Feb 24, 2019
by
swift_gan
Committed by
swift_gan
Feb 24, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
done disable vm inline!
parent
75d75c0e
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
157 additions
and
24 deletions
+157
-24
CMakeLists.txt
hooklib/CMakeLists.txt
+2
-0
art_compiler_options.cpp
hooklib/src/main/cpp/art/art_compiler_options.cpp
+25
-0
cast_compiler_options.cpp
hooklib/src/main/cpp/casts/cast_compiler_options.cpp
+32
-0
art_compiler_options.h
hooklib/src/main/cpp/includes/art_compiler_options.h
+15
-11
art_jit.h
hooklib/src/main/cpp/includes/art_jit.h
+1
-0
cast_compiler_options.h
hooklib/src/main/cpp/includes/cast_compiler_options.h
+24
-0
hide_api.h
hooklib/src/main/cpp/includes/hide_api.h
+7
-0
sandhook.cpp
hooklib/src/main/cpp/sandhook.cpp
+20
-0
hide_api.cpp
hooklib/src/main/cpp/utils/hide_api.cpp
+29
-13
SandHook.java
hooklib/src/main/java/com/swift/sandhook/SandHook.java
+2
-0
No files found.
hooklib/CMakeLists.txt
View file @
bd46d435
...
...
@@ -25,7 +25,9 @@ add_library( # Sets the name of the library.
src/main/cpp/utils/utils.cpp
src/main/cpp/utils/offset.cpp
src/main/cpp/casts/cast_art_method.cpp
src/main/cpp/casts/cast_compiler_options.cpp
src/main/cpp/art/art_method.cpp
src/main/cpp/art/art_compiler_options.cpp
src/main/cpp/trampoline/arch/arm32.S
src/main/cpp/trampoline/arch/arm64.S
src/main/cpp/inst/insts_arm32.cpp
...
...
hooklib/src/main/cpp/art/art_compiler_options.cpp
0 → 100644
View file @
bd46d435
//
// Created by 甘尧 on 2019/2/24.
//
#include "../includes/art_compiler_options.h"
#include "../includes/cast_compiler_options.h"
#include "../includes/hide_api.h"
using
namespace
SandHook
;
using
namespace
art
;
extern
int
SDK_INT
;
size_t
CompilerOptions
::
getInlineMaxCodeUnits
()
{
if
(
SDK_INT
<
ANDROID_N
)
return
0
;
return
CastCompilerOptions
::
inlineMaxCodeUnits
->
get
(
this
);
}
bool
CompilerOptions
::
setInlineMaxCodeUnits
(
size_t
units
)
{
if
(
SDK_INT
<
ANDROID_N
)
return
false
;
CastCompilerOptions
::
inlineMaxCodeUnits
->
set
(
this
,
units
);
return
true
;
}
hooklib/src/main/cpp/casts/cast_compiler_options.cpp
0 → 100644
View file @
bd46d435
//
// Created by 甘尧 on 2019/2/24.
//
#include "../includes/cast_compiler_options.h"
#include "../includes/hide_api.h"
extern
int
SDK_INT
;
namespace
SandHook
{
class
CastInlineMaxCodeUnits
:
public
IMember
<
art
::
CompilerOptions
,
size_t
>
{
protected
:
Size
calOffset
(
JNIEnv
*
jniEnv
,
art
::
CompilerOptions
*
p
)
override
{
if
(
SDK_INT
<
ANDROID_N
)
return
getParentSize
()
+
1
;
if
(
SDK_INT
>=
ANDROID_O
)
{
return
BYTE_POINT
+
5
*
sizeof
(
size_t
);
}
else
{
return
BYTE_POINT
+
6
*
sizeof
(
size_t
);
}
}
};
void
CastCompilerOptions
::
init
(
JNIEnv
*
jniEnv
)
{
inlineMaxCodeUnits
->
init
(
jniEnv
,
nullptr
,
sizeof
(
art
::
CompilerOptions
));
}
IMember
<
art
::
CompilerOptions
,
size_t
>*
CastCompilerOptions
::
inlineMaxCodeUnits
=
new
CastInlineMaxCodeUnits
();
}
hooklib/src/main/cpp/includes/art_compiler_options.h
View file @
bd46d435
...
...
@@ -2,23 +2,27 @@
// Created by 甘尧 on 2019/2/23.
//
#ifndef
SANDHOOK_
ART_COMPILER_OPTIONS_H
#define
SANDHOOK_
ART_COMPILER_OPTIONS_H
#ifndef ART_COMPILER_OPTIONS_H
#define ART_COMPILER_OPTIONS_H
#include
"arch.h"
#include
<stddef.h>
namespace
art
{
class
CompilerOptions
{
public
:
void
*
compiler_filter_
;
Size
huge_method_threshold_
;
Size
large_method_threshold_
;
Size
small_method_threshold_
;
Size
tiny_method_threshold_
;
Size
num_dex_methods_threshold_
;
Size
inline_depth_limit_
;
Size
inline_max_code_units_
;
size_t
huge_method_threshold_
;
size_t
large_method_threshold_
;
size_t
small_method_threshold_
;
size_t
tiny_method_threshold_
;
size_t
num_dex_methods_threshold_
;
size_t
inline_depth_limit_
;
size_t
inline_max_code_units_
;
size_t
getInlineMaxCodeUnits
();
bool
setInlineMaxCodeUnits
(
size_t
units
);
};
}
#endif //
SANDHOOK_
ART_COMPILER_OPTIONS_H
#endif //ART_COMPILER_OPTIONS_H
hooklib/src/main/cpp/includes/art_jit.h
View file @
bd46d435
...
...
@@ -8,6 +8,7 @@
namespace
art
{
namespace
jit
{
//7.0 - 9.0
class
JitCompiler
{
public
:
virtual
~
JitCompiler
();
...
...
hooklib/src/main/cpp/includes/cast_compiler_options.h
0 → 100644
View file @
bd46d435
//
// Created by 甘尧 on 2019/1/12.
//
#ifndef SANDHOOK_CAST_COMPILER_OPTIONS_H
#define SANDHOOK_CAST_COMPILER_OPTIONS_H
#include "cast.h"
#include "art_compiler_options.h"
namespace
SandHook
{
class
CastCompilerOptions
{
public
:
static
void
init
(
JNIEnv
*
jniEnv
);
static
IMember
<
art
::
CompilerOptions
,
size_t
>*
inlineMaxCodeUnits
;
};
}
#endif //SANDHOOK_CAST_COMPILER_OPTIONS_H
hooklib/src/main/cpp/includes/hide_api.h
View file @
bd46d435
...
...
@@ -8,6 +8,9 @@
#include <jni.h>
#include "dlfcn_nougat.h"
#include "dlfcn.h"
#include <memory>
#include "../includes/art_compiler_options.h"
#include "../includes/art_jit.h"
extern
"C"
{
...
...
@@ -20,6 +23,10 @@ extern "C" {
bool
canGetObject
();
jobject
getJavaObject
(
JNIEnv
*
env
,
void
*
thread
,
void
*
address
);
art
::
jit
::
JitCompiler
*
getGlobalJitCompiler
();
art
::
CompilerOptions
*
getGlobalCompilerOptions
();
}
#endif //SANDHOOK_HIDE_API_H
hooklib/src/main/cpp/sandhook.cpp
View file @
bd46d435
...
...
@@ -3,6 +3,7 @@
#include "includes/trampoline_manager.h"
#include "includes/hide_api.h"
#include "includes/log.h"
#include "includes/cast_compiler_options.h"
SandHook
::
TrampolineManager
trampolineManager
;
...
...
@@ -23,6 +24,7 @@ Java_com_swift_sandhook_SandHook_initNative(JNIEnv *env, jclass type, jint sdk)
// TODO
SDK_INT
=
sdk
;
SandHook
::
CastArtMethod
::
init
(
env
);
SandHook
::
CastCompilerOptions
::
init
(
env
);
trampolineManager
.
init
(
SandHook
::
CastArtMethod
::
entryPointQuickCompiled
->
getOffset
());
initHideApi
(
env
);
return
JNI_TRUE
;
...
...
@@ -345,6 +347,24 @@ Java_com_swift_sandhook_SandHook_is64Bit(JNIEnv *env, jclass type) {
return
BYTE_POINT
==
8
;
}
extern
"C"
JNIEXPORT
jboolean
JNICALL
Java_com_swift_sandhook_SandHook_disableVMInline
(
JNIEnv
*
env
,
jclass
type
)
{
if
(
SDK_INT
<
ANDROID_N
)
return
JNI_FALSE
;
art
::
CompilerOptions
*
compilerOptions
=
getGlobalCompilerOptions
();
if
(
compilerOptions
==
nullptr
)
return
JNI_FALSE
;
size_t
originOptions
=
compilerOptions
->
getInlineMaxCodeUnits
();
//maybe a real inlineMaxCodeUnits
if
(
originOptions
>
0
&&
originOptions
<
10000
)
{
compilerOptions
->
setInlineMaxCodeUnits
(
0
);
return
JNI_TRUE
;
}
else
{
return
JNI_FALSE
;
}
}
extern
"C"
JNIEXPORT
void
JNICALL
Java_com_swift_sandhook_test_TestClass_jni_1test
(
JNIEnv
*
env
,
jobject
instance
)
{
...
...
hooklib/src/main/cpp/utils/hide_api.cpp
View file @
bd46d435
...
...
@@ -3,9 +3,6 @@
//
#include "../includes/hide_api.h"
#include "../includes/arch.h"
#include <memory>
#include "../includes/art_compiler_options.h"
#include "../includes/art_jit.h"
extern
int
SDK_INT
;
...
...
@@ -21,6 +18,8 @@ extern "C" {
jobject
(
*
addWeakGlobalRef
)(
JavaVM
*
,
void
*
,
void
*
)
=
nullptr
;
art
::
jit
::
JitCompiler
**
globalJitCompileHandlerAddr
=
nullptr
;
void
initHideApi
(
JNIEnv
*
env
)
{
...
...
@@ -54,7 +53,7 @@ extern "C" {
"_ZN3art3Dbg8ResumeVMEv"
));
}
}
//init for getObject
//init for getObject
& JitCompiler
if
(
SDK_INT
<
23
)
{
void
*
handle
=
dlopen
(
"libart.so"
,
RTLD_LAZY
|
RTLD_GLOBAL
);
addWeakGlobalRef
=
(
jobject
(
*
)(
JavaVM
*
,
void
*
,
void
*
))
dlsym
(
handle
,
...
...
@@ -77,15 +76,17 @@ extern "C" {
addWeakGloablReferenceSymbol
);
//try disable inline !
void
*
jitCompileHandlerGlobalAddr
=
fake_dlsym
(
handle
,
"_ZN3art3jit3Jit20jit_compiler_handle_E"
);
art
::
jit
::
JitCompiler
*
jitCompileHandlerGlobal
=
*
reinterpret_cast
<
art
::
jit
::
JitCompiler
**>
(
jitCompileHandlerGlobalAddr
);
art
::
jit
::
JitCompiler
*
jitCompileHandlerTemp
=
static_cast
<
art
::
jit
::
JitCompiler
*>
(
jitCompilerHandle
);
if
(
jitCompileHandlerGlobal
==
nullptr
)
{
return
;
}
art
::
CompilerOptions
*
options
=
jitCompileHandlerGlobal
->
compilerOptions
.
get
();
Size
inlineUnit
=
options
->
inline_max_code_units_
;
options
->
inline_max_code_units_
=
0
;
globalJitCompileHandlerAddr
=
reinterpret_cast
<
art
::
jit
::
JitCompiler
**>
(
fake_dlsym
(
handle
,
"_ZN3art3jit3Jit20jit_compiler_handle_E"
));
// art::jit::JitCompiler* jitCompileHandlerGlobal = *reinterpret_cast<art::jit::JitCompiler**>(jitCompileHandlerGlobalAddr);
// art::jit::JitCompiler* jitCompileHandlerTemp = static_cast<art::jit::JitCompiler *>(jitCompilerHandle);
// if (jitCompileHandlerGlobal == nullptr) {
// return;
// }
// art::CompilerOptions* options = jitCompileHandlerGlobal->compilerOptions.get();
// Size inlineUnit = options->inline_max_code_units_;
// options->inline_max_code_units_ = 0;
}
}
...
...
@@ -132,5 +133,20 @@ extern "C" {
return
result
;
}
art
::
jit
::
JitCompiler
*
getGlobalJitCompiler
()
{
if
(
SDK_INT
<
ANDROID_N
)
return
nullptr
;
if
(
globalJitCompileHandlerAddr
==
nullptr
||
globalJitCompileHandlerAddr
<=
0
)
return
nullptr
;
return
*
globalJitCompileHandlerAddr
;
}
art
::
CompilerOptions
*
getGlobalCompilerOptions
()
{
art
::
jit
::
JitCompiler
*
compiler
=
getGlobalJitCompiler
();
if
(
compiler
==
nullptr
)
return
nullptr
;
return
compiler
->
compilerOptions
.
get
();
}
}
hooklib/src/main/java/com/swift/sandhook/SandHook.java
View file @
bd46d435
...
...
@@ -313,6 +313,8 @@ public class SandHook {
public
static
native
boolean
is64Bit
();
public
static
native
boolean
disableVMInline
();
@FunctionalInterface
public
interface
HookModeCallBack
{
int
hookMode
(
Member
originMethod
);
...
...
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