diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..39fb081
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+.externalNativeBuild
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..96cc43e
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/ccplus.xml b/.idea/copyright/ccplus.xml
new file mode 100644
index 0000000..154db3d
--- /dev/null
+++ b/.idea/copyright/ccplus.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..e7bedf3
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..97626ba
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..168c960
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..3741162
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Android
+
+
+ Android > Lint > Correctness
+
+
+ Java
+
+
+ Java language level migration aidsJava
+
+
+
+
+ Android
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $USER_HOME$/.subversion
+
+
+
+
+
+ ccplus
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..b4cf82b
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..726992a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,36 @@
+
+library目录下有反调试,防so注入等代码,修改jni代码后,运行rebuild project即可重新生成so
+
+inject目录下有so注入例子
+
+
+### Inject说明
+
+1. 真机先进行root
+
+2. android6.0/7.0禁掉Selinux
+
+ adb shell setenforce 0
+
+3. local.properties配置好NDK目录
+
+4. cd 进入 inject目录,执行 ndk-build 命令
+
+5. 将so和可执行文件inject导入真机,执行 inject
+
+ adb root
+ adb remount
+ adb push libs/armeabi-v7a/libqever.so /data/local/tmp
+ adb push libs/armeabi-v7a/inject /data/local/tmp
+ adb shell
+ cd /data/local/tmp
+ ./inject ... ... ...
+
+
+
+# Thanks
+
+https://github.com/fourbrother/android_anti_debug
+
+https://bbs.pediy.com/thread-194080.htm
+
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..0021a2b
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,41 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion Integer.parseInt(rootProject.android_compileSdkVersion)
+ buildToolsVersion rootProject.android_buildToolsVersion
+ defaultConfig {
+ applicationId "com.wiseyq.sojni"
+ minSdkVersion Integer.parseInt(rootProject.android_minSdkVersion)
+ targetSdkVersion Integer.parseInt(rootProject.android_targetSdkVersion)
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+ ndk {
+ moduleName "ccprotect"
+ ldLibs "log", "z", "m"
+ abiFilters "armeabi", "armeabi-v7a", "x86"
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']
+ assets.srcDirs = ['assets']
+ }
+ }
+
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile "com.android.support:appcompat-v7:${android_support_libs}"
+ compile 'com.jaredrummler:android-processes:1.0.9'
+ compile project(':library')
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..1c90e63
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/luffyjet/Documents/android-sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..3ca2d4b
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/wiseyq/sojni/MainActivity.java b/app/src/main/java/com/wiseyq/sojni/MainActivity.java
new file mode 100644
index 0000000..3cdb63b
--- /dev/null
+++ b/app/src/main/java/com/wiseyq/sojni/MainActivity.java
@@ -0,0 +1,62 @@
+package com.wiseyq.sojni;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+
+import com.wiseyq.safe.CCProctect;
+
+import java.io.File;
+import java.util.HashSet;
+
+public class MainActivity extends AppCompatActivity {
+ private static final String TAG = "MainActivity";
+
+ //加载so库
+ static {
+ System.loadLibrary("ccprotect");
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+// List list = AndroidProcesses.getRunningProcesses();
+// for (AndroidProcess androidProcess :list){
+// Log.i(TAG, "androidProcess: "+androidProcess.name + " pid:" + androidProcess.pid);
+// }
+
+ Log.i(TAG, "my pid:" + android.os.Process.myPid());
+
+ findViewById(R.id.findbtn).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ HashSet hashSet = CCProctect.getSoList(android.os.Process.myPid(),getPackageName());
+ Log.i(TAG, "onClick: ");
+ for (String s:hashSet){
+ Log.i(TAG, "so path: "+s);
+ }
+ }
+ });
+
+
+ findViewById(R.id.deleteBtn).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Log.i(TAG, "onClick: delete");
+ CCProctect.uninstall("/data/local/tmp/libqever.so");
+ }
+ });
+
+
+ try {
+ File file = new File("/data/local/tmp/libqever.so");
+ if (file.exists()){
+ Log.i(TAG, "libqever: "+file.length());
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..e2b6837
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..aee44e1
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 0000000..63fc816
--- /dev/null
+++ b/app/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+
+
+ 64dp
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..3ab3e9c
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #3F51B5
+ #303F9F
+ #FF4081
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..47c8224
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 16dp
+ 16dp
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..a071074
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ SOJNI
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..5885930
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..74b2ab0
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,23 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:2.2.3'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..9807a39
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,31 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -XX\:MaxPermSize\=512m -XX\:+HeapDumpOnOutOfMemoryError -Dfile.encoding\=UTF-8
+org.gradle.configureondemand=true
+org.gradle.parallel=true
+android.useDeprecatedNdk=true
+
+
+#android build
+android_compileSdkVersion=25
+android_buildToolsVersion=25.0.2
+android_minSdkVersion=14
+android_targetSdkVersion=25
+
+#dependencies
+android_support_libs=25.3.1
+android_support_multidex=1.0.1
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..13372ae
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..04e285f
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Dec 28 10:00:20 PST 2015
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..9d82f78
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..8a0b282
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/inject/.gitignore b/inject/.gitignore
new file mode 100755
index 0000000..796b96d
--- /dev/null
+++ b/inject/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/inject/build.gradle b/inject/build.gradle
new file mode 100755
index 0000000..db83dba
--- /dev/null
+++ b/inject/build.gradle
@@ -0,0 +1,23 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion Integer.parseInt(rootProject.android_compileSdkVersion)
+ buildToolsVersion rootProject.android_buildToolsVersion
+
+ defaultConfig {
+ minSdkVersion Integer.parseInt(rootProject.android_minSdkVersion)
+ targetSdkVersion Integer.parseInt(rootProject.android_targetSdkVersion)
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+}
diff --git a/inject/jni/Android.mk b/inject/jni/Android.mk
new file mode 100755
index 0000000..a15af2d
--- /dev/null
+++ b/inject/jni/Android.mk
@@ -0,0 +1,20 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := inject
+LOCAL_SRC_FILES := \
+ inject.c
+
+LOCAL_LDLIBS += -llog
+LOCAL_CFLAGS += -pie -fPIE
+LOCAL_LDFLAGS += -pie -fPIE
+include $(BUILD_EXECUTABLE)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := qever
+LOCAL_SRC_FILES := \
+ qever.c
+
+LOCAL_LDLIBS += -llog -pthread
+
+include $(BUILD_SHARED_LIBRARY)
\ No newline at end of file
diff --git a/inject/jni/Application.mk b/inject/jni/Application.mk
new file mode 100755
index 0000000..6f276a6
--- /dev/null
+++ b/inject/jni/Application.mk
@@ -0,0 +1 @@
+APP_ABI := x86 armeabi-v7a
\ No newline at end of file
diff --git a/inject/jni/inject.c b/inject/jni/inject.c
new file mode 100755
index 0000000..ec33a3c
--- /dev/null
+++ b/inject/jni/inject.c
@@ -0,0 +1,507 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#if defined(__i386__)
+#define pt_regs user_regs_struct
+#endif
+
+#define ENABLE_DEBUG 1
+
+#if ENABLE_DEBUG
+#define LOG_TAG "INJECT"
+#define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG, fmt, ##args)
+#define DEBUG_PRINT(format,args...) \
+ LOGD(format, ##args)
+#else
+#define DEBUG_PRINT(format,args...)
+#endif
+
+#define CPSR_T_MASK ( 1u << 5 )
+
+const char *libc_path = "/system/lib/libc.so";
+const char *linker_path = "/system/bin/linker";
+
+int ptrace_readdata(pid_t pid, uint8_t *src, uint8_t *buf, size_t size)
+{
+ uint32_t i, j, remain;
+ uint8_t *laddr;
+
+ union u {
+ long val;
+ char chars[sizeof(long)];
+ } d;
+
+ j = size / 4;
+ remain = size % 4;
+
+ laddr = buf;
+
+ for (i = 0; i < j; i ++) {
+ d.val = ptrace(PTRACE_PEEKTEXT, pid, src, 0);
+ memcpy(laddr, d.chars, 4);
+ src += 4;
+ laddr += 4;
+ }
+
+ if (remain > 0) {
+ d.val = ptrace(PTRACE_PEEKTEXT, pid, src, 0);
+ memcpy(laddr, d.chars, remain);
+ }
+
+ return 0;
+}
+
+int ptrace_writedata(pid_t pid, uint8_t *dest, uint8_t *data, size_t size)
+{
+ uint32_t i, j, remain;
+ uint8_t *laddr;
+
+ union u {
+ long val;
+ char chars[sizeof(long)];
+ } d;
+
+ j = size / 4;
+ remain = size % 4;
+
+ laddr = data;
+
+ for (i = 0; i < j; i ++) {
+ memcpy(d.chars, laddr, 4);
+ ptrace(PTRACE_POKETEXT, pid, dest, d.val);
+
+ dest += 4;
+ laddr += 4;
+ }
+
+ if (remain > 0) {
+ d.val = ptrace(PTRACE_PEEKTEXT, pid, dest, 0);
+ for (i = 0; i < remain; i ++) {
+ d.chars[i] = *laddr ++;
+ }
+
+ ptrace(PTRACE_POKETEXT, pid, dest, d.val);
+ }
+
+ return 0;
+}
+
+#if defined(__arm__)
+int ptrace_call(pid_t pid, uint32_t addr, long *params, uint32_t num_params, struct pt_regs* regs)
+{
+ uint32_t i;
+ for (i = 0; i < num_params && i < 4; i ++) {
+ regs->uregs[i] = params[i];
+ }
+
+ //
+ // push remained params onto stack
+ //
+ if (i < num_params) {
+ regs->ARM_sp -= (num_params - i) * sizeof(long) ;
+ ptrace_writedata(pid, (void *)regs->ARM_sp, (uint8_t *)¶ms[i], (num_params - i) * sizeof(long));
+ }
+
+ regs->ARM_pc = addr;
+ if (regs->ARM_pc & 1) {
+ /* thumb */
+ regs->ARM_pc &= (~1u);
+ regs->ARM_cpsr |= CPSR_T_MASK;
+ } else {
+ /* arm */
+ regs->ARM_cpsr &= ~CPSR_T_MASK;
+ }
+
+ regs->ARM_lr = 0;
+
+ if (ptrace_setregs(pid, regs) == -1
+ || ptrace_continue(pid) == -1) {
+ printf("error\n");
+ return -1;
+ }
+
+ int stat = 0;
+ waitpid(pid, &stat, WUNTRACED);
+ while (stat != 0xb7f) {
+ if (ptrace_continue(pid) == -1) {
+ printf("error\n");
+ return -1;
+ }
+ waitpid(pid, &stat, WUNTRACED);
+ }
+
+ return 0;
+}
+
+#elif defined(__i386__)
+long ptrace_call(pid_t pid, uint32_t addr, long *params, uint32_t num_params, struct user_regs_struct * regs)
+{
+ regs->esp -= (num_params) * sizeof(long) ;
+ ptrace_writedata(pid, (void *)regs->esp, (uint8_t *)params, (num_params) * sizeof(long));
+
+ long tmp_addr = 0x00;
+ regs->esp -= sizeof(long);
+ ptrace_writedata(pid, regs->esp, (char *)&tmp_addr, sizeof(tmp_addr));
+
+ regs->eip = addr;
+
+ if (ptrace_setregs(pid, regs) == -1
+ || ptrace_continue( pid) == -1) {
+ printf("error\n");
+ return -1;
+ }
+
+ int stat = 0;
+ waitpid(pid, &stat, WUNTRACED);
+ while (stat != 0xb7f) {
+ if (ptrace_continue(pid) == -1) {
+ printf("error\n");
+ return -1;
+ }
+ waitpid(pid, &stat, WUNTRACED);
+ }
+
+ return 0;
+}
+#else
+#error "Not supported"
+#endif
+
+int ptrace_getregs(pid_t pid, struct pt_regs * regs)
+{
+ if (ptrace(PTRACE_GETREGS, pid, NULL, regs) < 0) {
+ perror("ptrace_getregs: Can not get register values");
+ return -1;
+ }
+
+ return 0;
+}
+
+int ptrace_setregs(pid_t pid, struct pt_regs * regs)
+{
+ if (ptrace(PTRACE_SETREGS, pid, NULL, regs) < 0) {
+ perror("ptrace_setregs: Can not set register values");
+ return -1;
+ }
+
+ return 0;
+}
+
+int ptrace_continue(pid_t pid)
+{
+ if (ptrace(PTRACE_CONT, pid, NULL, 0) < 0) {
+ perror("ptrace_cont");
+ return -1;
+ }
+
+ return 0;
+}
+
+int ptrace_attach(pid_t pid)
+{
+ if (ptrace(PTRACE_ATTACH, pid, NULL, 0) < 0) {
+ perror("ptrace_attach");
+ return -1;
+ }
+
+ int status = 0;
+ waitpid(pid, &status , WUNTRACED);
+
+ return 0;
+}
+
+int ptrace_detach(pid_t pid)
+{
+ if (ptrace(PTRACE_DETACH, pid, NULL, 0) < 0) {
+ perror("ptrace_detach");
+ return -1;
+ }
+
+ return 0;
+}
+
+void* get_module_base(pid_t pid, const char* module_name)
+{
+ FILE *fp;
+ long addr = 0;
+ char *pch;
+ char filename[32];
+ char line[1024];
+
+ if (pid < 0) {
+ /* self process */
+ snprintf(filename, sizeof(filename), "/proc/self/maps", pid);
+ } else {
+ snprintf(filename, sizeof(filename), "/proc/%d/maps", pid);
+ }
+
+ fp = fopen(filename, "r");
+
+ if (fp != NULL) {
+ while (fgets(line, sizeof(line), fp)) {
+ if (strstr(line, module_name)) {
+ pch = strtok( line, "-" );
+ addr = strtoul( pch, NULL, 16 );
+
+ if (addr == 0x8000)
+ addr = 0;
+
+ break;
+ }
+ }
+
+ fclose(fp) ;
+ }
+
+ return (void *)addr;
+}
+
+void* get_remote_addr(pid_t target_pid, const char* module_name, void* local_addr)
+{
+ void* local_handle, *remote_handle;
+
+ local_handle = get_module_base(-1, module_name);
+ remote_handle = get_module_base(target_pid, module_name);
+
+ DEBUG_PRINT("[+] get_remote_addr: local[%x], remote[%x]\n", local_handle, remote_handle);
+
+ void * ret_addr = (void *)((uint32_t)local_addr + (uint32_t)remote_handle - (uint32_t)local_handle);
+
+#if defined(__i386__)
+ if (!strcmp(module_name, libc_path)) {
+ ret_addr += 2;
+ }
+#endif
+ return ret_addr;
+}
+
+int find_pid_of(const char *process_name)
+{
+ int id;
+ pid_t pid = -1;
+ DIR* dir;
+ FILE *fp;
+ char filename[32];
+ char cmdline[256];
+
+ struct dirent * entry;
+
+ if (process_name == NULL)
+ return -1;
+
+ dir = opendir("/proc");
+ if (dir == NULL)
+ return -1;
+
+ while((entry = readdir(dir)) != NULL) {
+ id = atoi(entry->d_name);
+ if (id != 0) {
+ sprintf(filename, "/proc/%d/cmdline", id);
+ fp = fopen(filename, "r");
+ if (fp) {
+ fgets(cmdline, sizeof(cmdline), fp);
+ fclose(fp);
+
+ if (strcmp(process_name, cmdline) == 0) {
+ /* process found */
+ pid = id;
+ break;
+ }
+ }
+ }
+ }
+
+ closedir(dir);
+ return pid;
+}
+
+long ptrace_retval(struct pt_regs * regs)
+{
+#if defined(__arm__)
+ return regs->ARM_r0;
+#elif defined(__i386__)
+ return regs->eax;
+#else
+#error "Not supported"
+#endif
+}
+
+long ptrace_ip(struct pt_regs * regs)
+{
+#if defined(__arm__)
+ return regs->ARM_pc;
+#elif defined(__i386__)
+ return regs->eip;
+#else
+#error "Not supported"
+#endif
+}
+
+int ptrace_call_wrapper(pid_t target_pid, const char * func_name, void * func_addr, long * parameters, int param_num, struct pt_regs * regs)
+{
+ DEBUG_PRINT("[+] Calling %s in target process.\n", func_name);
+ if (ptrace_call(target_pid, (uint32_t)func_addr, parameters, param_num, regs) == -1)
+ return -1;
+
+ if (ptrace_getregs(target_pid, regs) == -1)
+ return -1;
+ DEBUG_PRINT("[+] Target process returned from %s, return value=%x, pc=%x \n",
+ func_name, ptrace_retval(regs), ptrace_ip(regs));
+ return 0;
+}
+
+int inject_remote_process(pid_t target_pid, const char *library_path, const char *function_name, const char *param, size_t param_size)
+{
+ int ret = -1;
+ void *mmap_addr, *dlopen_addr, *dlsym_addr, *dlclose_addr, *dlerror_addr;
+ void *local_handle, *remote_handle, *dlhandle;
+ uint8_t *map_base = 0;
+ uint8_t *dlopen_param1_ptr, *dlsym_param2_ptr, *saved_r0_pc_ptr, *inject_param_ptr, *remote_code_ptr, *local_code_ptr;
+
+ struct pt_regs regs, original_regs;
+ extern uint32_t _dlopen_addr_s, _dlopen_param1_s, _dlopen_param2_s, _dlsym_addr_s, \
+ _dlsym_param2_s, _dlclose_addr_s, _inject_start_s, _inject_end_s, _inject_function_param_s, \
+ _saved_cpsr_s, _saved_r0_pc_s;
+
+ uint32_t code_length;
+ long parameters[10];
+
+ DEBUG_PRINT("[+] Injecting process: %d\n", target_pid);
+
+ if (ptrace_attach(target_pid) == -1)
+ goto exit;
+
+ if (ptrace_getregs(target_pid, ®s) == -1)
+ goto exit;
+
+ /* save original registers */
+ memcpy(&original_regs, ®s, sizeof(regs));
+
+ mmap_addr = get_remote_addr(target_pid, libc_path, (void *)mmap);
+ DEBUG_PRINT("[+] Remote mmap address: %x\n", mmap_addr);
+
+ /* call mmap */
+ parameters[0] = 0; // addr
+ parameters[1] = 0x4000; // size
+ parameters[2] = PROT_READ | PROT_WRITE | PROT_EXEC; // prot
+ parameters[3] = MAP_ANONYMOUS | MAP_PRIVATE; // flags
+ parameters[4] = 0; //fd
+ parameters[5] = 0; //offset
+
+ if (ptrace_call_wrapper(target_pid, "mmap", mmap_addr, parameters, 6, ®s) == -1)
+ goto exit;
+
+ map_base = ptrace_retval(®s);
+
+ dlopen_addr = get_remote_addr( target_pid, linker_path, (void *)dlopen );
+ dlsym_addr = get_remote_addr( target_pid, linker_path, (void *)dlsym );
+ dlclose_addr = get_remote_addr( target_pid, linker_path, (void *)dlclose );
+ dlerror_addr = get_remote_addr( target_pid, linker_path, (void *)dlerror );
+
+ DEBUG_PRINT("[+] Get imports: dlopen: %x, dlsym: %x, dlclose: %x, dlerror: %x\n",
+ dlopen_addr, dlsym_addr, dlclose_addr, dlerror_addr);
+
+
+
+ DEBUG_PRINT("library path = %s\n", library_path);
+
+ ptrace_writedata(target_pid, map_base, library_path, strlen(library_path) + 1);
+
+ parameters[0] = map_base;
+ parameters[1] = RTLD_NOW| RTLD_GLOBAL;
+
+ if (ptrace_call_wrapper(target_pid, "dlopen", dlopen_addr, parameters, 2, ®s) == -1)
+ goto exit;
+
+ DEBUG_PRINT("dlerror = %s\n", dlerror());
+
+ void * sohandle = ptrace_retval(®s);
+
+#define FUNCTION_NAME_ADDR_OFFSET 0x100
+ ptrace_writedata(target_pid, map_base + FUNCTION_NAME_ADDR_OFFSET, function_name, strlen(function_name) + 1);
+ parameters[0] = sohandle;
+ parameters[1] = map_base + FUNCTION_NAME_ADDR_OFFSET;
+
+ if (ptrace_call_wrapper(target_pid, "dlsym", dlsym_addr, parameters, 2, ®s) == -1)
+ goto exit;
+
+ void * hook_entry_addr = ptrace_retval(®s);
+ DEBUG_PRINT("hook_entry_addr = %p\n", hook_entry_addr);
+
+#define FUNCTION_PARAM_ADDR_OFFSET 0x200
+ ptrace_writedata(target_pid, map_base + FUNCTION_PARAM_ADDR_OFFSET, param, strlen(param) + 1);
+ parameters[0] = map_base + FUNCTION_PARAM_ADDR_OFFSET;
+
+ if (ptrace_call_wrapper(target_pid, "entry", hook_entry_addr, parameters, 1, ®s) == -1)
+ goto exit;
+
+// if (ptrace_call_wrapper(target_pid, "dlclose", dlclose, parameters, 1, ®s) == -1)
+// goto exit;
+
+ /* restore */
+ ptrace_setregs(target_pid, &original_regs);
+ ptrace_detach(target_pid);
+ ret = 0;
+
+exit:
+ return ret;
+}
+
+#define DEFAULT_LIBS "/data/local/tmp/libqever.so"
+#define DEFAULT_ENTRY "entry"
+#define DEFAULT_TARGET "com.wiseyq.sojni"
+void Usage(char * prog)
+{
+ printf("Usage:\n");
+ printf(" %s [lib] [entry] [target]\n", prog);
+
+ printf(" lib the lib(*.so) to be injected\n");
+ printf(" default is \"%s\"\n", DEFAULT_LIBS);
+ printf(" entry the entry of lib\n");
+ printf(" default is \"%s\"\n", DEFAULT_ENTRY);
+ printf(" target the target process to be injected, pid or name\n");
+ printf(" default is \"%s\"\n", DEFAULT_TARGET);
+}
+
+
+int main(int argc, char** argv) {
+ char * libs = DEFAULT_LIBS;
+ char * entry = DEFAULT_ENTRY;
+ char * target = DEFAULT_TARGET;
+ pid_t target_pid = 0;
+ switch(argc){
+ case 1:
+ Usage(argv[0]);
+ return 0;
+ case 4:
+ target_pid = atoi(argv[3]);
+ if(target_pid == 0){
+ target = argv[3];
+ }
+ case 3:
+ entry = argv[2];
+ case 2:
+ libs = argv[1];
+ }
+ if(target_pid == 0){
+ target_pid = find_pid_of(target);
+ }
+ if (-1 == target_pid) {
+ printf("[E]Can't find the process %s\n", target);
+ return -1;
+ }
+
+ inject_remote_process(target_pid, libs, entry, "I'm parameter!", strlen("I'm parameter!"));
+ return 0;
+}
\ No newline at end of file
diff --git a/inject/jni/qever.c b/inject/jni/qever.c
new file mode 100755
index 0000000..f0d0c74
--- /dev/null
+++ b/inject/jni/qever.c
@@ -0,0 +1,266 @@
+#include
+#include
+#include
+#include
+#include
+
+#define LOG_TAG "qever"
+
+#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__);
+
+#ifndef u1
+#define u1 unsigned char
+#define u2 unsigned short
+#define u4 unsigned int
+#endif
+#define LOADED_CLASSES_OFFSET 0xAC
+#define NAME_OF_CLASS_OFFSET 24
+#define METHOD_OF_CLASS_OFFSET 0x64
+
+typedef struct{
+ u4 hashValue;
+ void* data;
+} HashEntry ;
+
+typedef struct{
+ int tableSize; /* must be power of 2 */
+ int numEntries; /* current #of "live" entries */
+ int numDeadEntries; /* current #of tombstone entries */
+ HashEntry* pEntries; /* array on heap */
+ void * freeFunc;
+ void * lock;
+} HashTable ;
+
+typedef struct{
+ u1* clazz;
+ u4 accessFlags;
+ u2 methodIndex;
+ u2 registersSize;
+ u2 outsSize;
+ u2 insSize;
+ const char* name;
+ void* prototype;
+ const char* shorty;
+ const u2* insns;
+ int jniArgInfo;
+ void* nativeFunc;
+ void* x;
+ void* xx;
+ void* xxx;
+ void* xxxx;
+} Method ;
+u1 * get_gdvm_address()
+{
+ u4 * gDvm;
+ void * handle = dlopen("libdvm.so", RTLD_NOW);
+ if(handle == NULL){
+ LOGD("[E] %s > dlopen error, reson : %s", __FUNCTION__, dlerror());
+ return NULL;
+ }
+
+ gDvm = (u4*)dlsym(handle, "gDvm");
+ if(gDvm == NULL){
+ LOGD("[E] %s > dlsym error, reson : %s", __FUNCTION__, dlerror());
+ }
+
+ close(handle);
+ return gDvm;
+}
+
+void DumpMemory(u4 * addr, u4 size)
+{
+ LOGD("DumpMemory of 0x%08x", addr);
+ int i;
+ for(i = 0; i < size / sizeof(u4); i+=4){
+ LOGD("%08x %08x %08x %08x", addr[i], addr[i + 1], addr[i+2],addr[i+3]);
+ }
+}
+
+void DumpMemoryByChar(u1 * addr, u4 size)
+{
+ LOGD("DumpMemoryByChar of 0x%08x", addr);
+ int i;
+ for(i = 0; i < size; i+= 4){
+ LOGD("%02x %02x %02x %02x", addr[i], addr[i + 1], addr[i+2],addr[i+3]);
+ }
+
+}
+
+void DumpString(u4 * addr, u4 num)
+{
+ LOGD("DumpString of 0x%08x", addr);
+ int i;
+ for(i = 8; i < num; i++){
+ char * p = (char *)addr[i];
+ LOGD("%d String : %s", i, p);
+ }
+}
+
+int get_module_range(char * name, uint32_t * b, uint32_t * e)
+{
+ uint32_t begin, end, tmp;
+ FILE * fp;
+ char maps[0x40];
+ char line[1024];
+ pid_t pid = getpid();
+ snprintf(maps, 0x40, "/proc/%d/maps", pid);
+
+ fp = fopen(maps, "r");
+ if(fp == NULL){
+ LOGD("[E] %s > fopen error(%d)", __FUNCTION__, errno);
+ return -1;
+ }
+
+ begin = 0xFFFFFFFF;
+ end = 0;
+ while(fgets(line, 1024,fp)!= NULL){
+ if(strstr(line, name)){
+ char * p = strtok(line, " ");
+ p = strtok(p, "-");
+ tmp = strtoul(p, 0, 16);
+ if(tmp < begin){
+ begin = tmp;
+ }
+ p = strtok(NULL, "-");
+ tmp = strtoul(p, 0, 16);
+ if(tmp > end){
+ end = tmp;
+ }
+ }
+ }
+
+ LOGD("[I] %s > 0x%08x-0x%08x %s", __FUNCTION__, begin, end, name);
+
+ *b = begin;
+ *e = end;
+
+ return 0;
+}
+
+void DumpSo(char *SoName)
+{
+ FILE * fp;
+ uint32_t begin,end;
+ get_module_range(SoName, &begin, &end);
+
+ fp = fopen("/data/data/com.crackme/dump.so", "wb");
+ if(fp == NULL){
+ LOGD("[E] %s > fopen error!", __FUNCTION__);
+ return;
+ }
+ fwrite((void*)begin, sizeof(char), end - begin, fp);
+ fclose(fp);
+}
+
+void DumpDex(char *DexName)
+{
+ FILE * fp;
+ uint32_t begin,end;
+ get_module_range(DexName, &begin, &end);
+
+ fp = fopen("/data/data/com.crackme/dump.dex", "wb");
+ if(fp == NULL){
+ LOGD("[E] %s > fopen error!", __FUNCTION__);
+ return;
+ }
+ fwrite((void*)begin, sizeof(char), end - begin, fp);
+ fclose(fp);
+}
+
+int do_task()
+{
+ static u1* gDvm = NULL;
+ static u1* CrackMe = NULL;
+ static u4 MethodNum = 0;
+ static Method* MethodList = NULL;
+
+ int i;
+ LOGD("Do Task ... ");
+ if(CrackMe == NULL){
+ if(MethodList == NULL){
+ HashTable * table;
+ HashEntry * entry;
+ int hash_size, i;
+ u1 * class_list;
+
+ if(gDvm == NULL){
+ gDvm = get_gdvm_address();
+ if(gDvm == NULL){
+ LOGD("[E] %s > Unable to get gDvm! exit!", __FUNCTION__, dlerror());
+ return 0;
+ }
+ }
+ LOGD("[I] %s > gDvm = 0x%08x", __FUNCTION__, gDvm);
+ table = (HashTable *)*(u4*)(gDvm + LOADED_CLASSES_OFFSET);
+ if(table == NULL){
+ LOGD("[E] %s > Unable to get HashTable! exit!", __FUNCTION__);
+ DumpMemory(gDvm, 0x300);
+ return 0;
+ }
+
+ LOGD("[I] %s > HashTable = 0x%08x", __FUNCTION__, table);
+
+ hash_size = table->tableSize;
+ entry = table->pEntries;
+ if(entry == NULL){
+ LOGD("[E] %s > Unable to get entry of HashTable! exit!", __FUNCTION__);
+ return 0;
+ }
+
+ LOGD("[I] %s > HashTableSize = 0x%x, Entry = 0x%08x", __FUNCTION__, hash_size, entry);
+
+ for(i = 0; i < hash_size; i++){
+ if(entry[i].data != NULL){
+ u1 * clazz = (u1*)entry[i].data;
+
+ char * name = (char *)*(u4*)(clazz + NAME_OF_CLASS_OFFSET);
+ if(name != NULL){
+ if(strcmp(name, "Lcom/crackme/MainActivity;") == 0){
+ LOGD("[I] %s > Class > 0x%08x - %s", __FUNCTION__, clazz, name);
+ MethodList = (Method*)*(u4*)(clazz + METHOD_OF_CLASS_OFFSET);
+ if(MethodList == NULL){
+ LOGD("[E] %s > Unable to get MethodList! exit!", __FUNCTION__, dlerror());
+ DumpMemory(clazz, 0x100);
+ return 0;
+ }
+ MethodNum = *(u4*)(clazz + METHOD_OF_CLASS_OFFSET - 4);
+ }
+ }
+
+ }
+ }
+
+ }
+
+ LOGD("[I] %s > MethodList = 0x%08x, MethodNum = %d", __FUNCTION__, MethodList, MethodNum);
+ if(MethodList == NULL){
+ return -1;
+ }
+ i = 0;
+ for(i = 0; i < MethodNum; i++){
+ LOGD("[I] %s > Method > 0x%08x : %s", __FUNCTION__, MethodList[i].insns, MethodList[i].name);
+ if(strcmp(MethodList[i].name, "crackme") == 0){
+ LOGD("[I] %s > Native Method > 0x%08x : %s", __FUNCTION__, MethodList[i].jniArgInfo, MethodList[i].name);
+ return 0;
+ }
+ }
+ }
+}
+void * new_entry(void * param)
+{
+ while(do_task()){
+ sleep(3);
+ }
+
+ DumpSo("libcrackme.so");
+ DumpDex("classes.dex");
+}
+
+
+void * entry(void * param)
+{
+ LOGD("Hook success, pid = %d\n", getpid());
+// pthread_t thread;
+// pthread_create(&thread, NULL, new_entry, NULL);
+ return 0;
+}
diff --git a/inject/libs/armeabi-v7a/inject b/inject/libs/armeabi-v7a/inject
new file mode 100755
index 0000000..cebd5ab
Binary files /dev/null and b/inject/libs/armeabi-v7a/inject differ
diff --git a/inject/libs/armeabi-v7a/libqever.so b/inject/libs/armeabi-v7a/libqever.so
new file mode 100755
index 0000000..4246637
Binary files /dev/null and b/inject/libs/armeabi-v7a/libqever.so differ
diff --git a/inject/libs/x86/inject b/inject/libs/x86/inject
new file mode 100755
index 0000000..512e99f
Binary files /dev/null and b/inject/libs/x86/inject differ
diff --git a/inject/libs/x86/libqever.so b/inject/libs/x86/libqever.so
new file mode 100755
index 0000000..68f7532
Binary files /dev/null and b/inject/libs/x86/libqever.so differ
diff --git a/inject/obj/local/armeabi-v7a/inject b/inject/obj/local/armeabi-v7a/inject
new file mode 100755
index 0000000..2be2a64
Binary files /dev/null and b/inject/obj/local/armeabi-v7a/inject differ
diff --git a/inject/obj/local/armeabi-v7a/libqever.so b/inject/obj/local/armeabi-v7a/libqever.so
new file mode 100755
index 0000000..79a2611
Binary files /dev/null and b/inject/obj/local/armeabi-v7a/libqever.so differ
diff --git a/inject/obj/local/armeabi-v7a/objs/inject/inject.o b/inject/obj/local/armeabi-v7a/objs/inject/inject.o
new file mode 100644
index 0000000..7b4ed8e
Binary files /dev/null and b/inject/obj/local/armeabi-v7a/objs/inject/inject.o differ
diff --git a/inject/obj/local/armeabi-v7a/objs/inject/inject.o.d b/inject/obj/local/armeabi-v7a/objs/inject/inject.o.d
new file mode 100644
index 0000000..b2afd29
--- /dev/null
+++ b/inject/obj/local/armeabi-v7a/objs/inject/inject.o.d
@@ -0,0 +1,217 @@
+obj/local/armeabi-v7a/objs/inject/inject.o: jni/inject.c \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdio.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs_elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/api-level.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdint.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_wchar_limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/stddef.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/compiler.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/kernel.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/sysmacros.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdlib.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/string.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/malloc.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/alloca.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/strings.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/memory.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/user.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/user.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/internal_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/syslimits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/page.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/ptrace.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/ptrace.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/ptrace.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/wait.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/wait.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/unistd.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/syscall.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno-base.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/mman.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/mman.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/mman.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/mman-common.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/dlfcn.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/dirent.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/unistd.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/select.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/ucontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/sigcontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/sysconf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/capability.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/pathconf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/exec_elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/exec.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/log.h
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdio.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs_elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/api-level.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdint.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_wchar_limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/stddef.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/compiler.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/kernel.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/sysmacros.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdlib.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/string.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/malloc.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/alloca.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/strings.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/memory.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/user.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/user.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/internal_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/syslimits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/page.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/ptrace.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/ptrace.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/ptrace.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/wait.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/wait.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/unistd.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/syscall.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno-base.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/mman.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/mman.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/mman.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/mman-common.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/dlfcn.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/dirent.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/unistd.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/select.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/ucontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/sigcontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/sysconf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/capability.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/pathconf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/exec_elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/exec.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/log.h:
diff --git a/inject/obj/local/armeabi-v7a/objs/qever/qever.o b/inject/obj/local/armeabi-v7a/objs/qever/qever.o
new file mode 100644
index 0000000..7164949
Binary files /dev/null and b/inject/obj/local/armeabi-v7a/objs/qever/qever.o differ
diff --git a/inject/obj/local/armeabi-v7a/objs/qever/qever.o.d b/inject/obj/local/armeabi-v7a/objs/qever/qever.o.d
new file mode 100644
index 0000000..58267cb
--- /dev/null
+++ b/inject/obj/local/armeabi-v7a/objs/qever/qever.o.d
@@ -0,0 +1,139 @@
+obj/local/armeabi-v7a/objs/qever/qever.o: jni/qever.c \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/dlfcn.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs_elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/api-level.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno-base.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdio.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdint.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_wchar_limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/stddef.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/compiler.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/kernel.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/sysmacros.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/log.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/pthread.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/internal_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/syslimits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/page.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/string.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/malloc.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/ucontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/user.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/sigcontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sched.h
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/dlfcn.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/cdefs_elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/api-level.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/errno-base.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdio.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/stdint.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/_wchar_limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/stddef.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/compiler.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/kernel.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/sysmacros.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/android/log.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/pthread.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/linux/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/internal_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/machine/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/syslimits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/page.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/string.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/malloc.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm-generic/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/ucontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sys/user.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/asm/sigcontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-3/arch-arm/usr/include/sched.h:
diff --git a/inject/obj/local/x86/inject b/inject/obj/local/x86/inject
new file mode 100755
index 0000000..a96477a
Binary files /dev/null and b/inject/obj/local/x86/inject differ
diff --git a/inject/obj/local/x86/libqever.so b/inject/obj/local/x86/libqever.so
new file mode 100755
index 0000000..ffb13ce
Binary files /dev/null and b/inject/obj/local/x86/libqever.so differ
diff --git a/inject/obj/local/x86/objs/inject/inject.o b/inject/obj/local/x86/objs/inject/inject.o
new file mode 100644
index 0000000..16c2e62
Binary files /dev/null and b/inject/obj/local/x86/objs/inject/inject.o differ
diff --git a/inject/obj/local/x86/objs/inject/inject.o.d b/inject/obj/local/x86/objs/inject/inject.o.d
new file mode 100644
index 0000000..f6d5629
--- /dev/null
+++ b/inject/obj/local/x86/objs/inject/inject.o.d
@@ -0,0 +1,232 @@
+obj/local/x86/objs/inject/inject.o: jni/inject.c \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdio.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs_elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/api-level.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdint.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_wchar_limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/stddef.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/compiler.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types_32.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/kernel.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/sysmacros.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdlib.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/string.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/malloc.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/alloca.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/strings.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/memory.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/user.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/user.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/internal_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/syslimits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page_32.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/ptrace.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/ptrace-abi.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/processor-flags.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/ptrace.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/ptrace.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/wait.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/resource.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/wait.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/sigcontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/ucontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/unistd.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/unistd_32.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/syscall.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno-base.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/mman.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/mman.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/mman.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/mman-common.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/dlfcn.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/dirent.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/unistd.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/select.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/sysconf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/capability.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/pathconf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/exec_elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/exec.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/log.h
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdio.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs_elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/api-level.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdint.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_wchar_limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/stddef.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/compiler.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types_32.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/kernel.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/sysmacros.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdlib.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/string.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/malloc.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/alloca.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/strings.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/memory.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/user.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/user.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/internal_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/syslimits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page_32.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/ptrace.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/ptrace-abi.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/processor-flags.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/ptrace.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/ptrace.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/wait.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/resource.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/wait.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/sigcontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/ucontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/unistd.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/unistd_32.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/syscall.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno-base.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/mman.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/mman.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/mman.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/mman-common.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/dlfcn.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/dirent.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/unistd.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/select.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/sysconf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/capability.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/pathconf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/exec_elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/exec.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/log.h:
diff --git a/inject/obj/local/x86/objs/qever/qever.o b/inject/obj/local/x86/objs/qever/qever.o
new file mode 100644
index 0000000..fc6f149
Binary files /dev/null and b/inject/obj/local/x86/objs/qever/qever.o differ
diff --git a/inject/obj/local/x86/objs/qever/qever.o.d b/inject/obj/local/x86/objs/qever/qever.o.d
new file mode 100644
index 0000000..2d4bbb2
--- /dev/null
+++ b/inject/obj/local/x86/objs/qever/qever.o.d
@@ -0,0 +1,145 @@
+obj/local/x86/objs/qever/qever.o: jni/qever.c \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/dlfcn.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs_elf.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/api-level.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno-base.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdio.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdint.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_wchar_limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/stddef.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/compiler.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types_32.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/kernel.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/sysmacros.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/log.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/pthread.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/time.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/siginfo.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/internal_types.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/limits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/syslimits.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page_32.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/string.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/malloc.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/signal.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/sigcontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/ucontext.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/user.h \
+ /Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sched.h
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/dlfcn.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/cdefs_elf.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/api-level.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/errno-base.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdio.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/stdint.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/_wchar_limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/stddef.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/compiler.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/posix_types_32.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/kernel.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/sysmacros.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/android/log.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/pthread.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/time.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/siginfo.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/linux/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/internal_types.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/machine/limits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/syslimits.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/page_32.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/string.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/malloc.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm-generic/signal.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/asm/sigcontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/ucontext.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sys/user.h:
+
+/Users/luffyjet/Documents/android-ndk-r10e/platforms/android-9/arch-x86/usr/include/sched.h:
diff --git a/inject/proguard-rules.pro b/inject/proguard-rules.pro
new file mode 100755
index 0000000..d194690
--- /dev/null
+++ b/inject/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /home/liuhang/before/tools/android/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/inject/src/main/AndroidManifest.xml b/inject/src/main/AndroidManifest.xml
new file mode 100755
index 0000000..32a95f6
--- /dev/null
+++ b/inject/src/main/AndroidManifest.xml
@@ -0,0 +1 @@
+
diff --git a/library/.gitignore b/library/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/library/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/library/build.gradle b/library/build.gradle
new file mode 100644
index 0000000..9dcf3d7
--- /dev/null
+++ b/library/build.gradle
@@ -0,0 +1,36 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion Integer.parseInt(rootProject.android_compileSdkVersion)
+ buildToolsVersion rootProject.android_buildToolsVersion
+
+ defaultConfig {
+ minSdkVersion Integer.parseInt(rootProject.android_minSdkVersion)
+ targetSdkVersion Integer.parseInt(rootProject.android_targetSdkVersion)
+ versionCode 1
+ versionName "1.0"
+
+ ndk {
+ moduleName "ccprotect"
+ ldLibs "log", "z", "m"
+ abiFilters "armeabi", "armeabi-v7a", "x86"
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']
+ assets.srcDirs = ['assets']
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+}
diff --git a/library/libs/armeabi-v7a/libccprotect.so b/library/libs/armeabi-v7a/libccprotect.so
new file mode 100755
index 0000000..bca5dfc
Binary files /dev/null and b/library/libs/armeabi-v7a/libccprotect.so differ
diff --git a/library/libs/armeabi/libccprotect.so b/library/libs/armeabi/libccprotect.so
new file mode 100755
index 0000000..a01a7eb
Binary files /dev/null and b/library/libs/armeabi/libccprotect.so differ
diff --git a/library/libs/x86/libccprotect.so b/library/libs/x86/libccprotect.so
new file mode 100755
index 0000000..cab8fa9
Binary files /dev/null and b/library/libs/x86/libccprotect.so differ
diff --git a/library/proguard-rules.pro b/library/proguard-rules.pro
new file mode 100644
index 0000000..1c90e63
--- /dev/null
+++ b/library/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/luffyjet/Documents/android-sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b5c641b
--- /dev/null
+++ b/library/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/library/src/main/java/com/wiseyq/safe/CCProctect.java b/library/src/main/java/com/wiseyq/safe/CCProctect.java
new file mode 100644
index 0000000..a3f8a81
--- /dev/null
+++ b/library/src/main/java/com/wiseyq/safe/CCProctect.java
@@ -0,0 +1,94 @@
+package com.wiseyq.safe;
+
+import android.util.Log;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.util.HashSet;
+
+/**
+ * Title :
+ * Author : luffyjet
+ * Date : 2018/5/15
+ * Project : SOJNI
+ * Site : http://www.luffyjet.com
+ */
+public class CCProctect {
+ private static final String TAG = "UninstallSo";
+
+ //加载so库
+ static {
+ System.loadLibrary("ccprotect");
+ }
+
+ /***
+ * true:already in using false:not using
+ * @param port
+ */
+ public static boolean isLoclePortUsing(int port) {
+ boolean flag = true;
+ try {
+ flag = isPortUsing("127.0.0.1", port);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return flag;
+ }
+
+ /***
+ * true:already in using false:not using
+ * @param host
+ * @param port
+ * @throws UnknownHostException
+ */
+ public static boolean isPortUsing(String host, int port) throws UnknownHostException {
+ boolean flag = false;
+ InetAddress theAddress = InetAddress.getByName(host);
+ try {
+ Socket socket = new Socket(theAddress, port);
+ flag = true;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return flag;
+ }
+
+
+ //该函数搜索进程PID被注入的第三方so。
+ public static HashSet getSoList(int pid, String pkg) {
+ HashSet temp = new HashSet();
+ File file = new File("/proc/" + pid + "/maps");
+ if (!file.exists()) {
+ Log.i(TAG, "getSoList:proc file not exists");
+ return temp;
+ }
+
+ try {
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
+ String lineString;
+ while ((lineString = bufferedReader.readLine()) != null) {
+ String tempString = lineString.trim();
+ Log.i(TAG, "getSoList tempString:" + tempString);
+ if (tempString.endsWith(".so")
+ && !tempString.contains("/data/data/" + pkg)
+ && !tempString.contains("system/lib")) {
+ temp.add(tempString);
+ }
+ }
+ bufferedReader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return temp;
+ }
+
+ //卸载加载的so库
+ public static native void uninstall(String soPath);
+
+}
diff --git a/library/src/main/jni/main.c b/library/src/main/jni/main.c
new file mode 100644
index 0000000..721fda0
--- /dev/null
+++ b/library/src/main/jni/main.c
@@ -0,0 +1,172 @@
+//
+// Created by luffyjet on 2018/5/15.
+//
+
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifndef _Included_com_wiseyq_safe_CCprotect
+#define _Included_com_wiseyq_safe_CCprotect
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "CCJNI", __VA_ARGS__)
+
+
+pthread_t t_id;
+
+//获取TracePid
+int getnumberfor_str(char* str){
+ if(str == NULL){
+ return -1;
+ }
+ char result[20];
+ int count = 0;
+ while(*str != '\0'){
+ if(*str >= 48 && *str <= 57){
+ result[count] = *str;
+ count++;
+ }
+ str++;
+ }
+ int val = atoi(result);
+ return val;
+}
+
+//开启循环轮训检查TracePid字段
+void thread_fuction() {
+ int pid = getpid();
+ int ppid = getppid();
+
+ LOGD("pid:%d", pid);
+ LOGD("ppid:%d", ppid);
+
+
+ char file_name[20] = {'\0'};
+ sprintf(file_name, "/proc/%d/status",pid);
+ char linestr[256];
+ int i=0, traceid;
+ FILE *fp;
+ while(1){
+ i = 0;
+ fp = fopen(file_name,"r");
+ if(fp == NULL){
+ break;
+ }
+ while(!feof(fp)){
+ fgets(linestr, 256, fp);
+ if(i == 5){
+ LOGD("trace:%s", linestr);
+ traceid = getnumberfor_str(linestr);
+ LOGD("traceId:%d", traceid);
+ if(traceid > 0 && ppid!=traceid){
+ LOGD("I was be traced...trace pid:%d",traceid);
+ kill(pid, SIGKILL);
+ exit(0);
+ }
+ break;
+ }
+ i++;
+ }
+ fclose(fp);
+ sleep(5);
+ }
+}
+
+//检查 IDA 工具默认监听端口
+int find_debug_port(){
+ char szLines[1024] = {0};
+ int nFind = 0;
+
+ FILE *fp = fopen("/proc/net/tcp", "r");
+ if (fp != NULL)
+ {
+ while (fgets(szLines, sizeof(szLines), fp))
+ {
+ //23946端口
+ if (strstr(szLines, "00000000:5D8A"))
+ {
+ nFind = 1;
+ printf("find\r\n");
+ break;
+ }
+ }
+
+ fclose(fp);
+ }
+ else
+ {
+ printf("fopen error\r\n");
+ }
+
+ if (nFind == 0)
+ {
+ printf("no find\r\n");
+ }
+
+ return nFind;
+}
+
+
+void create_thread_check_traceid(){
+ int err = pthread_create(&t_id,NULL, thread_fuction, NULL);
+ if(err != 0 ) {
+ LOGD("create thread fail: %s\n",strerror(err));
+ }
+}
+
+jint JNI_OnLoad(JavaVM* vm, void* reserved){
+ LOGD("JNI on load...");
+
+ //自己附加
+ LOGD("ptrace myself...");
+ ptrace(PTRACE_TRACEME, 0, 0, 0);
+
+ //声明变量
+ JNIEnv* env = NULL;
+
+ //检测自己有没有被trace
+ create_thread_check_traceid();
+
+ //获取JNI环境对象
+ if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {
+ LOGD("ERROR: GetEnv failed\n");
+ return JNI_ERR;
+ }
+
+ return JNI_VERSION_1_4;
+}
+
+//onUnLoad方法,在JNI组件被释放时调用
+void JNI_OnUnload(JavaVM* vm, void* reserved){
+ LOGD("JNI unload...");
+}
+
+JNIEXPORT void JNICALL
+Java_com_wiseyq_safe_CCProctect_uninstall(JNIEnv *env, jclass type, jstring soPath_) {
+ const char *soPath = (*env)->GetStringUTFChars(env, soPath_, 0);
+ void*handle=dlopen(soPath,RTLD_NOW);
+ int count=4;
+ int i=0;
+ for(i=0;iReleaseStringUTFChars(env, soPath_, soPath);
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/library/src/main/res/values/strings.xml b/library/src/main/res/values/strings.xml
new file mode 100644
index 0000000..8542005
--- /dev/null
+++ b/library/src/main/res/values/strings.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..faa438d
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app', ':library',':inject'