Cleanup and GUI
This commit is contained in:
parent
757fad0f33
commit
38a9fd010f
@ -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
|
||||
|
@ -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">
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
package com.alterdekim.fridaapp.controller;
|
||||
|
||||
public enum ControllerId {
|
||||
MainActivityController
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.alterdekim.fridaapp.controller;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public interface IController {
|
||||
ControllerId getControllerId();
|
||||
void onCreateGUI(AppCompatActivity activity);
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.alterdekim.fridaapp;
|
||||
package com.alterdekim.fridaapp.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user