diff --git a/build.gradle b/build.gradle index 13e0db0..386bc69 100644 --- a/build.gradle +++ b/build.gradle @@ -58,14 +58,17 @@ task deleteLibs(type: Delete) { preBuild.dependsOn downloadx86*/ dependencies { - implementation libs.okhttp implementation libs.commons.codec - implementation libs.ktsh implementation libs.appcompat implementation libs.material implementation libs.activity implementation libs.constraintlayout implementation libs.room.runtime + implementation "androidx.room:room-rxjava3:2.6.1" + implementation 'io.reactivex.rxjava3:rxandroid:3.0.2' + implementation 'io.reactivex.rxjava3:rxjava:3.1.5' + compileOnly 'org.projectlombok:lombok:1.18.34' + annotationProcessor 'org.projectlombok:lombok:1.18.34' annotationProcessor libs.room.compiler testImplementation libs.junit androidTestImplementation libs.ext.junit diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 02855a4..bda8b94 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -21,7 +21,7 @@ tools:targetApi="34" tools:replace="android:allowBackup"> <activity - android:name=".MainActivity" + android:name=".activity.MainActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true"> diff --git a/src/main/java/com/alterdekim/fridaapp/MainActivity.java b/src/main/java/com/alterdekim/fridaapp/activity/MainActivity.java similarity index 69% rename from src/main/java/com/alterdekim/fridaapp/MainActivity.java rename to src/main/java/com/alterdekim/fridaapp/activity/MainActivity.java index a322eef..55b9229 100644 --- a/src/main/java/com/alterdekim/fridaapp/MainActivity.java +++ b/src/main/java/com/alterdekim/fridaapp/activity/MainActivity.java @@ -1,15 +1,17 @@ -package com.alterdekim.fridaapp; +package com.alterdekim.fridaapp.activity; import android.app.Activity; import android.content.Intent; -import android.net.Uri; import android.net.VpnService; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; +import android.widget.CompoundButton; +import android.widget.LinearLayout; import android.widget.PopupMenu; +import android.widget.TextView; import android.widget.Toast; import androidx.activity.EdgeToEdge; @@ -21,18 +23,26 @@ import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.room.Room; +import com.alterdekim.fridaapp.R; +import com.alterdekim.fridaapp.controller.ControllerId; +import com.alterdekim.fridaapp.controller.ControllerManager; +import com.alterdekim.fridaapp.controller.MainActivityController; +import com.alterdekim.fridaapp.util.Util; import com.alterdekim.fridaapp.room.AppDatabase; import com.alterdekim.fridaapp.room.Config; import com.alterdekim.fridaapp.service.FridaService; +import com.google.android.material.switchmaterial.SwitchMaterial; import org.apache.commons.codec.binary.Base32; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.Iterator; public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener { private static final String TAG = MainActivity.class.getSimpleName(); - private AppDatabase db; + + private MainActivityController controller; ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), @@ -62,12 +72,18 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_main); - this.db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "def-db").build(); + + ControllerManager.putController(new MainActivityController()); + this.controller = (MainActivityController) ControllerManager.getController(ControllerId.MainActivityController); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); + + this.controller.onCreateGUI(this); + findViewById(R.id.addConfig).setOnClickListener(v -> { PopupMenu popup = new PopupMenu(this, v); popup.setOnMenuItemClickListener(MainActivity.this); @@ -75,10 +91,25 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI popup.show(); }); - LayoutInflater inflater = getLayoutInflater(); - for( Config config : db.userDao().getAll() ) { - View myLayout = inflater.inflate(R.layout.single_config, mainLayout, false); + LinearLayout cfg_list = (LinearLayout) findViewById(R.id.config_list); + LayoutInflater inflater = getLayoutInflater(); + Iterator<Config> iter = db.userDao().getAll().iterator(); + while( iter.hasNext() ) { + Config config = iter.next(); + View cfg_instance = inflater.inflate(R.layout.single_config, cfg_list, false); + TextView view_name = (TextView) cfg_instance.findViewById(R.id.config_name); + SwitchMaterial view_switch = (SwitchMaterial) cfg_instance.findViewById(R.id.config_switch); + //view_switch.setUseMaterialThemeColors(true); + view_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + Log.i(TAG, "onCheckedChanged " + b); + } + }); + view_name.setText(config.title); + + if( iter.hasNext() ) inflater.inflate(R.layout.single_divider, cfg_list, false); } } diff --git a/src/main/java/com/alterdekim/fridaapp/controller/ControllerId.java b/src/main/java/com/alterdekim/fridaapp/controller/ControllerId.java new file mode 100644 index 0000000..3701946 --- /dev/null +++ b/src/main/java/com/alterdekim/fridaapp/controller/ControllerId.java @@ -0,0 +1,5 @@ +package com.alterdekim.fridaapp.controller; + +public enum ControllerId { + MainActivityController +} diff --git a/src/main/java/com/alterdekim/fridaapp/controller/ControllerManager.java b/src/main/java/com/alterdekim/fridaapp/controller/ControllerManager.java new file mode 100644 index 0000000..be3d8a4 --- /dev/null +++ b/src/main/java/com/alterdekim/fridaapp/controller/ControllerManager.java @@ -0,0 +1,17 @@ +package com.alterdekim.fridaapp.controller; + +import java.util.HashMap; +import java.util.Map; + +public class ControllerManager { + + private static final Map<ControllerId, IController> map = new HashMap<>(); + + public static void putController(IController controller) { + if( !map.containsKey(controller.getControllerId()) ) map.put(controller.getControllerId(), controller); + } + + public static IController getController(ControllerId id) { + return map.get(id); + } +} diff --git a/src/main/java/com/alterdekim/fridaapp/controller/IController.java b/src/main/java/com/alterdekim/fridaapp/controller/IController.java new file mode 100644 index 0000000..c14b06c --- /dev/null +++ b/src/main/java/com/alterdekim/fridaapp/controller/IController.java @@ -0,0 +1,8 @@ +package com.alterdekim.fridaapp.controller; + +import androidx.appcompat.app.AppCompatActivity; + +public interface IController { + ControllerId getControllerId(); + void onCreateGUI(AppCompatActivity activity); +} diff --git a/src/main/java/com/alterdekim/fridaapp/controller/MainActivityController.java b/src/main/java/com/alterdekim/fridaapp/controller/MainActivityController.java new file mode 100644 index 0000000..df3dbfc --- /dev/null +++ b/src/main/java/com/alterdekim/fridaapp/controller/MainActivityController.java @@ -0,0 +1,21 @@ +package com.alterdekim.fridaapp.controller; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.room.Room; + +import com.alterdekim.fridaapp.room.AppDatabase; + +public class MainActivityController implements IController { + + private AppDatabase db; + + @Override + public ControllerId getControllerId() { + return ControllerId.MainActivityController; + } + + @Override + public void onCreateGUI(AppCompatActivity activity) { + this.db = Room.databaseBuilder(activity.getApplicationContext(), AppDatabase.class, "def-db").build(); + } +} diff --git a/src/main/java/com/alterdekim/fridaapp/room/Config.java b/src/main/java/com/alterdekim/fridaapp/room/Config.java index 39b1c67..c1f1332 100644 --- a/src/main/java/com/alterdekim/fridaapp/room/Config.java +++ b/src/main/java/com/alterdekim/fridaapp/room/Config.java @@ -4,19 +4,21 @@ import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + @Entity +@RequiredArgsConstructor +@Getter +@Setter public class Config { @PrimaryKey public int uid; @ColumnInfo(name = "title") - public String title; + public final String title; @ColumnInfo(name = "data_b32") - public String data_b32; - - public Config(String title, String data_b32) { - this.title = title; - this.data_b32 = data_b32; - } + public final String data_b32; } diff --git a/src/main/java/com/alterdekim/fridaapp/service/FridaService.java b/src/main/java/com/alterdekim/fridaapp/service/FridaService.java index d3e2178..41d6ef0 100644 --- a/src/main/java/com/alterdekim/fridaapp/service/FridaService.java +++ b/src/main/java/com/alterdekim/fridaapp/service/FridaService.java @@ -6,16 +6,6 @@ import android.net.VpnService; import android.os.ParcelFileDescriptor; import android.util.Log; -import com.alterdekim.frida.FridaLib; -import com.alterdekim.fridaapp.R; - -import java.io.IOException; -import java.util.Objects; - -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - public class FridaService extends VpnService { private static final String TAG = FridaService.class.getSimpleName(); private static final String VPN_ADDRESS = "10.66.66.6"; // Only IPv4 support for now @@ -28,42 +18,16 @@ public class FridaService extends VpnService { public void onCreate() { setupVPN(); Log.i(TAG, "Started"); - // .detachFd() try { Thread t = new Thread(new NativeBinaryConnection(vpnInterface.dup().detachFd(), getApplicationContext().getApplicationInfo().nativeLibraryDir)); t.start(); } catch (Exception e) { Log.e(TAG, e.getMessage()); } - - new Thread(new Runnable() { - @Override - public void run() { - OkHttpClient client = new OkHttpClient(); - - - Request request = new Request.Builder() - .url("https://google.com") - .build(); - try { - try (Response response = client.newCall(request).execute()) { - // Log.i(TAG, "Response code: " + response.code()); - if (response.body() != null) { - // Log.i(TAG, "Response body: " + response.body().string()); - } else { - // Log.i(TAG, "Response body: null"); - } - } - } catch (IOException e) { - Log.e(TAG, Objects.requireNonNull(e.getMessage())); - } - } - }).start(); } private void setupVPN() { try { - //if (vpnInterface == null) { Builder builder = new Builder(); builder.setMtu(1400); builder.addAddress(VPN_ADDRESS, 24); @@ -71,10 +35,7 @@ public class FridaService extends VpnService { builder.addDnsServer("8.8.8.8"); //builder.addAllowedApplication(); builder.addDisallowedApplication("com.alterdekim.fridaapp"); - // .setSession(getString(R.string.app_name)) - // .setConfigureIntent(pendingIntent) vpnInterface = builder.establish(); - // } } catch (Exception e) { Log.e(TAG, "error", e); } diff --git a/src/main/java/com/alterdekim/fridaapp/service/NativeBinaryConnection.java b/src/main/java/com/alterdekim/fridaapp/service/NativeBinaryConnection.java index 99748bb..e5881a5 100644 --- a/src/main/java/com/alterdekim/fridaapp/service/NativeBinaryConnection.java +++ b/src/main/java/com/alterdekim/fridaapp/service/NativeBinaryConnection.java @@ -3,11 +3,6 @@ package com.alterdekim.fridaapp.service; import android.util.Log; import com.alterdekim.frida.FridaLib; -import com.jaredrummler.ktsh.Shell; - -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStreamReader; public class NativeBinaryConnection implements Runnable { private static final String TAG = NativeBinaryConnection.class.getSimpleName(); diff --git a/src/main/java/com/alterdekim/fridaapp/Util.java b/src/main/java/com/alterdekim/fridaapp/util/Util.java similarity index 97% rename from src/main/java/com/alterdekim/fridaapp/Util.java rename to src/main/java/com/alterdekim/fridaapp/util/Util.java index cc0807e..851f177 100644 --- a/src/main/java/com/alterdekim/fridaapp/Util.java +++ b/src/main/java/com/alterdekim/fridaapp/util/Util.java @@ -1,4 +1,4 @@ -package com.alterdekim.fridaapp; +package com.alterdekim.fridaapp.util; import android.content.Context; import android.database.Cursor; diff --git a/src/main/res/layout/activity_main.xml b/src/main/res/layout/activity_main.xml index c879e1a..bf235d2 100644 --- a/src/main/res/layout/activity_main.xml +++ b/src/main/res/layout/activity_main.xml @@ -5,7 +5,7 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MainActivity"> + tools:context=".activity.MainActivity"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent"