Commit e7112454 authored by swift_gan's avatar swift_gan

tweak project struct

parent eb548da8
apply plugin: 'java-library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
package com.swift.sandhook.wrapper; package com.swift.sandhook.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
......
package com.swift.sandhook.wrapper; package com.swift.sandhook.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
......
package com.swift.sandhook.wrapper; package com.swift.sandhook.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
......
package com.swift.sandhook.wrapper; package com.swift.sandhook.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
......
package com.swift.sandhook.wrapper; package com.swift.sandhook.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
......
package com.swift.sandhook.wrapper; package com.swift.sandhook.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.swift.sandhook"> package="com.swift.sandhook">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application <application
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
......
...@@ -12,6 +12,8 @@ import android.view.Menu; ...@@ -12,6 +12,8 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.Toast; import android.widget.Toast;
import com.swift.sandhook.test.Inter;
import com.swift.sandhook.test.InterImpl;
import com.swift.sandhook.test.TestClass; import com.swift.sandhook.test.TestClass;
import com.swift.sandhook.wrapper.HookErrorException; import com.swift.sandhook.wrapper.HookErrorException;
import com.swift.sandhook.wrapper.HookWrapper; import com.swift.sandhook.wrapper.HookWrapper;
...@@ -23,7 +25,7 @@ import java.lang.reflect.Method; ...@@ -23,7 +25,7 @@ import java.lang.reflect.Method;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup. // Used to load the 'native-lib' library on application startup.
Inter inter;
@Override @Override
protected void onCreate(final Bundle savedInstanceState) { protected void onCreate(final Bundle savedInstanceState) {
...@@ -64,7 +66,22 @@ public class MainActivity extends AppCompatActivity { ...@@ -64,7 +66,22 @@ public class MainActivity extends AppCompatActivity {
Log.e("dd", str.a + ""); Log.e("dd", str.a + "");
inter = new InterImpl();
new Thread(new Runnable() {
@Override
public void run() {
inter.dosth();
inter = new Inter() {
@Override
public void dosth() {
Log.e("dosth", hashCode() + "");
}
};
}
}).start();
inter.dosth();
} }
public static Field getField(Class topClass, String fieldName) throws NoSuchFieldException { public static Field getField(Class topClass, String fieldName) throws NoSuchFieldException {
...@@ -88,6 +105,12 @@ public class MainActivity extends AppCompatActivity { ...@@ -88,6 +105,12 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
inter = new Inter() {
@Override
public void dosth() {
Log.e("dosth", hashCode() + "");
}
};
} }
public static int methodBeHooked(int a, int b) { public static int methodBeHooked(int a, int b) {
......
...@@ -2,7 +2,6 @@ package com.swift.sandhook; ...@@ -2,7 +2,6 @@ package com.swift.sandhook;
import android.app.Application; import android.app.Application;
import com.swift.sandhook.testHookers.AbsHooker;
import com.swift.sandhook.testHookers.ActivityHooker; import com.swift.sandhook.testHookers.ActivityHooker;
import com.swift.sandhook.testHookers.CtrHook; import com.swift.sandhook.testHookers.CtrHook;
import com.swift.sandhook.testHookers.CustmizeHooker; import com.swift.sandhook.testHookers.CustmizeHooker;
...@@ -11,6 +10,8 @@ import com.swift.sandhook.testHookers.LogHooker; ...@@ -11,6 +10,8 @@ import com.swift.sandhook.testHookers.LogHooker;
import com.swift.sandhook.testHookers.ObjectHooker; import com.swift.sandhook.testHookers.ObjectHooker;
import com.swift.sandhook.wrapper.HookErrorException; import com.swift.sandhook.wrapper.HookErrorException;
import dalvik.system.DexClassLoader;
public class MyApp extends Application { public class MyApp extends Application {
@Override @Override
public void onCreate() { public void onCreate() {
...@@ -21,8 +22,19 @@ public class MyApp extends Application { ...@@ -21,8 +22,19 @@ public class MyApp extends Application {
LogHooker.class, LogHooker.class,
CustmizeHooker.class, CustmizeHooker.class,
ActivityHooker.class, ActivityHooker.class,
ObjectHooker.class, ObjectHooker.class);
AbsHooker.class); } catch (HookErrorException e) {
e.printStackTrace();
}
try {
ClassLoader classLoader = getClassLoader();
DexClassLoader dexClassLoader = new DexClassLoader("/sdcard/hookers-debug.apk",
getCacheDir().getAbsolutePath(), null, classLoader);
Class absHookerClass = Class.forName("com.swift.sandhook.hookers.AbsHooker", true, dexClassLoader);
SandHook.addHookClass(absHookerClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (HookErrorException e) { } catch (HookErrorException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
package com.swift.sandhook.test;
public interface Inter {
void dosth();
}
package com.swift.sandhook.test;
import android.util.Log;
public class InterImpl implements Inter {
@Override
public void dosth() {
Log.e("dosth", "sasa");
}
}
package com.swift.sandhook.testHookers;
import android.util.Log;
import com.swift.sandhook.wrapper.HookClass;
import com.swift.sandhook.wrapper.HookMethod;
import com.swift.sandhook.wrapper.HookMethodBackup;
@HookClass(Runnable.class)
public class AbsHooker {
@HookMethod("run")
public static void onRun(Object thiz) {
Log.e("AbsHooker", "Runnable hook success ");
onRunBackup(thiz);
}
@HookMethodBackup("run")
public static void onRunBackup(Object thiz) {
onRunBackup(thiz);
}
}
...@@ -4,10 +4,10 @@ import android.app.Activity; ...@@ -4,10 +4,10 @@ import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import com.swift.sandhook.wrapper.HookClass; import com.swift.sandhook.annotation.HookClass;
import com.swift.sandhook.wrapper.HookMethod; import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.wrapper.HookMethodBackup; import com.swift.sandhook.annotation.HookMethodBackup;
import com.swift.sandhook.wrapper.MethodParams; import com.swift.sandhook.annotation.MethodParams;
import java.lang.reflect.Method; import java.lang.reflect.Method;
......
...@@ -3,10 +3,10 @@ package com.swift.sandhook.testHookers; ...@@ -3,10 +3,10 @@ package com.swift.sandhook.testHookers;
import android.util.Log; import android.util.Log;
import com.swift.sandhook.test.TestClass; import com.swift.sandhook.test.TestClass;
import com.swift.sandhook.wrapper.HookClass; import com.swift.sandhook.annotation.HookClass;
import com.swift.sandhook.wrapper.HookMethod; import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.wrapper.HookMethodBackup; import com.swift.sandhook.annotation.HookMethodBackup;
import com.swift.sandhook.wrapper.MethodParams; import com.swift.sandhook.annotation.MethodParams;
@HookClass(TestClass.class) @HookClass(TestClass.class)
public class CtrHook { public class CtrHook {
......
...@@ -3,10 +3,10 @@ package com.swift.sandhook.testHookers; ...@@ -3,10 +3,10 @@ package com.swift.sandhook.testHookers;
import android.util.Log; import android.util.Log;
import com.swift.sandhook.MainActivity; import com.swift.sandhook.MainActivity;
import com.swift.sandhook.wrapper.HookClass; import com.swift.sandhook.annotation.HookClass;
import com.swift.sandhook.wrapper.HookMethod; import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.wrapper.HookMethodBackup; import com.swift.sandhook.annotation.HookMethodBackup;
import com.swift.sandhook.wrapper.MethodParams; import com.swift.sandhook.annotation.MethodParams;
import java.lang.reflect.Method; import java.lang.reflect.Method;
......
...@@ -3,9 +3,9 @@ package com.swift.sandhook.testHookers; ...@@ -3,9 +3,9 @@ package com.swift.sandhook.testHookers;
import android.util.Log; import android.util.Log;
import com.swift.sandhook.test.TestClass; import com.swift.sandhook.test.TestClass;
import com.swift.sandhook.wrapper.HookClass; import com.swift.sandhook.annotation.HookClass;
import com.swift.sandhook.wrapper.HookMethod; import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.wrapper.HookMethodBackup; import com.swift.sandhook.annotation.HookMethodBackup;
@HookClass(TestClass.class) @HookClass(TestClass.class)
public class JniHooker { public class JniHooker {
......
...@@ -2,10 +2,10 @@ package com.swift.sandhook.testHookers; ...@@ -2,10 +2,10 @@ package com.swift.sandhook.testHookers;
import android.util.Log; import android.util.Log;
import com.swift.sandhook.wrapper.HookClass; import com.swift.sandhook.annotation.HookClass;
import com.swift.sandhook.wrapper.HookMethod; import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.wrapper.HookMethodBackup; import com.swift.sandhook.annotation.HookMethodBackup;
import com.swift.sandhook.wrapper.MethodParams; import com.swift.sandhook.annotation.MethodParams;
@HookClass(Log.class) @HookClass(Log.class)
public class LogHooker { public class LogHooker {
......
...@@ -2,9 +2,9 @@ package com.swift.sandhook.testHookers; ...@@ -2,9 +2,9 @@ package com.swift.sandhook.testHookers;
import android.util.Log; import android.util.Log;
import com.swift.sandhook.wrapper.HookClass; import com.swift.sandhook.annotation.HookClass;
import com.swift.sandhook.wrapper.HookMethod; import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.wrapper.HookMethodBackup; import com.swift.sandhook.annotation.HookMethodBackup;
@HookClass(Object.class) @HookClass(Object.class)
public class ObjectHooker { public class ObjectHooker {
......
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
compileOnly project(':annotation')
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# 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 *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.swift.sandhook.hookers" />
package com.swift.sandhook.hookers;
import android.util.Log;
import com.swift.sandhook.annotation.HookReflectClass;
import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.annotation.HookMethodBackup;
@HookReflectClass("com.swift.sandhook.test.Inter")
public class AbsHooker {
@HookMethod("dosth")
public static void ondosth(Object thiz) {
Log.e("AbsHooker", "dosth hook success ");
ondosthBackup(thiz);
}
@HookMethodBackup("dosth")
public static void ondosthBackup(Object thiz) {
ondosthBackup(thiz);
}
}
<resources>
<string name="app_name">hookers</string>
</resources>
...@@ -36,5 +36,6 @@ android { ...@@ -36,5 +36,6 @@ android {
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(include: ['*.jar'], dir: 'libs')
api project(':annotation')
} }
...@@ -3,6 +3,12 @@ package com.swift.sandhook.wrapper; ...@@ -3,6 +3,12 @@ package com.swift.sandhook.wrapper;
import android.text.TextUtils; import android.text.TextUtils;
import com.swift.sandhook.SandHook; import com.swift.sandhook.SandHook;
import com.swift.sandhook.annotation.HookClass;
import com.swift.sandhook.annotation.HookMethod;
import com.swift.sandhook.annotation.HookMethodBackup;
import com.swift.sandhook.annotation.HookReflectClass;
import com.swift.sandhook.annotation.MethodParams;
import com.swift.sandhook.annotation.MethodReflectParams;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
......
include ':app', ':hooklib' include ':app', ':hooklib', ':hookers', ':annotation'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment