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
d70a536b
Commit
d70a536b
authored
Jan 20, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
done trampoline
parent
812a4598
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
206 additions
and
13 deletions
+206
-13
CMakeLists.txt
app/CMakeLists.txt
+1
-0
arch.h
app/src/main/cpp/includes/arch.h
+0
-1
trampoline.cpp
app/src/main/cpp/trampoline/trampoline.cpp
+72
-0
trampoline.h
app/src/main/cpp/trampoline/trampoline.h
+97
-12
trampoline_manager.cpp
app/src/main/cpp/trampoline/trampoline_manager.cpp
+6
-0
trampoline_manager.h
app/src/main/cpp/trampoline/trampoline_manager.h
+25
-0
ClassNeverCall.java
app/src/main/java/com/swift/sandhook/ClassNeverCall.java
+5
-0
No files found.
app/CMakeLists.txt
View file @
d70a536b
...
@@ -19,6 +19,7 @@ add_library( # Sets the name of the library.
...
@@ -19,6 +19,7 @@ add_library( # Sets the name of the library.
# Provides a relative path to your source file(s).
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp
src/main/cpp/native-lib.cpp
src/main/cpp/trampoline/trampoline.cpp
src/main/cpp/trampoline/trampoline.cpp
src/main/cpp/trampoline/trampoline_manager.cpp
src/main/cpp/trampoline/arch/arm32.S
src/main/cpp/trampoline/arch/arm32.S
src/main/cpp/trampoline/arch/arm64.S
src/main/cpp/trampoline/arch/arm64.S
)
)
...
...
app/src/main/cpp/includes/arch.h
View file @
d70a536b
...
@@ -11,7 +11,6 @@ namespace SandHook {
...
@@ -11,7 +11,6 @@ namespace SandHook {
#define BYTE_POINT sizeof(void*)
#define BYTE_POINT sizeof(void*)
//32bit
//32bit
#if defined(__i386__) || defined(__arm__)
#if defined(__i386__) || defined(__arm__)
#define ADDR(addr) *((uint32_t *) addr)
#define ADDR(addr) *((uint32_t *) addr)
...
...
app/src/main/cpp/trampoline/trampoline.cpp
View file @
d70a536b
...
@@ -3,6 +3,78 @@
...
@@ -3,6 +3,78 @@
//
//
#include "trampoline.h"
#include "trampoline.h"
#include "stdlib.h"
#include "stdlib.h"
#include "map"
namespace
SandHook
{
class
DirectJumpTrampoline
:
public
Trampoline
{
public
:
DirectJumpTrampoline
()
:
Trampoline
::
Trampoline
()
{}
void
setJumpTarget
(
Code
target
)
{
codeCopy
(
reinterpret_cast
<
char
*>
(
&
target
),
OFFSET_JUMP_ADDR_TARGET
,
BYTE_POINT
);
}
protected
:
Size
codeLength
()
override
{
return
SIZE_DIRECT_JUMP_TRAMPOLINE
;
}
Code
templateCode
()
override
{
return
reinterpret_cast
<
char
*>
(
DIRECT_JUMP_TRAMPOLINE
);
}
};
class
ReplacementHookTrampoline
:
public
Trampoline
{
public
:
void
setHookMethod
(
Code
hookMethod
)
{
codeCopy
(
reinterpret_cast
<
char
*>
(
&
hookMethod
),
OFFSET_REPLACEMENT_ADDR_ART_METHOD
,
BYTE_POINT
);
}
void
setEntryCodeOffset
(
Size
offSet
)
{
codeCopy
(
reinterpret_cast
<
char
*>
(
&
offSet
),
OFFSET_REPLACEMENT_OFFSET_ENTRY_CODE
,
BYTE_POINT
);
}
protected
:
Size
codeLength
()
override
{
return
SIZE_REPLACEMENT_HOOK_TRAMPOLINE
;
}
Code
templateCode
()
override
{
return
reinterpret_cast
<
char
*>
(
REPLACEMENT_HOOK_TRAMPOLINE
);
}
};
class
InlineHookTrampoline
:
public
Trampoline
{
public
:
void
setOriginMethod
(
Code
originMethod
)
{
codeCopy
(
reinterpret_cast
<
char
*>
(
&
originMethod
),
OFFSET_INLINE_ADDR_ORIGIN_METHOD
,
BYTE_POINT
);
}
void
setHookMethod
(
Code
hookMethod
)
{
codeCopy
(
reinterpret_cast
<
char
*>
(
&
hookMethod
),
OFFSET_INLINE_ADDR_HOOK_METHOD
,
BYTE_POINT
);
}
void
setEntryCodeOffset
(
Size
offSet
)
{
codeCopy
(
reinterpret_cast
<
char
*>
(
&
offSet
),
OFFSET_INLINE_OFFSET_ENTRY_CODE
,
BYTE_POINT
);
}
void
setOriginCode
(
Code
originCode
)
{
codeCopy
(
originCode
,
OFFSET_INLINE_ORIGIN_CODE
,
SIZE_DIRECT_JUMP_TRAMPOLINE
);
}
protected
:
Size
codeLength
()
override
{
return
SIZE_REPLACEMENT_HOOK_TRAMPOLINE
;
}
Code
templateCode
()
override
{
return
reinterpret_cast
<
char
*>
(
REPLACEMENT_HOOK_TRAMPOLINE
);
}
};
}
app/src/main/cpp/trampoline/trampoline.h
View file @
d70a536b
...
@@ -5,24 +5,109 @@
...
@@ -5,24 +5,109 @@
#ifndef SANDHOOK_TRAMPOLINE_H
#ifndef SANDHOOK_TRAMPOLINE_H
#define SANDHOOK_TRAMPOLINE_H
#define SANDHOOK_TRAMPOLINE_H
#include <cstdint>
#include <string.h>
#include "../includes/arch.h"
#include "./arch/base.h"
#define Code char*
#if defined(__i386__)
#if defined(__i386__)
#define SIZE_TRAMPOLINE = 4 * 7
#define SIZE_REPLACEMENT_HOOK_TRAMPOLINE 4 * 9
#define OFFSET_ADDR_ART_METHOD 4 * 3
#define OFFSET_REPLACEMENT_ADDR_ART_METHOD 4 * 5
#define OFFSET_ADDR_ENTRY_CODE 4 * 5
#define OFFSET_REPLACEMENT_OFFSET_ENTRY_CODE 4 * 7
#define SIZE_DIRECT_JUMP_TRAMPOLINE 4 * 4
#define OFFSET_JUMP_ADDR_TARGET 4 * 2
#define SIZE_INLINE_HOOK_TRAMPOLINE 4 * 24
#define OFFSET_INLINE_ADDR_ORIGIN_METHOD 4 * 10
#define OFFSET_INLINE_ORIGIN_CODE 4 * 12
#define OFFSET_INLINE_OFFSET_ENTRY_CODE 4 * 20
#define OFFSET_INLINE_ADDR_HOOK_METHOD 4 * 22
#elif defined(__x86_64__)
#elif defined(__x86_64__)
#define SIZE_TRAMPOLINE = 4 * 7
#define SIZE_REPLACEMENT_HOOK_TRAMPOLINE 4 * 9
#define OFFSET_ADDR_ART_METHOD 4 * 3
#define OFFSET_REPLACEMENT_ADDR_ART_METHOD 4 * 5
#define OFFSET_ADDR_ENTRY_CODE 4 * 5
#define OFFSET_REPLACEMENT_OFFSET_ENTRY_CODE 4 * 7
#define SIZE_DIRECT_JUMP_TRAMPOLINE 4 * 4
#define OFFSET_JUMP_ADDR_TARGET 4 * 2
#define SIZE_INLINE_HOOK_TRAMPOLINE 4 * 24
#define OFFSET_INLINE_ADDR_ORIGIN_METHOD 4 * 10
#define OFFSET_INLINE_ORIGIN_CODE 4 * 12
#define OFFSET_INLINE_OFFSET_ENTRY_CODE 4 * 20
#define OFFSET_INLINE_ADDR_HOOK_METHOD 4 * 22
#elif defined(__arm__)
#elif defined(__arm__)
#define SIZE_TRAMPOLINE = 4 * 7
#define SIZE_REPLACEMENT_HOOK_TRAMPOLINE 4 * 9
#define OFFSET_ADDR_ART_METHOD 4 * 3
#define OFFSET_REPLACEMENT_ADDR_ART_METHOD 4 * 5
#define OFFSET_ADDR_ENTRY_CODE 4 * 5
#define OFFSET_REPLACEMENT_OFFSET_ENTRY_CODE 4 * 7
#define SIZE_DIRECT_JUMP_TRAMPOLINE 4 * 4
#define OFFSET_JUMP_ADDR_TARGET 4 * 2
#define SIZE_INLINE_HOOK_TRAMPOLINE 4 * 24
#define OFFSET_INLINE_ADDR_ORIGIN_METHOD 4 * 10
#define OFFSET_INLINE_ORIGIN_CODE 4 * 12
#define OFFSET_INLINE_OFFSET_ENTRY_CODE 4 * 20
#define OFFSET_INLINE_ADDR_HOOK_METHOD 4 * 22
#elif defined(__aarch64__)
#elif defined(__aarch64__)
#define SIZE_TRAMPOLINE = 4 * 7
#define SIZE_REPLACEMENT_HOOK_TRAMPOLINE 4 * 9
#define OFFSET_ADDR_ART_METHOD 4 * 3
#define OFFSET_REPLACEMENT_ADDR_ART_METHOD 4 * 5
#define OFFSET_ADDR_ENTRY_CODE 4 * 5
#define OFFSET_REPLACEMENT_OFFSET_ENTRY_CODE 4 * 7
#define SIZE_DIRECT_JUMP_TRAMPOLINE 4 * 4
#define OFFSET_JUMP_ADDR_TARGET 4 * 2
#define SIZE_INLINE_HOOK_TRAMPOLINE 4 * 24
#define OFFSET_INLINE_ADDR_ORIGIN_METHOD 4 * 10
#define OFFSET_INLINE_ORIGIN_CODE 4 * 12
#define OFFSET_INLINE_OFFSET_ENTRY_CODE 4 * 20
#define OFFSET_INLINE_ADDR_HOOK_METHOD 4 * 22
#else
#endif
#endif
extern
void
DIRECT_JUMP_TRAMPOLINE
();
extern
void
INLINE_HOOK_TRAMPOLINE
();
extern
void
REPLACEMENT_HOOK_TRAMPOLINE
();
namespace
SandHook
{
class
Trampoline
{
public
:
Trampoline
()
=
default
;
virtual
void
init
()
{
codeLen
=
codeLength
();
tempCode
=
templateCode
();
}
const
void
setExcuteSpace
(
Code
start
)
{
code
=
start
;
memcpy
(
code
,
tempCode
,
codeLen
);
}
const
void
codeCopy
(
Code
src
,
Size
targetOffset
,
Size
len
)
{
memcpy
(
code
+
targetOffset
,
src
,
len
);
}
const
void
clone
(
Code
dest
)
{
memcpy
(
dest
,
code
,
codeLen
);
}
const
Code
getCode
()
{
return
code
;
}
const
Size
getCodeLen
()
{
return
codeLen
;
}
protected
:
virtual
Size
codeLength
()
=
0
;
virtual
Code
templateCode
()
=
0
;
private
:
Code
code
;
Code
tempCode
;
Size
codeLen
;
};
}
#endif //SANDHOOK_TRAMPOLINE_H
#endif //SANDHOOK_TRAMPOLINE_H
app/src/main/cpp/trampoline/trampoline_manager.cpp
0 → 100644
View file @
d70a536b
//
// Created by swift on 2019/1/20.
//
#include "trampoline_manager.h"
app/src/main/cpp/trampoline/trampoline_manager.h
0 → 100644
View file @
d70a536b
//
// Created by swift on 2019/1/20.
//
#ifndef SANDHOOK_TRAMPOLINE_MANAGER_H
#define SANDHOOK_TRAMPOLINE_MANAGER_H
#include "map"
#include "list"
#include "trampoline.cpp"
namespace
SandHook
{
class
TrampolineManager
{
public
:
TrampolineManager
()
{
trampolines
=
{};
}
private
:
std
::
map
<
void
*
,
Trampoline
*>
trampolines
;
};
}
#endif //SANDHOOK_TRAMPOLINE_MANAGER_H
app/src/main/java/com/swift/sandhook/ClassNeverCall.java
0 → 100644
View file @
d70a536b
package
com
.
swift
.
sandhook
;
public
class
ClassNeverCall
{
private
void
neverCall
()
{}
}
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