diff --git a/app/build.gradle b/app/build.gradle index 4258203..50e6e3c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,6 +26,15 @@ android { path "CMakeLists.txt" } } + dataBinding { + addDefaultAdapters true + enabled true + enabledForTests true + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { diff --git a/app/src/main/java/pers/turing/technician/fasthookapp/MainActivity.java b/app/src/main/java/pers/turing/technician/fasthookapp/MainActivity.java index c6c55a3..06dd059 100644 --- a/app/src/main/java/pers/turing/technician/fasthookapp/MainActivity.java +++ b/app/src/main/java/pers/turing/technician/fasthookapp/MainActivity.java @@ -1,17 +1,14 @@ package pers.turing.technician.fasthookapp; -import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableField; import android.graphics.Color; import android.os.Build; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import android.util.Log; +import android.support.v7.app.AppCompatActivity; import android.view.View; -import android.widget.Button; -import android.widget.TextView; import android.widget.Toast; -import java.lang.reflect.Field; import java.lang.reflect.Method; import pers.turing.technician.fasthook.FastHookManager; @@ -19,179 +16,122 @@ public class MainActivity extends AppCompatActivity { - TextView mConstructorText; - TextView mDirectText; - TextView mVirtualText; - TextView mStaticText; - TextView mNativeDirectText; - TextView mNativeVirtualText; - TextView mNativeStaticText; - TextView mSystemText; - TextView mHiddenText; - - String mConstructorTextString; - String mDirectTextString; - String mVirtualTextString; - String mStaticTextString; - String mNativeDirectTextString; - String mNativeVirtualTextString; - String mNativeStaticTextString; - String mSystemTextString; - String mHiddenTextString; - - Button mRewriteMode; - Button mReplaceMode; - - Context mContext; + private MainActivityBinding binding; + private final TestModel model = new TestModel(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - mContext = this; - - mConstructorText = findViewById(R.id.constructor_test); - mDirectText = findViewById(R.id.direct_test); - mVirtualText = findViewById(R.id.virtual_test); - mStaticText = findViewById(R.id.static_test); - mNativeDirectText = findViewById(R.id.native_direct_test); - mNativeVirtualText = findViewById(R.id.native_virtual_test); - mNativeStaticText = findViewById(R.id.native_static_test); - mSystemText = findViewById(R.id.system_test); - mHiddenText = findViewById(R.id.hidden_test); - - mConstructorTextString = mConstructorText.getText().toString(); - mDirectTextString = mDirectText.getText().toString(); - mVirtualTextString = mVirtualText.getText().toString(); - mStaticTextString = mStaticText.getText().toString(); - mNativeDirectTextString = mNativeDirectText.getText().toString(); - mNativeVirtualTextString = mNativeVirtualText.getText().toString(); - mNativeStaticTextString = mNativeStaticText.getText().toString(); - mSystemTextString = mSystemText.getText().toString(); - mHiddenTextString = mHiddenText.getText().toString(); + binding = DataBindingUtil.setContentView(this, R.layout.activity_main); + binding.setModel(model); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - mHiddenText.setVisibility(View.VISIBLE); + binding.hiddenTest.setVisibility(View.VISIBLE); }else { - mHiddenText.setVisibility(View.GONE); + binding.hiddenTest.setVisibility(View.GONE); } - mRewriteMode = findViewById(R.id.button_rewrite); - mReplaceMode = findViewById(R.id.button_replace); - - mRewriteMode.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if(!MainApplication.mTest) { - MainApplication.mTest = true; - FastHookManager.doHook("pers.turing.technician.fasthookapp.hook.HookInfo",null,null,null,null,false); - test("1:"); - }else { - Toast toast = Toast.makeText(mContext,"already hook,please restart app to test!",Toast.LENGTH_SHORT); - toast.show(); - } + binding.buttonRewrite.setOnClickListener(view -> { + if(!MainApplication.mTest) { + MainApplication.mTest = true; + FastHookManager.doHook("pers.turing.technician.fasthookapp.hook.HookInfo", + null, + null, + null, + null, + false); + test("1:"); + }else { + Toast toast = Toast.makeText(getBaseContext(),"already hook,please restart app to test!",Toast.LENGTH_SHORT); + toast.show(); } }); - mReplaceMode.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if(!MainApplication.mTest) { - MainApplication.mTest = true; - FastHookManager.doHook("pers.turing.technician.fasthookapp.hook.HookInfo2",null,null,null,null,false); - test("2:"); - }else { - Toast toast = Toast.makeText(mContext,"already hook,please restart app to test!",Toast.LENGTH_SHORT); - toast.show(); - } + binding.buttonReplace.setOnClickListener(view -> { + if(!MainApplication.mTest) { + MainApplication.mTest = true; + FastHookManager.doHook("pers.turing.technician.fasthookapp.hook.HookInfo2",null,null,null,null,false); + test("2:"); + }else { + Toast toast = Toast.makeText(getBaseContext(),"already hook,please restart app to test!",Toast.LENGTH_SHORT); + toast.show(); } }); } - public void reset() { - mConstructorText.setText(mConstructorTextString); - mDirectText.setText(mDirectTextString); - mVirtualText.setText(mVirtualTextString); - mStaticText.setText(mStaticTextString); - mNativeDirectText.setText(mNativeDirectTextString); - mNativeVirtualText.setText(mNativeVirtualTextString); - mNativeStaticText.setText(mNativeStaticTextString); - } - public void test(String mode) { - reset(); + model.reset(); + String systemMessage = model.systemMethod.get(); + String hiddenText = model.hiddenApi.get(); - Test test = new Test(mConstructorText.getText().toString()); - mConstructorText.setText(mode + test.mMessage); + Test test = new Test(binding.constructorTest.getText().toString()); + binding.constructorTest.setText(mode + test.mMessage); if(test.mMessage.contains("hook param")) { - mConstructorText.setTextColor(Color.GREEN); + binding.constructorTest.setTextColor(Color.GREEN); }else { - mConstructorText.setTextColor(Color.RED); + binding.constructorTest.setTextColor(Color.RED); } - String directMessage = mDirectText.getText().toString(); + String directMessage = binding.directTest.getText().toString(); directMessage = test.testDirectMethod(directMessage); - mDirectText.setText(mode + directMessage); + binding.directTest.setText(mode + directMessage); if(directMessage.contains("hook param") && directMessage.contains("hook result")) { - mDirectText.setTextColor(Color.GREEN); + binding.directTest.setTextColor(Color.GREEN); }else { - mDirectText.setTextColor(Color.RED); + binding.directTest.setTextColor(Color.RED); } - String virtualMessage = mVirtualText.getText().toString(); + String virtualMessage = binding.virtualTest.getText().toString(); virtualMessage = test.testVirtual(virtualMessage); - mVirtualText.setText(mode + virtualMessage); + binding.virtualTest.setText(mode + virtualMessage); if(virtualMessage.contains("hook param") && virtualMessage.contains("hook result")) { - mVirtualText.setTextColor(Color.GREEN); + binding.virtualTest.setTextColor(Color.GREEN); }else { - mVirtualText.setTextColor(Color.RED); + binding.virtualTest.setTextColor(Color.RED); } - String staticMessage = mStaticText.getText().toString(); + String staticMessage = binding.staticTest.getText().toString(); staticMessage = Test.testStatic(staticMessage); - mStaticText.setText(mode + staticMessage); + binding.staticTest.setText(mode + staticMessage); if(staticMessage.contains("hook param") && staticMessage.contains("hook result")) { - mStaticText.setTextColor(Color.GREEN); + binding.staticTest.setTextColor(Color.GREEN); }else { - mStaticText.setTextColor(Color.RED); + binding.staticTest.setTextColor(Color.RED); } - String nativeDirectMessage = mNativeDirectText.getText().toString(); + String nativeDirectMessage = binding.nativeDirectTest.getText().toString(); nativeDirectMessage = test.testNativeDirectMethod(nativeDirectMessage); - mNativeDirectText.setText(mode + nativeDirectMessage); + binding.nativeDirectTest.setText(mode + nativeDirectMessage); if(nativeDirectMessage.contains("hook param") && nativeDirectMessage.contains("hook result")) { - mNativeDirectText.setTextColor(Color.GREEN); + binding.nativeDirectTest.setTextColor(Color.GREEN); }else { - mNativeDirectText.setTextColor(Color.RED); + binding.nativeDirectTest.setTextColor(Color.RED); } - String nativeVirtualMessage = mNativeVirtualText.getText().toString(); + String nativeVirtualMessage = binding.nativeVirtualTest.getText().toString(); nativeVirtualMessage = test.testNativeVirtualMethod(nativeVirtualMessage); - mNativeVirtualText.setText(mode + nativeVirtualMessage); + binding.nativeVirtualTest.setText(mode + nativeVirtualMessage); if(nativeVirtualMessage.contains("hook param") && nativeVirtualMessage.contains("hook result")) { - mNativeVirtualText.setTextColor(Color.GREEN); + binding.nativeVirtualTest.setTextColor(Color.GREEN); }else { - mNativeVirtualText.setTextColor(Color.RED); + binding.nativeVirtualTest.setTextColor(Color.RED); } - String nativeStaticMessage = mNativeStaticText.getText().toString(); + String nativeStaticMessage = binding.nativeStaticTest.getText().toString(); nativeStaticMessage = test.testNativeStaticMethod(nativeStaticMessage); - mNativeStaticText.setText(mode + nativeStaticMessage); + binding.nativeStaticTest.setText(mode + nativeStaticMessage); if(nativeStaticMessage.contains("hook param") && nativeStaticMessage.contains("hook result")) { - mNativeStaticText.setTextColor(Color.GREEN); + binding.nativeStaticTest.setTextColor(Color.GREEN); }else { - mNativeStaticText.setTextColor(Color.RED); + binding.nativeStaticTest.setTextColor(Color.RED); } - String systemMessage = mSystemTextString; - mSystemText.setText(systemMessage); - mSystemText.setText(mode + mSystemText.getText()); - if(mSystemText.getText().toString().contains("hook param")) { - mSystemText.setTextColor(Color.GREEN); + model.systemMethod.set(mode + systemMessage); + if(binding.systemTest.getText().toString().contains("hook param")) { + binding.systemTest.setTextColor(Color.GREEN); }else { - mSystemText.setTextColor(Color.RED); + binding.systemTest.setTextColor(Color.RED); } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { @@ -200,16 +140,45 @@ public void test(String mode) { Class activityClass = Class.forName("dalvik.system.VMRuntime"); Method setHiddenApiExemptions = activityClass.getDeclaredMethod("setHiddenApiExemptions", String[].class); setHiddenApiExemptions.setAccessible(true); - mHiddenText.setText(setHiddenApiExemptions.getName()); + binding.hiddenTest.setText(setHiddenApiExemptions.getName()); }catch (Exception e) { e.printStackTrace(); } - if(!mHiddenText.getText().equals(mHiddenTextString)) { - mHiddenText.setTextColor(Color.GREEN); + if(!binding.hiddenTest.getText().equals(hiddenText)) { + binding.hiddenTest.setTextColor(Color.GREEN); }else { - mHiddenText.setTextColor(Color.RED); + binding.hiddenTest.setTextColor(Color.RED); } } } + + public static class TestModel { + + public ObservableField constructorMethod = new ObservableField<>(); + public ObservableField directMethod = new ObservableField<>(); + public ObservableField virtualMethod = new ObservableField<>(); + public ObservableField staticMethod = new ObservableField<>(); + public ObservableField nativeDirectMethod = new ObservableField<>(); + public ObservableField nativeVirtualMethod = new ObservableField<>(); + public ObservableField nativeStaticMethod = new ObservableField<>(); + public ObservableField systemMethod = new ObservableField<>(); + public ObservableField hiddenApi = new ObservableField<>(); + + public TestModel() { + reset(); + } + + void reset() { + constructorMethod.set("Test ConstructorMethod"); + directMethod.set("Test DirectMethod"); + virtualMethod.set("Test VirtualMethod"); + staticMethod.set("Test StaticMethod"); + nativeDirectMethod.set("Test NativeDirectMethod"); + nativeVirtualMethod.set("Test NativeVirtualMethod"); + nativeStaticMethod.set("Test NativeStaticMethod"); + systemMethod.set("Test SystemMethod"); + hiddenApi.set("Test HiddenApi"); + } + } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4f8e36a..de989db 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,76 +1,96 @@ - - - + - + - + + - + android:layout_height="match_parent" + android:orientation="vertical" + tools:context=".MainActivity"> - + - + - - + - - -