diff --git a/.github/workflows/debug-build.yml b/.github/workflows/debug-build.yml index 205b6d2e..e7b2933c 100644 --- a/.github/workflows/debug-build.yml +++ b/.github/workflows/debug-build.yml @@ -12,6 +12,6 @@ jobs: submodules: 'recursive' - uses: actions/setup-java@v1 with: - java-version: '11' + java-version: '17' - run: ./gradlew test - run: ./gradlew assembleDebug -PdoNotStrip diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index d2429bb8..ed73399c 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -12,5 +12,5 @@ jobs: submodules: 'recursive' - uses: actions/setup-java@v1 with: - java-version: '11' + java-version: '17' - run: ./gradlew.bat assembleDebug diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e972500..22b03b64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ Releases available at https://github.com/emanuele-f/PCAPdroid/releases +## [1.6.4] - 2023-04-24 +- Fix QR code activation crash on Android 32+ +- Update translations + ## [1.6.3] - 2023-04-23 - Add paid features activation via QR code for non-Play builds - Fix firewall not working when loading duplicate domain rules diff --git a/app/build.gradle b/app/build.gradle index 853a39bc..ea06ce0e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.emanuelef.remote_capture" minSdkVersion 21 targetSdkVersion 33 - versionCode 65 - versionName "1.6.3" + versionCode 66 + versionName "1.6.4" buildConfigField "long", "BUILD_TIME", System.currentTimeMillis() + "L" } @@ -75,12 +75,12 @@ dependencies { // Tests testImplementation 'junit:junit:4.13.2' testImplementation 'androidx.test:core:1.5.0' - testImplementation "org.robolectric:robolectric:4.9" + testImplementation "org.robolectric:robolectric:4.10.3" // AndroidX implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.fragment:fragment:1.5.5' + implementation 'androidx.fragment:fragment:1.5.7' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' implementation 'androidx.preference:preference:1.2.0' implementation 'androidx.recyclerview:recyclerview:1.3.0' @@ -88,7 +88,7 @@ dependencies { implementation "androidx.navigation:navigation-ui:2.5.3" // Google - implementation 'com.google.android.material:material:1.8.0' + implementation 'com.google.android.material:material:1.9.0' implementation 'com.google.code.gson:gson:2.9.0' implementation 'org.brotli:dec:0.1.2' diff --git a/app/src/main/java/com/emanuelef/remote_capture/Billing.java b/app/src/main/java/com/emanuelef/remote_capture/Billing.java index 76f458cf..8e5d4f2a 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Billing.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Billing.java @@ -71,8 +71,8 @@ public class Billing { R.string.firewall_summary, R.string.no_root_firewall, R.string.unlock_token, R.string.unlock_token_summary, R.string.unlock_token_error, R.string.license_service_unavailable, R.string.requesting_unlock_token, R.string.show_action, R.string.unlock_token_msg1, - R.string.license_limit_reached, R.string.license_error, R.string.requesting_license, R.string.license_activation_ok, - R.string.qr_license_confirm, R.string.qr_purchase_required + R.string.qr_license_confirm, R.string.qr_purchase_required, R.string.license_limit_reached, + R.string.license_error, R.string.requesting_license }; protected final Context mContext; diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java index 75f8daa0..58b0abe4 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -147,7 +147,7 @@ public class CaptureService extends VpnService implements Runnable { private Blocklist mBlocklist; private MatchList mMalwareWhitelist; private MatchList mFirewallWhitelist; - private MatchList mDecryptionWhitelist; + private MatchList mDecryptionList; private SparseArray mIfIndexToName; private boolean mSocks5Enabled; private String mSocks5Address; @@ -383,9 +383,9 @@ else if(mSettings.dump_mode == Prefs.DumpMode.PCAP_FILE) { } if(mSettings.tls_decryption && !mSettings.root_capture) - mDecryptionWhitelist = PCAPdroid.getInstance().getDecryptionWhitelist(); + mDecryptionList = PCAPdroid.getInstance().getDecryptionList(); else - mDecryptionWhitelist = null; + mDecryptionList = null; if ((mSettings.app_filter != null) && (!mSettings.app_filter.isEmpty())) { try { @@ -424,10 +424,11 @@ else if(mSettings.dump_mode == Prefs.DumpMode.PCAP_FILE) { // Route unicast IPv6 addresses builder.addRoute("2000::", 3); + builder.addRoute("fc00::", 7); try { builder.addDnsServer(InetAddress.getByName(Prefs.getDnsServerV6(mPrefs))); - } catch (UnknownHostException e) { + } catch (UnknownHostException | IllegalArgumentException e) { Log.w(TAG, "Could not set IPv6 DNS server"); } } @@ -1008,8 +1009,8 @@ public static boolean isDecryptingTLS() { (INSTANCE.isTlsDecryptionEnabled() == 1)); } - public static boolean isDecryptionWhitelistEnabled() { - return(INSTANCE != null && (INSTANCE.mDecryptionWhitelist != null)); + public static boolean isDecryptionListEnabled() { + return(INSTANCE != null && (INSTANCE.mDecryptionList != null)); } public static Prefs.PayloadMode getCurPayloadMode() { @@ -1350,8 +1351,8 @@ private void updateServiceStatus(ServiceStatus cur_status) { if(cur_status == ServiceStatus.STARTED) { if(mMalwareDetectionEnabled) reloadMalwareWhitelist(); - if(mDecryptionWhitelist != null) - reloadDecryptionWhitelist(); + if(mDecryptionList != null) + reloadDecryptionList(); reloadBlocklist(); reloadFirewallWhitelist(); } @@ -1445,12 +1446,12 @@ public static void reloadMalwareWhitelist() { reloadMalwareWhitelist(INSTANCE.mMalwareWhitelist.toListDescriptor()); } - public static void reloadDecryptionWhitelist() { - if((INSTANCE == null) || (INSTANCE.mDecryptionWhitelist == null)) + public static void reloadDecryptionList() { + if((INSTANCE == null) || (INSTANCE.mDecryptionList == null)) return; Log.i(TAG, "reloading TLS decryption whitelist"); - reloadDecryptionWhitelist(INSTANCE.mDecryptionWhitelist.toListDescriptor()); + reloadDecryptionList(INSTANCE.mDecryptionList.toListDescriptor()); } public static void setFirewallEnabled(boolean enabled) { @@ -1509,7 +1510,7 @@ public static void waitForCaptureStop() { private static native boolean reloadBlocklist(MatchList.ListDescriptor blocklist); private static native boolean reloadFirewallWhitelist(MatchList.ListDescriptor whitelist); private static native boolean reloadMalwareWhitelist(MatchList.ListDescriptor whitelist); - private static native boolean reloadDecryptionWhitelist(MatchList.ListDescriptor whitelist); + private static native boolean reloadDecryptionList(MatchList.ListDescriptor whitelist); public static native void askStatsDump(); public static native byte[] getPcapHeader(); public static native void nativeSetFirewallEnabled(boolean enabled); diff --git a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java index 08038f82..67067d3c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java +++ b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java @@ -48,8 +48,8 @@ import java.lang.ref.WeakReference; public class MitmAddon { - public static final long PACKAGE_VERSION_CODE = 14; - public static final String PACKAGE_VERSION_NAME = "v0.14"; + public static final long PACKAGE_VERSION_CODE = 15; + public static final String PACKAGE_VERSION_NAME = "v0.15"; public static final String REPOSITORY = "https://github.com/emanuele-f/PCAPdroid-mitm"; private static final String TAG = "MitmAddon"; private final Context mContext; diff --git a/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java b/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java index 1eff3a26..4650089c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java +++ b/app/src/main/java/com/emanuelef/remote_capture/MitmReceiver.java @@ -95,6 +95,7 @@ private enum MsgType { DATA_TRUNCATED, MASTER_SECRET, LOG, + JS_INJECTED } private static class PendingMessage { @@ -319,9 +320,11 @@ private void handleMessage(ConnectionDescriptor conn, MsgType type, byte[] messa // see ConnectionDescriptor.processUpdate if(conn.status == ConnectionDescriptor.CONN_STATUS_CLOSED) conn.status = ConnectionDescriptor.CONN_STATUS_CLIENT_ERROR; - } else if(type == MsgType.DATA_TRUNCATED) + } else if(type == MsgType.DATA_TRUNCATED) { conn.setPayloadTruncatedByAddon(); - else + } else if(type == MsgType.JS_INJECTED) { + conn.js_injected_scripts = new String(message, StandardCharsets.US_ASCII); + } else conn.addPayloadChunkMitm(new PayloadChunk(message, getChunkType(type), isSent(type), tstamp)); } @@ -380,6 +383,8 @@ private static MsgType parseMsgType(String str) { return MsgType.MASTER_SECRET; case "log": return MsgType.LOG; + case "js_inject": + return MsgType.JS_INJECTED; default: return MsgType.UNKNOWN; } diff --git a/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java b/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java index d41651e8..aff633b9 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java +++ b/app/src/main/java/com/emanuelef/remote_capture/PCAPdroid.java @@ -49,7 +49,7 @@ public class PCAPdroid extends Application { private MatchList mVisMask; private MatchList mMalwareWhitelist; private MatchList mFirewallWhitelist; - private MatchList mDecryptionWhitelist; + private MatchList mDecryptionList; private Blocklist mBlocklist; private Blacklists mBlacklists; private CtrlPermissions mCtrlPermissions; @@ -154,11 +154,11 @@ public MatchList getFirewallWhitelist() { return mFirewallWhitelist; } - public MatchList getDecryptionWhitelist() { - if(mDecryptionWhitelist == null) - mDecryptionWhitelist = new MatchList(mLocalizedContext, Prefs.PREF_DECRYPTION_WHITELIST); + public MatchList getDecryptionList() { + if(mDecryptionList == null) + mDecryptionList = new MatchList(mLocalizedContext, Prefs.PREF_DECRYPTION_LIST); - return mDecryptionWhitelist; + return mDecryptionList; } public CtrlPermissions getCtrlPermissions() { diff --git a/app/src/main/java/com/emanuelef/remote_capture/Utils.java b/app/src/main/java/com/emanuelef/remote_capture/Utils.java index 86f02c0a..b4a39a41 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Utils.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Utils.java @@ -1506,6 +1506,80 @@ public static boolean validatePort(String value) { } } + // from bouncycastle + private static boolean isValidIPv6(String address) { + if (address.length() == 0) + return false; + + char firstChar = address.charAt(0); + if (firstChar != ':' && Character.digit(firstChar, 16) < 0) + return false; + + int segmentCount = 0; + String temp = address + ":"; + boolean doubleColonFound = false; + + int pos = 0, end; + while (pos < temp.length() && (end = temp.indexOf(':', pos)) >= pos) { + if (segmentCount == 8) + return false; + + if (pos != end) { + String value = temp.substring(pos, end); + + if (end == temp.length() - 1 && value.indexOf('.') > 0) { + // add an extra one as address covers 2 words. + if (++segmentCount == 8) + return false; + if (!validateIpv4Address(value)) + return false; + } + else if (!isParseableIPv6Segment(temp, pos, end)) + return false; + } else { + if (end != 1 && end != temp.length() - 1 && doubleColonFound) + return false; + doubleColonFound = true; + } + + pos = end + 1; + ++segmentCount; + } + + return segmentCount == 8 || doubleColonFound; + } + + private static boolean isParseableIPv6Segment(String s, int pos, int end) { + return isParseable(s, pos, end, 16, 4, true, 0x0000, 0xFFFF); + } + + private static boolean isParseable(String s, int pos, int end, int radix, + int maxLength, boolean allowLeadingZero, + int minValue, int maxValue) { + int length = end - pos; + if (length < 1 | length > maxLength) + return false; + + boolean checkLeadingZero = length > 1 & !allowLeadingZero; + if (checkLeadingZero && Character.digit(s.charAt(pos), radix) <= 0) + return false; + + int value = 0; + while (pos < end) { + char c = s.charAt(pos++); + int d = Character.digit(c, radix); + if (d < 0) + { + return false; + } + + value *= radix; + value += d; + } + + return value >= minValue & value <= maxValue; + } + @SuppressWarnings("deprecation") public static boolean validateIpAddress(String value) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) @@ -1526,7 +1600,7 @@ public static boolean validateIpv4Address(String s) { } public static boolean validateIpv6Address(String s) { - return validateIpAddress(s) && !validateIpv4Address(s); + return isValidIPv6(s) && !validateIpv4Address(s); } // rough validation diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java index 86b7c471..79633bb1 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java @@ -37,7 +37,6 @@ import com.emanuelef.remote_capture.Billing; import com.emanuelef.remote_capture.CaptureService; import com.emanuelef.remote_capture.ConnectionsRegister; -import com.emanuelef.remote_capture.PCAPdroid; import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.model.ConnectionDescriptor.Status; @@ -45,7 +44,6 @@ import com.emanuelef.remote_capture.model.ConnectionDescriptor.FilteringStatus; import com.emanuelef.remote_capture.model.FilterDescriptor; import com.emanuelef.remote_capture.model.ListInfo; -import com.emanuelef.remote_capture.model.MatchList; import com.emanuelef.remote_capture.model.Prefs; import com.google.android.material.chip.Chip; import com.google.android.material.chip.ChipGroup; @@ -113,7 +111,6 @@ protected void onCreate(Bundle savedInstanceState) { mDecChips = new ArrayList<>(Arrays.asList( new Pair<>(DecryptionStatus.DECRYPTED, findViewById(R.id.dec_status_decrypted)), new Pair<>(DecryptionStatus.NOT_DECRYPTABLE, findViewById(R.id.dec_status_not_decryptable)), - new Pair<>(DecryptionStatus.WHITELISTED, findViewById(R.id.dec_status_whitelisted)), new Pair<>(DecryptionStatus.ERROR, findViewById(R.id.dec_status_error)) )); diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java index d7527cd6..601a8198 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java @@ -230,7 +230,7 @@ protected void onResume() { if(mNavView != null) { Menu navMenu = mNavView.getMenu(); - navMenu.findItem(R.id.dec_whitelist).setVisible(Prefs.getTlsDecryptionEnabled(mPrefs) && !Prefs.isRootCaptureEnabled(mPrefs)); + navMenu.findItem(R.id.tls_decryption).setVisible(Prefs.getTlsDecryptionEnabled(mPrefs) && !Prefs.isRootCaptureEnabled(mPrefs)); } checkPaidDrawerEntries(); @@ -503,9 +503,9 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { } else if (id == R.id.malware_detection) { Intent intent = new Intent(MainActivity.this, MalwareDetection.class); startActivity(intent); - } else if(id == R.id.dec_whitelist) { + } else if(id == R.id.tls_decryption) { Intent intent = new Intent(MainActivity.this, EditListActivity.class); - intent.putExtra(EditListActivity.LIST_TYPE_EXTRA, ListInfo.Type.DECRYPTION_WHITELIST); + intent.putExtra(EditListActivity.LIST_TYPE_EXTRA, ListInfo.Type.DECRYPTION_LIST); startActivity(intent); } else if(id == R.id.firewall) { Intent intent = new Intent(MainActivity.this, FirewallActivity.class); @@ -642,9 +642,15 @@ public boolean onOptionsItemSelected(MenuItem item) { private void initAppState() { boolean is_active = CaptureService.isServiceActive(); - if (!is_active) + if (!is_active) { appStateReady(); - else + + // PCAPdroid could have been closed unexpectedly (e.g. due to low memory), try to export + // the keylog file if exists + mKeylogFile = MitmReceiver.getKeylogFilePath(MainActivity.this); + if(mKeylogFile.exists()) + startExportSslkeylogfile(); + } else appStateRunning(); } @@ -800,6 +806,13 @@ private void sslkeyfileExportResult(final ActivityResult result) { Utils.showToastLong(this, R.string.export_failed); } } - mKeylogFile = null; + + if(mKeylogFile != null) { + // upon closing the dialog, delete the keylog + + //noinspection ResultOfMethodCallIgnored + mKeylogFile.delete(); + mKeylogFile = null; + } } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java index a74f4482..707c64f6 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java +++ b/app/src/main/java/com/emanuelef/remote_capture/adapters/ConnectionsAdapter.java @@ -76,6 +76,7 @@ public class ConnectionsAdapter extends RecyclerView.Adapter Utils.validateIpv4Address(newValue.toString())); EditTextPreference p2 = Objects.requireNonNull(findPreference(Prefs.PREF_DNS_SERVER_V6)); - p2.setOnPreferenceChangeListener((preference, newValue) -> Utils.validateIpv6Address(newValue.toString())); + p2.setOnPreferenceChangeListener((preference, newValue) -> { + String ip = newValue.toString(); + return !ip.equals("::") && Utils.validateIpv6Address(ip); + }); } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java b/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java index 63f0d78b..c0233811 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/ConnectionDescriptor.java @@ -66,9 +66,9 @@ public enum Status { public enum DecryptionStatus { INVALID, + ENCRYPTED, CLEARTEXT, DECRYPTED, - WHITELISTED, NOT_DECRYPTABLE, WAITING_DATA, ERROR, @@ -111,12 +111,13 @@ public enum FilteringStatus { private boolean blacklisted_ip; private boolean blacklisted_host; public boolean is_blocked; - public boolean decryption_whitelisted; + public boolean decryption_ignored; public boolean netd_block_missed; private boolean payload_truncated; private boolean encrypted_l7; // application layer is encrypted (e.g. TLS) public boolean encrypted_payload; // actual payload is encrypted (e.g. telegram - see Utils.hasEncryptedPayload) public String decryption_error; + public String js_injected_scripts; public String country; public Geomodel.ASN asn; @@ -154,7 +155,7 @@ public void processUpdate(ConnectionUpdate update) { rcvd_pkts = update.rcvd_pkts; blocked_pkts = update.blocked_pkts; status = (update.status & 0x00FF); - decryption_whitelisted = (update.status & 0x1000) != 0; + decryption_ignored = (update.status & 0x1000) != 0; netd_block_missed = (update.status & 0x0800) != 0; is_blocked = (update.status & 0x0400) != 0; blacklisted_ip = (update.status & 0x0100) != 0; @@ -178,7 +179,7 @@ public void processUpdate(ConnectionUpdate update) { } if((update.update_type & ConnectionUpdate.UPDATE_PAYLOAD) != 0) { // Payload for decryptable connections should be received via the MitmReceiver - assert(isNotDecryptable()); + assert(decryption_ignored || isNotDecryptable()); // Some pending updates with payload may still be received after low memory has been // triggered and payload disabled @@ -252,8 +253,8 @@ public DecryptionStatus getDecryptionStatus() { return DecryptionStatus.CLEARTEXT; else if(decryption_error != null) return DecryptionStatus.ERROR; - else if(decryption_whitelisted) - return DecryptionStatus.WHITELISTED; + else if(decryption_ignored) + return DecryptionStatus.ENCRYPTED; else if(isNotDecryptable()) return DecryptionStatus.NOT_DECRYPTABLE; else if(isDecrypted()) @@ -269,7 +270,7 @@ public static String getDecryptionStatusLabel(DecryptionStatus status, Context c case CLEARTEXT: resid = R.string.not_encrypted; break; case NOT_DECRYPTABLE: resid = R.string.not_decryptable; break; case DECRYPTED: resid = R.string.decrypted; break; - case WHITELISTED: resid = R.string.whitelisted; break; + case ENCRYPTED: resid = R.string.status_encrypted; break; case WAITING_DATA: resid = R.string.waiting_application_data; break; default: resid = R.string.error; } @@ -305,8 +306,8 @@ public boolean isPayloadTruncated() { return payload_truncated; } - public boolean isNotDecryptable() { return encrypted_payload || !mitm_decrypt; } - public boolean isDecrypted() { return !isNotDecryptable() && (getNumPayloadChunks() > 0); } + public boolean isNotDecryptable() { return !decryption_ignored && (encrypted_payload || !mitm_decrypt); } + public boolean isDecrypted() { return !decryption_ignored && !isNotDecryptable() && (getNumPayloadChunks() > 0); } public boolean isCleartext() { return !encrypted_payload && !encrypted_l7; } public synchronized int getNumPayloadChunks() { return payload_chunks.size(); } diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/ListInfo.java b/app/src/main/java/com/emanuelef/remote_capture/model/ListInfo.java index 49aa4c10..02a8a895 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/ListInfo.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/ListInfo.java @@ -41,7 +41,7 @@ public enum Type { MALWARE_WHITELIST, BLOCKLIST, FIREWALL_WHITELIST, - DECRYPTION_WHITELIST, + DECRYPTION_LIST, } public ListInfo(Type tp) { @@ -62,8 +62,8 @@ public Type getType() { return PCAPdroid.getInstance().getBlocklist(); case FIREWALL_WHITELIST: return PCAPdroid.getInstance().getFirewallWhitelist(); - case DECRYPTION_WHITELIST: - return PCAPdroid.getInstance().getDecryptionWhitelist(); + case DECRYPTION_LIST: + return PCAPdroid.getInstance().getDecryptionList(); } assert false; @@ -80,8 +80,8 @@ public int getTitle() { return R.string.firewall_rules; case FIREWALL_WHITELIST: return R.string.whitelist; - case DECRYPTION_WHITELIST: - return R.string.decryption_whitelist_rules; + case DECRYPTION_LIST: + return R.string.decryption_rules; } assert false; @@ -98,8 +98,8 @@ public int getHelpString() { return 0; case FIREWALL_WHITELIST: return R.string.firewall_whitelist_help; - case DECRYPTION_WHITELIST: - return R.string.decryption_whitelist_help; + case DECRYPTION_LIST: + return R.string.decryption_rules_help; } assert false; @@ -111,7 +111,7 @@ public Set getSupportedRules() { case VISUALIZATION_MASK: return new ArraySet<>(Arrays.asList(RuleType.APP, RuleType.IP, RuleType.HOST, RuleType.COUNTRY, RuleType.PROTOCOL)); case MALWARE_WHITELIST: - case DECRYPTION_WHITELIST: + case DECRYPTION_LIST: case BLOCKLIST: return new ArraySet<>(Arrays.asList(RuleType.APP, RuleType.IP, RuleType.HOST)); case FIREWALL_WHITELIST: @@ -135,8 +135,8 @@ public void reloadRules() { if(CaptureService.isServiceActive()) CaptureService.requireInstance().reloadFirewallWhitelist(); break; - case DECRYPTION_WHITELIST: - CaptureService.reloadDecryptionWhitelist(); + case DECRYPTION_LIST: + CaptureService.reloadDecryptionList(); break; } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java index e900cf1b..438dbccc 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java @@ -71,7 +71,7 @@ public class Prefs { public static final String PREF_FIREWALL_WHITELIST_MODE = "firewall_wl_mode"; public static final String PREF_FIREWALL_WHITELIST_INIT_VER = "firewall_wl_init"; public static final String PREF_FIREWALL_WHITELIST = "firewall_whitelist"; - public static final String PREF_DECRYPTION_WHITELIST = "decryption_whitelist"; + public static final String PREF_DECRYPTION_LIST = "decryption_list"; public static final String PREF_START_AT_BOOT = "start_at_boot"; public static final String PREF_SNAPLEN = "snaplen"; public static final String PREF_MAX_PKTS_PER_FLOW = "max_pkts_per_flow"; diff --git a/app/src/main/jni/core/capture_vpn.c b/app/src/main/jni/core/capture_vpn.c index 7d8b0d2d..3d95256f 100644 --- a/app/src/main/jni/core/capture_vpn.c +++ b/app/src/main/jni/core/capture_vpn.c @@ -348,23 +348,26 @@ static void update_conn_status(zdtun_t *zdt, const zdtun_pkt_t *pkt, uint8_t fro /* ******************************************************* */ -static bool should_proxy(pcapdroid_t *pd, const zdtun_5tuple_t *tuple, pd_conn_t *data) { - // NOTE: connections must be proxied as soon as the first packet arrives. +static bool should_proxify(pcapdroid_t *pd, const zdtun_5tuple_t *tuple, pd_conn_t *data) { + // NOTE: connections must be proxified as soon as the first packet arrives. // In case of TLS decryption, since we cannot reliably determine TLS connections with 1 packet, // we must proxy all the TCP connections. - if(!pd->socks5.enabled || (tuple->ipproto != IPPROTO_TCP)) + if(!pd->socks5.enabled || (tuple->ipproto != IPPROTO_TCP)) { + data->decryption_ignored = true; return false; + } - if(pd->tls_decryption.wl) { + if(pd->tls_decryption.list) { zdtun_ip_t dst_ip = tuple->dst_ip; // NOTE: domain matching only works if a prior DNS reply is seen (see ip_lru_find in pd_new_connection) - if(blacklist_match_ip(pd->tls_decryption.wl, &dst_ip, tuple->ipver) || - blacklist_match_uid(pd->tls_decryption.wl, data->uid) || - (data->info && blacklist_match_domain(pd->tls_decryption.wl, data->info))) { - data->decryption_whitelisted = true; - return false; - } + if(blacklist_match_ip(pd->tls_decryption.list, &dst_ip, tuple->ipver) || + blacklist_match_uid(pd->tls_decryption.list, data->uid) || + (data->info && blacklist_match_domain(pd->tls_decryption.list, data->info))) + return true; + + data->decryption_ignored = true; + return false; } return true; @@ -568,7 +571,7 @@ int run_vpn(pcapdroid_t *pd) { if(data->sent_pkts == 0) { if(pd_check_port_map(conn)) /* port mapping applied */; - else if(should_proxy(pd, tuple, data)) { + else if(should_proxify(pd, tuple, data)) { zdtun_conn_proxy(conn); data->proxied = true; } diff --git a/app/src/main/jni/core/jni_impl.c b/app/src/main/jni/core/jni_impl.c index edf419e3..2cd700f3 100644 --- a/app/src/main/jni/core/jni_impl.c +++ b/app/src/main/jni/core/jni_impl.c @@ -167,7 +167,7 @@ static jobject getConnUpdate(pcapdroid_t *pd, const conn_and_tuple_t *conn) { (*env)->CallVoidMethod(env, update, mids.connUpdateSetStats, data->last_seen, data->payload_length, data->sent_bytes, data->rcvd_bytes, data->sent_pkts, data->rcvd_pkts, data->blocked_pkts, (data->tcp_flags[0] << 8) | data->tcp_flags[1], - (data->decryption_whitelisted << 12) | + (data->decryption_ignored << 12) | (data->netd_block_missed << 11) | (blocked << 10) | (data->blacklisted_domain << 9) | @@ -927,8 +927,8 @@ Java_com_emanuelef_remote_1capture_CaptureService_reloadMalwareWhitelist(JNIEnv /* ******************************************************* */ JNIEXPORT jboolean JNICALL -Java_com_emanuelef_remote_1capture_CaptureService_reloadDecryptionWhitelist(JNIEnv *env, - jclass clazz, jobject whitelist) { +Java_com_emanuelef_remote_1capture_CaptureService_reloadDecryptionList(JNIEnv *env, + jclass clazz, jobject listobj) { pcapdroid_t *pd = global_pd; if(!pd) { log_e("NULL pd instance"); @@ -940,28 +940,28 @@ Java_com_emanuelef_remote_1capture_CaptureService_reloadDecryptionWhitelist(JNIE return false; } - if(pd->tls_decryption.new_wl != NULL) { - log_e("previous decryption whitelist not loaded yet"); + if(pd->tls_decryption.new_list != NULL) { + log_e("previous decryption list not loaded yet"); return false; } - blacklist_t *wl = blacklist_init(); - if(!wl) { + blacklist_t *list = blacklist_init(); + if(!list) { log_e("blacklist_init failed"); return false; } - if(blacklist_load_list_descriptor(wl, env, whitelist) < 0) { - log_f("Could not load decryption whitelist. Check the log for more details"); - blacklist_destroy(wl); + if(blacklist_load_list_descriptor(list, env, listobj) < 0) { + log_f("Could not load decryption list. Check the log for more details"); + blacklist_destroy(list); return false; } blacklists_stats_t stats; - blacklist_get_stats(wl, &stats); - log_d("reloadDecryptionWhitelist: %d apps, %d domains, %d IPs", stats.num_apps, stats.num_domains, stats.num_ips); + blacklist_get_stats(list, &stats); + log_d("reloadDecryptionList: %d apps, %d domains, %d IPs", stats.num_apps, stats.num_domains, stats.num_ips); - pd->tls_decryption.new_wl = wl; + pd->tls_decryption.new_list = list; return true; } diff --git a/app/src/main/jni/core/pcapdroid.c b/app/src/main/jni/core/pcapdroid.c index ea14d2cb..8e2b7b02 100644 --- a/app/src/main/jni/core/pcapdroid.c +++ b/app/src/main/jni/core/pcapdroid.c @@ -1046,12 +1046,12 @@ void pd_housekeeping(pcapdroid_t *pd) { iter_active_connections(pd, check_blocked_conn_cb); } - if(pd->tls_decryption.new_wl) { + if(pd->tls_decryption.new_list) { // Load new whitelist - if(pd->tls_decryption.wl) - blacklist_destroy(pd->tls_decryption.wl); - pd->tls_decryption.wl = pd->tls_decryption.new_wl; - pd->tls_decryption.new_wl = NULL; + if(pd->tls_decryption.list) + blacklist_destroy(pd->tls_decryption.list); + pd->tls_decryption.list = pd->tls_decryption.new_list; + pd->tls_decryption.new_list = NULL; } } @@ -1221,10 +1221,10 @@ int pd_run(pcapdroid_t *pd) { blacklist_destroy(pd->firewall.wl); if(pd->firewall.new_wl) blacklist_destroy(pd->firewall.new_wl); - if(pd->tls_decryption.wl) - blacklist_destroy(pd->tls_decryption.wl); - if(pd->tls_decryption.new_wl) - blacklist_destroy(pd->tls_decryption.new_wl); + if(pd->tls_decryption.list) + blacklist_destroy(pd->tls_decryption.list); + if(pd->tls_decryption.new_list) + blacklist_destroy(pd->tls_decryption.new_list); if(pd->malware_detection.enabled) { if(pd->malware_detection.reload_in_progress) { diff --git a/app/src/main/jni/core/pcapdroid.h b/app/src/main/jni/core/pcapdroid.h index 15e717fb..b2e43206 100644 --- a/app/src/main/jni/core/pcapdroid.h +++ b/app/src/main/jni/core/pcapdroid.h @@ -113,7 +113,7 @@ typedef struct { bool to_block; bool netd_block_missed; bool proxied; - bool decryption_whitelisted; + bool decryption_ignored; bool encrypted_l7; bool payload_truncated; bool has_payload[2]; // [0]: rx, [1] tx @@ -268,8 +268,8 @@ typedef struct pcapdroid { struct { bool enabled; - blacklist_t *wl; - blacklist_t *new_wl; + blacklist_t *list; + blacklist_t *new_list; } tls_decryption; } pcapdroid_t; diff --git a/app/src/main/res/drawable/ic_baseline_javascript.xml b/app/src/main/res/drawable/ic_baseline_javascript.xml new file mode 100644 index 00000000..84f3005d --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_javascript.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_checklist.xml b/app/src/main/res/drawable/ic_checklist.xml deleted file mode 100644 index 4888e908..00000000 --- a/app/src/main/res/drawable/ic_checklist.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_lock_open_alt.xml b/app/src/main/res/drawable/ic_lock_open_alt.xml new file mode 100644 index 00000000..7f4c3149 --- /dev/null +++ b/app/src/main/res/drawable/ic_lock_open_alt.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/connection_item.xml b/app/src/main/res/layout/connection_item.xml index 034f4ae6..a73598fd 100644 --- a/app/src/main/res/layout/connection_item.xml +++ b/app/src/main/res/layout/connection_item.xml @@ -58,6 +58,15 @@ android:gravity="center_vertical" android:orientation="horizontal"> + + + + + + - - diff --git a/app/src/main/res/menu/connection_context_menu.xml b/app/src/main/res/menu/connection_context_menu.xml index ac26290c..15611bc3 100644 --- a/app/src/main/res/menu/connection_context_menu.xml +++ b/app/src/main/res/menu/connection_context_menu.xml @@ -177,22 +177,44 @@ - + + + + + + + + + + + diff --git a/app/src/main/res/menu/nav_items.xml b/app/src/main/res/menu/nav_items.xml index 9978e3b6..454d4d3a 100644 --- a/app/src/main/res/menu/nav_items.xml +++ b/app/src/main/res/menu/nav_items.xml @@ -10,9 +10,9 @@ android:title="@string/stats" android:icon="@drawable/ic_stacked_bar_chart" /> + android:id="@+id/tls_decryption" + android:title="@string/decryption_rules" + android:icon="@drawable/ic_lock_open_alt" /> + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index bbd3e021..50ec8862 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 99276807..a1d7153d 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -249,8 +249,6 @@ Die %1$s App wurde von der Firewall gesperrt Die App %1$s wurde entsperrt Telefon - TLS-Entschlüsselung wird gestartet… - TLS-Entschlüsselung wird ausgeführt Installieren Exportieren Konfigurieren @@ -258,7 +256,6 @@ Protokoll Keine Daten Whitelist (Malware)… - Whitelist (Entschlüsselung)… Geben Sie PCAPdroid die Berechtigung, das mitm-Addon zu steuern Beim Exportieren des CA-Zertifikats ist ein Fehler aufgetreten \n @@ -272,7 +269,6 @@ HTTP Nicht entschlüsselbar Entschlüsselt - Auf der Positivliste Entschlüsselung Entschlüsselung: %1$s PCAPdroid hat den Beginn dieser Verbindung nicht gesehen. Einige Informationen fehlen möglicherweise @@ -357,9 +353,6 @@ IPv6 DNS-Server System DNS verwenden Wenn möglich den System DNS-Server verwenden - Regeln für die Entschlüsselungs-Whitelist - Liste von Regeln, um bestimmte Verbindungen von der TLS-Entschlüsselung auszuschließen. Nützlich, um zu vermeiden, dass Anwendungen/SDKs, die Zertifikats-Pinning verwenden, beschädigt werden. Der Hostabgleich funktioniert nur, wenn eine vorherige DNS-Antwort gesehen wurde - Entschlüsselungs-Whitelist Die Berechtigung für den externen Speicher ist erforderlich Sie versuchen, viele Regeln zu importieren, was dazu führen kann, dass die App bei einigen Interaktionen nicht mehr reagiert. Wollen Sie wirklich fortfahren\? Pcapng Format diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 918d5680..9033a625 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -222,8 +222,6 @@ Desbloquear… Descifrado TLS Descifra el tráfico SSL/TLS por medio de un ataque de intermediario (mitm). Esto podría funcionar con algunas aplicaciones, verifica la guía de usuario - Descifrado TLS está comenzando… - Descifrado TLS se está ejecutando Inspección de trafico No se ha podido iniciar el servicio mitm. Intenta abrir la aplicación mitm manualmente y vuelve a intentarlo Asistente de configuración mitm @@ -405,9 +403,7 @@ \n \nUsando la última lista negra, puedes detectar, bloquear y advertir de conexiones peligrosas en tiempo real Lista blanca (software malicioso)… - Lista blanca (descifrado)… complemento mitm - Lista blanca Opciones adicionales para mitmproxy Opciones adicionales para mitmproxy Error al iniciar el complemento mitm. Comprueba el registro para más detalles @@ -434,9 +430,6 @@ Servidor DNS IPv6 Utilizar la DNS del sistema Si es posible, utilice los servidores DNS del sistema - Reglas de descifrado en lista blanca - Lista blanca de descifrado - Lista de reglas para excluir conexiones específicas del descifrado TLS. Útil para evitar romper apps/SDKs que emplean certificate pinning. La coincidencia de host sólo funciona si se ha visto una respuesta DNS previa El permiso al almacenamiento externo es necesario Estás intentando importar muchas reglas, lo que podría hacer que la aplicación no respondiera durante algunas interacciones. ¿De verdad quieres continuar\? Formato Pcapng @@ -465,4 +458,12 @@ Error en la generación de licencia [%1$d]: %2$s Solicitando un código de licencia, por favor espera Completada la activación de la licencia + El complemento Mitm está iniciándose… + El complemento Mitm se está ejecutando + Reglas de descifrado + Estas reglas especifican qué conexiones descifrar. Las reglas basadas en el host solo funcionan si se ve una respuesta de una DNS anterior + Encriptado + Inyectado + Descifrar… + No descifrar… \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 78c7f1d7..21ed7d86 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -291,8 +291,6 @@ Utilisation de la mémoire IPv4 uniquement Extraction du trafic - Le décryptage TLS est en cours - Le décryptage TLS commence… Payload Bloquer les DNS privés Suivant @@ -347,5 +345,4 @@ Log Pas de données Liste blanche (malware) … - Liste blanche (déchiffrement) … \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 59912bf0..20c22259 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -262,8 +262,6 @@ Buka blokir… Dekripsi TLS Dekripsi lalu lintas SSL/TLS dengan melakukan mitm. Saat ini dapat bekerja dengan beberapa aplikasi, lihat panduan pengguna - Dekripsi TLS dimulai… - Dekripsi TLS sedang berjalan Inspeksi lalu lintas Tidak dapat memulai layanan mitm. Instal ulang mitm addon dan coba lagi Petunjuk instalasi Mitm diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 9ed6d794..0e5efeaa 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -258,7 +258,6 @@ Lista di blocco Regole configurate Sblocca… - Decrittazione TLS in esecuzione Impossibile avviare il servizio di mitm. Prova ad aprire manualmente l\'app dell\'addon di mitm e riprova Configurazione mitm Panoramica @@ -279,7 +278,6 @@ \n \nPer avviare la cattura, è necessario accettare la richiesta di VPN nella prossima schermata Decritta il traffico SSL/TLS tramite mitm. Potrebbe non funzionare con alcune app, far riferimento alla guida utente - Avvio decrittazione TLS… Ispezione del traffico Installa Esporta @@ -406,9 +404,7 @@ Log Dati non disponibili Aggiungi a whitelist (malware)… - Aggiungi a whitelist (decrittazione)… addon di mitm - Whitelistato Opzioni aggiuntive mitmproxy Fornisci opzioni aggiuntive per mitmproxy Errore durante l\'avvio dell\'addon di mitm. Per maggiori dettagli controllare il log @@ -436,15 +432,12 @@ Server DNS per IPv6 Usa il DNS di sistema Se possibile utilizza i server DNS di sistema - Regole whitelist per decrittazione - Whitelist della decrittazione Il permesso di accesso ai file esterni è richiesto Si sta cercando d\'importare molte regole, che potrebbero causare il rallentamento dell\'app durante alcune interazioni con la stessa. Procedere\? Formato pcapng Salva i pacchetti di rete nel formato pcapng, che permette di integrare al suo interno i segreti della decrittazione TLS Ordina per Bytes totali - Lista di regole per escludere specifiche connessioni dalla decrittazione TLS. E\' utile per evitare che app/SDK con certificate pinning smettano di funzionare. Il matching basato sull\'host funziona solo quando è presente una risposta DNS precedente alla connessione TLS Errore nella scrittura sull\'archivio esterno. Per maggiori dettagli controllare il log dell\'applicazione Autenticazione SOCKS5 Autenticati al proxy tramite nome utente e password @@ -464,4 +457,12 @@ Richiedendo un codice di licenza, attendere Licenza attivata con successo Acquista un unlock token per procedere con l\'attivazione tramite QR code + Decritta… + Crittata + Iniettati + Avviando l\'addon di mitm… + Addon di mitm in esecuzione + Regole di decrittazione + Queste regole specificano quali connessioni decrittare. Regole basate su host funzionano solo in presenza di una risposta DNS vista in precedenza + Non decrittare… \ No newline at end of file diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 849b049f..bfc3cb4d 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -267,9 +267,7 @@ SOCKS5-mellomtjener: %1$s:%2$d Telefonitjenester Avblokker … - Starter TLS-dekryptering … Trafikk-inspeksjon - Dekrypterer TLS … Kunne ikke starte MITM-tjenesten. Reinstaller MITM-tillegget og prøv igjen. Installer Oppsettsveileder for MITM diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml new file mode 100644 index 00000000..a67379d1 --- /dev/null +++ b/app/src/main/res/values-pl/strings.xml @@ -0,0 +1,469 @@ + + + PCAPdroid + 127.0.0.1 + 1234 + %1$s:%2$d + %1$s (%2$s) + SNI + URL + WHOIS + Installation ID + License code + root + PCAPdroid is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License or later for + more details + Open Source Licenses:
\n\n + - zdtun: LGPL-3.0\n\n + - nDPI: LGPL-3.0\n\n + - CustomActivityOnCrash: Apache-2.0\n\n + - Gson: Apache-2.0\n\n + - Brotli decoder: MIT\n\n + - mitmproxy: MIT\n\n + - Chaquopy: MIT\n\n + - MaxMind DB Reader: Apache-2.0\n\n + - FlagKit: MIT\n\n + - IP Geolocation by DB-IP\n\n + - AppIntro: Apache-2.0\n\n + - QrGenerator: MIT\n\n + - Font Awesome: Licenses\n\n + - App icon by Freepik from flaticon\n\n + - SourceCodePro font: OFL-1.1\n\n +
+ IPProto,SrcIP,SrcPort,DstIp,DstPort,UID,App,Proto,Status,Info,BytesSent,BytesRcvd,PktsSent,PktsRcvd,FirstSeen,LastSeen + Unlock token + + Start + Stop + Ustawienia + Kolektor UDP: %1$s:%2$d + HTTP serwer: http://%1$s:%2$d + %1$s otrzymane — %2$s wysłane + Zapytanie + Host + Skanuj aplikacje + Gotowe + Informacje + Status + Połączenia + Brak połączeń + Szczegóły połączenia + App + Protokół + Źródło + Cel + Pakiety + Kierunek + HTTP serwer + Eksport UDP + Bez wstrzymania + Ruch nie zostanie wstrzymany + Uruchom serwer HTTP do pobierania PCAP + Wysyła PCAP do zdalnego odbiornika UDP + Port serwera HTTP + Adres IP kolektora + Port kolektora + Traffic dump + Podręcznik użytkownika + Grupa na Telegramie + Kod źródłowy + Tak + Nie + Nie można skonfigurować VPN + Nie można znaleźć aplikacji „%1$s” + Statystyki + Aktywne połączenia + Zerwane połączenia + Wszystkie połączenia + Otwarte sockets + Wysłane bajty + Bajty odebrane + Wysłane pakiety + Odebrane pakiety + Zapytania DNS + Wyszukiwanie aplikacji + Brak aplikacji + DNS serwer + Aplikacje + Plik PCAP + Utwórz plik PCAP w pamięci urządzenia + Nie można zapisać pliku + Udostępnij + Usuń + OK + Ruch zapisany w pliku \"%1$s\".(%2$s) + Nie udało się usunąć pliku + Przechwytywanie działa + Przechwycono %1$s, połączenie %2$s + %1$s, %2$d + Aktywny + Pierwszy widziany + Ostatnio widziany + Zamknij + Kopiuj + Zapisz do pliku + Nie pokazano %1$d starszych połączeń + PCAPdroid to narzędzie opensource do przechwytywania i monitorowania sieci, które działa bez uprawnień administratora + Pobierz: + Nieznany + Telefon + Błąd + Nieosiągalny + Inne + Język aplikacji + Angielski + System + Nie znaleziono aplikacji obsługującej wybór plików + Plik zapisany jako \"%1$s\" + Jasny + Ciemny + Motyw + SOCKS5 + Przekierowanie SOCKS5 + Skonfiguruj przekierowanie do serwera proxy SOCKS5 + Przekieruj wszystkie połączenia TCP do serwera proxy SOCKS5 + SOCKS5 proxy: %1$s:%2$d + Uwierzytelnianie SOCKS5n + Uwierzytelnij serwer proxy za pomocą nazwy użytkownika i hasła + Adres IP serwera proxy + Port proxy + Przechwyć jako root + Pozwala PCAPdroid działać z innymi aplikacjami VPN + Dotacja + Log + Brak danych + Szukanie… + Apka: %1$s + Adres IP: %1$s + Host: %1$s + Protokół: %1$s + Biała lista (złośliwe oprogramowanie)… + Ukrywanie… + Wybrano %1$d + Zaznacz wszystko + Szczegóły aplikacji + Nazwa pakietu + UID + Nazwa + Wersja + Target SDK + Zainstalowany na + Ostatnia aktualizacja + Pozwolenia + Demony systemowe działające z maksymalnymi uprawnieniami + Demon systemowy wykonujący rozpoznawanie nazw DNS + System Android + Usługi telefoniczne + \„Nieznane\” oznacza połączenia, których aplikacji nie można określić + Pakiety upuszczone + Przechytywanie + PCAPdroid trailer + Do zrzuconych pakietów zostanie dodany zwiastun zawierający dodatkowe metadane (takie jak nazwa aplikacji) + Jak wyświetlić dane stopki w Wireshark + Dokończ transakcję, aby skorzystać z tej funkcji + Aplikacja chce przechwytywać ruch na Twoim urządzeniu.\nOdrzuć, jeśli nie masz pewności + Odmowa + Zgoda + Żądanie kontroli PCAPdroid + PCAPdroid: żądanie kontroli zostało odrzucone + PCAPdroid: żądanie kontroli było dozwolone + Interfejs przechwytywania + Internet + Wszystkie interfejsy + Przechwytywanie pakietów z \"%1$s\" + Edytuj filtry + Edytuj listę + Zasady połączeń ukrytych + Lista jest pusta + Wykryto złośliwe połączenie (%1$s) + Złośliwe połączenia + Wyczyść połączenia tekstowe + Ochrona + Wykrywanie złośliwego oprogramowania + Wykrywaj połączenia ze znanymi złośliwymi hostami za pośrednictwem czarnych list innych firm + Reset + Zasady białej listy złośliwego oprogramowania + Ta funkcja jest obecnie niedostępna na Twoim urządzeniu + Trwa łączenie z Google Play, spróbuj ponownie za chwilę + Biała lista zdefiniowana przez użytkownika w celu zablokowania wykrywania złośliwego oprogramowania. Długo naciskaj złośliwe połączenia, aby utworzyć reguły usuwające ich oznaczenie jako złośliwego oprogramowania + Lista reguł ukrywania wpisów na liście połączeń, dzięki czemu możesz skupić się na odpowiednich + Złośliwe połączenia + Status: %1$s + Nieukryte + Kopiowanie… + "URL: %1$s" + Pokaż + Wskazówka + Raz + Na zawsze + Kontroluj uprawnienia + Sprawdź, które aplikacje mogą kontrolować przechwytywanie PCAPdroid + %1$s: %2$s + Kraj + ASN + Kraj: %1$s + Wyślij raport + Uruchom przy rozruchu + Automatyczne uruchamianie przechwytywania po uruchomieniu + Nie wykryto złośliwego ruchu + Wykryto złośliwe połączenia + Biała lista + Czarne listy + Przestarzały + Nie załadowano + Aktualne + "Typ: %1$s" + Czarna lista adresów IP + Czarna lista domen + %1$s reguły + Ostatnia aktualizacja: %1$s + Złośliwe połączenia + Zaktualizowane czarne listy + Połączenia sprawdzone + Ostatnia aktualizacja + Reguły domeny + Zasady IP + Niektóre czarne listy są nieaktualne + Aktualizuj teraz + Aktualizacja… + Dowiedz się więcej o funkcji wykrywania złośliwego oprogramowania + Prywatny DNS uniemożliwia PCAPdroid sprawdzanie ruchu DNS. Możesz go wyłączyć w ustawieniach sieci Android + Prywatny DNS utrudnia wykrywanie + Wybierz aplikację docelową lub użyj białej listy deszyfrowania podczas odszyfrowywania TLS, aby uniknąć utraty połączenia z Internetem + Blokowanie… + Odblokowywanie… + Zapora + Reguły zapory + Zablokowany + %1$s pak + Zablokowany + Dozwolony + Zapora: %1$s + Płatne funkcje + Potwierdzić + Poprawny + Niepoprawny + Nie znaleziono aplikacji do wykonania tej czynności + Interfejs + Interfejs: %1$s + Ładowanie… + Zakupione + Brak przedmiotów do kupienia + Nie można połączyć się z Google Play. Spróbuj ponownie za chwilę + Doczytaj + Kup + Przechwytywanie nie jest uruchomione + Najpierw rozpocznij przechwytywanie + Skopiowane + Możesz teraz korzystać z zakupionej funkcji + Odłączyć aktywną aplikację VPN i kontynuować? + Ładowanie aplikacji… + Otwórz szufladę + Zamknij szufladę + Przechwytuj ruch ze wszystkich aplikacji + Zapisane + Deszyfrowanie TLS + Odszyfruj ruch SSL/TLS, wykonując mitm. Może to teraz działać z niektórymi aplikacjami, zapoznaj się z instrukcją obsługi + Inspekcja ruchu + Nie można uruchomić usługi mitm. Spróbuj ręcznie otworzyć aplikację mitm addon i spróbuj ponownie + Mitm kreator konfiguracji + Instalacja + Eksport + Zainstaluj PCAPdroid dodatek mitm + Skonfiguruj + Zezwól PCAPdroidowi na kontrolowanie dodatku mitm + Wyeksportuj certyfikat PCAPdroid CA, a następnie otwórz ustawienia Androida \"Szyfrowanie i poświadczenia\" i wybierz zainstaluj go jako \"Certyfikat CA\"" + Zainstaluj certyfikat PCAPdroid CA, wybierając \"VPN i aplikacje\". Android poprosi o ekran blokady lub hasło + Sprawdzanie certyfikatu… + Wystąpił błąd podczas eksportowania certyfikatu \n\nJeśli Twoje urządzenie obsługuje funkcję Autostart lub podobne oprogramowanie ograniczające wykonywanie usług w tle, pamiętaj o umieszczeniu na białej liście PCAPdroid + Certyfikat wyeksportowany, teraz zainstaluj go z poziomu ustawień Androida + Certyfikat CA jest zainstalowany + Certyfikat CA nie jest zainstalowany, uruchom kreatora instalacji mitm + Zła wersja dodatku PCAPdroid mitm. Odinstaluj go i spróbuj ponownie + Dodatek PCAPdroid mitm musi zostać zaktualizowany + Dodatek mitm + Aktualizacja + Eksport nie powiódł się + Nie zaszyfrowane + Żądanie + Odpowiedź + Przegląd + Żądanie HTTP + Odpowiedź HTTP + Payload jest obcięty. Włącz opcję \"%1$s\", aby wyświetlić w całości + WebSocket + HTTP + Payload + TX + RX + Full payload + Pokaż pełny payload połączeń (np. pełne żądanie i odpowiedź HTTP). To wymaga dużo pamięci, nie używaj na dłuższą metę + Nie do odszyfrowania + Odszyfrowane + Deszyfrowanie + Deszyfrowanie: %1$s + PCAPdroid nie widział początku tego połączenia. Może brakować niektórych informacji + Ruch + Żadne dane aplikacji nie zostały wymienione + Oczekiwanie na dane + Wyświetl jako… + Tekst do druku + Zrzut szesnastkowy + Geolokalizacja + Pokaż informacje o kraju i ASN, przeprowadzając wyszukiwanie offline + Pobieranie… + Trwa pobieranie, proszę czekać + Pobieranie nie udane + Nie znaleziono bazy danych. Geolokalizacja jest wyłączona + Bazy danych + Zbudowany na: %1$s + Stuknij, aby pobrać najnowszą bazę danych. Nowe bazy danych są dostępne co miesiąc + Rozmiar: %1$s + Stuknij, aby usunąć bazę danych i zaoszczędzić miejsce + Pobierz + To połączenie zostało zablokowane przez PCAPdroid + Import + Importowanie nie powiodło się + Nieprawidłowy format kopii zapasowej + Zaimportowana reguła %1$ds + Brak reguł eksportu + Zachować dotychczasowe zasady? + Zachowaj + Porzuć + Usunąć wybrane reguły?? + Lista zablokowanych + Skonfigurowane reguły + Połączenia zablokowane + Ostatni blok + Zapora sieciowa jest wyłączona + Zapora sieciowa jest włączona + Informacje o aplikacji + Blokuj + Odblokujk + To połączenie zostało zainicjowane przez netd, więc nie mogło zostać zablokowane + Blokuj dostęp aplikacji do Internetu, konfiguruj reguły dla określonych domen i adresów IP. Działa tylko z przechwytywaniem innym niż root + Zapora bez roota + Zablokuj QUIC + Blokuj połączenia QUIC, aby ewentualnie wrócić do odszyfrowywanego TLS. Niektóre aplikacje mogą przestać działać + Zablokuj prywatny DNS + Wykryj i prawdopodobnie zablokuj prywatny DNS, aby sprawdzić ruch DNS. Wyłączenie tej opcji może utrudnić analizę ruchu + Ten kreator przeprowadzi Cię przez proces instalacji dodatku PCAPdroid mitm i certyfikacji, które są potrzebne do wykonania odszyfrowania TLS + PCAPdroid jest teraz gotowy do odszyfrowania ruchu TLS\n\nSprawdź podręcznik użytkownika, aby dowiedzieć się więcej o środkach bezpieczeństwa, które mogą uniemożliwić odszyfrowanie i jak je ominąć + Witamy w PCAPdroid + Następny + Przeskocz + Wstecz + Zrobione + PCAPdroid to przyjazna dla prywatności aplikacja, która pozwala śledzić i analizować połączenia nawiązywane przez aplikacje na Twoim urządzeniu\n\nPonadto pozwala eksportować zrzut ruchu PCAP, wyodrębniać metadane i wiele więcej! + Prywatność na pierwszym miejscu + Aplikacja nie wykorzystuje żadnych funkcji śledzenia i analityki \n\nSkąd możesz mieć pewność? Sprawdź politykę prywatności i kod źródłowy + Kraj i ASN + PCAPdroid może wysłać zapytanie do lokalnej bazy danych, aby określić kraj zdalnego serwera\n\nNajpierw musisz pobrać bazę danych geolokalizacji z ustawień aplikacji + PCAPdroid symuluje VPN w celu przechwytywania ruchu sieciowego bez rootowania.\n\nAby rozpocząć przechwytywanie, musisz zaakceptować żądanie VPN na następnym ekranie + Sprawdzanie żądań HTTP, odpowiedzi i nieprzetworzonych danych jest łatwe dzięki wbudowanym dekoderom\n\nMasz szyfrowane połączenie? Możesz włączyć odszyfrowywanie TLS, aby uzyskać odszyfrowane dane + Dzięki zintegrowanej zaporze sieciowej możesz łatwo blokować dostęp do Internetu poszczególnym aplikacjom i domenom\n\nPołącz to z wbudowaną widocznością ruchu, aby uzyskać najlepsze narzędzie do ochrony prywatności + Zwiększ bezpieczeństwo swojego urządzenia dzięki funkcji wykrywania złośliwego oprogramowania\n\nKorzystając z aktualnych czarnych list, może wykrywać, blokować i ostrzegać o złośliwych połączeniach w czasie rzeczywistym + PCAPdroid zapewnia wiele sposobów zrzucania ruchu w standardowym formacie PCAP do dalszej analizy\n\nDzięki opcji zwiastuna, możesz dodawać nazwy aplikacji do pakietów i wyświetlać je w Wireshark + Uprawnienie %1$s zostało przyznane + Nie można przyznać uprawnienia %1$s + Nie można znaleźć podanego połączenia + Mało pamięci + Aplikacji brakuje pamięci, spodziewaj się awarii + Opcja payload została wyłączona + Przechwytywanie zostało zatrzymane + Wykorzystanie sterty + Zużycie pamięci + Aby uniemożliwić aplikacjom dostęp do Internetu, gdy PCAPdroid nie jest uruchomiony (np. po ponownym uruchomieniu), możesz ustawić PCAPdroid jako stałą sieć VPN w trybie blokady.\n\nCzy chcesz teraz otworzyć ustawienia VPN? + Adresy IP sieci VPN + Tylko IPv4 + Tylko IPv6 + IPv4 i IPv6 + Aplikacja wykorzystuje powiadomienia do wysyłania alertów w przypadku nietypowych zdarzeń. Nadaj jej uprawnienia do wysyłania powiadomień na następnym ekranie + Wyjątki VPN + Zwolnij niektóre aplikacje z połączenia VPN. Ich ruch nie będzie monitorowany + Brak wyników + Połączenia nieszyfrowane + Odblokuj na stałe + Odblokuj dla %1$dh + Odblokuj dla %1$dm + Blokuj nowo zainstalowane aplikacje + Aplikacja zablokowana + Aplikacja %1$s została zablokowana przez zaporę sieciową + Aplikacja %1$s została odblokowana + Ten widok może zawierać poufne informacje, takie jak hasła i tokeny dostępu.\n\nNigdy nie podawaj nikomu tych informacji, może to być próba oszustwa + Anuluj + Pokaż dane + Skonfigurowałeś PCAPdroid do wysyłania ruchu do zdalnego serwera. Serwer będzie mógł uzyskać dostęp do Twoich poufnych informacji.\n\nJeśli ktoś Cię o to poprosi, prawdopodobnie jest to próba oszustwa + Ze względów bezpieczeństwa wysyłanie ruchu do zdalnego serwera \"%1$s\" jest niedozwolone" + Ostrzeżenie + Płatne funkcje odblokowane. Uruchom ponownie przechwytywanie, jeśli jest uruchomione + Informacje o kompilacji + Możliwość uruchomienia deszyfrowania TLS z uprawnieniami administratora jest funkcją eksperymentalną. Oto lista znanych błędów:\n\n +- w PCAPdroid zobaczysz ruch wygenerowany z aplikacji mitm-addon zamiast oryginalnej aplikacji\n +- gdy ustawiony jest filtr aplikacji, odszyfrowanie nastąpi tylko dla aplikacji docelowej, ale PCAPdroid nadal będzie wyświetlał ruch innych aplikacji\n +- jeśli przechwytywanie się nie rozpocznie, upewnij się, że faktycznie możesz uruchomić polecenie iptables jako root (np. przez termux)\n +– to może nie działać na Androidzie 12 i nowszych\n +- jeśli aplikacja VPN jest uruchomiona, należy wybrać konkretną aplikację do odszyfrowania lub wykluczyć dodatek PCAPdroid mitm z VPN, w przeciwnym razie ruch będzie się zapętlał + + Token, którego można użyć do odblokowania płatnych funkcji w kompilacjach aplikacji spoza Google Play (np. F-Droid/Github) + Nie można zażądać tokena odblokowującego [%1$d]: %2$s + Zapoznaj się z przewodnikiem użytkownika, aby dowiedzieć się, jak uzyskać dostęp do płatnych funkcji + Usługa licencji PCAPdroid jest obecnie niedostępna. Spróbuj ponownie za kilka minut + Prośba o token odblokowania, proszę czekać + Pokaż + To jest twój token odblokowania. Zanotuj go, ponieważ będzie potrzebny do wygenerowania kodów licencyjnych + Płatna funkcja + Kup funkcję %1$s, aby zacząć blokować połączenia + Wydaje się, że certyfikat mitm nie jest zainstalowany. Jeśli będziesz kontynuować, odszyfrowywanie może się nie powieść + Skonfiguruj urządzenie do deszyfrowania TLS + Dodatkowe opcje mitmproxy + Podaj dodatkowe opcje dla mitmproxy + Błąd podczas uruchamiania dodatku mitm. Sprawdź dziennik, aby uzyskać szczegółowe informacje + Tryb białej listy + W tym trybie wszystkie połączenia będą blokowane, chyba że zostaną ręcznie dodane do białej listy. Możesz przegapić powiadomienia push bez odpowiedniej białej listy + Reguły te określają, które połączenia mają być dozwolone. Reguły listy zablokowanych mają pierwszeństwo przed regułami białej listy + Dodaj do białej listy zapory + Usuń z białej listy zapory + Czy na pewno chcesz zresetować te statystyki? + Mapowanie portów + Skonfiguruj reguły mapowania portów, aby przekierowywać połączenia do innego hosta lub portu + Dodaj + Przekieruj do: + Oryginalny port + wymagany + Docelowy adres IP + Port docelowy + Mapowanie portów jest już zdefiniowane + Usunąć wybrane elementy? + Adres IP + Reguła już zdefiniowana + Serwery DNS + Skonfiguruj serwery DNS, które mają być używane podczas przechwytywania + Serwer DNS IPv4 + Serwer DNS IPv6 + Użyj systemowego DNS + Jeśli to możliwe, korzystaj z systemowych serwerów DNS + Dostęp do pamięci zewnętrznej jest wymagany + Próbujesz zaimportować wiele reguł, co może spowodować, że aplikacja przestanie odpowiadać podczas niektórych interakcji. Czy naprawdę chcesz kontynuować? + Format Pcapng + Zrzucaj pakiety w formacie zrzutu pcapng, który umożliwia osadzenie sekretów deszyfrowania TLS + Sortuj + Całkowita liczba bajtów + Zapis w pamięci zewnętrznej nie powiódł się. Sprawdź dziennik aplikacji, aby uzyskać szczegółowe informacje + Nazwa + Hasło + Połączenie z dodatkiem mitm nie powiodło się. Aby obejść ten problem, możesz spróbować otworzyć aplikację dodatku mitm, a następnie wrócić do PCAPdroid bez jej zamykania. Czy chcesz go teraz otworzyć? + Czy chcesz wygenerować licencję na urządzenie \"%1$s\" za pomocą następującego tokena odblokowującego? + Niepoprawna licencja + Błąd połączenia: %1$s + Aktywuj za pomocą kodu QR + Kod QR wygasł. Wygeneruj nowy kod QR i spróbuj ponownie + Zainstaluj PCAPdroid z Google Play i zeskanuj ten kod QR + Kup token odblokowujący, aby kontynuować aktywację kodu QR + Osiągnąłeś limit licencji dla tego tokena odblokowującego. Kup nowy token, aby wygenerować więcej licencji + Błąd generowania licencji [%1$d]: %2$s + Żądanie kodu licencji, proszę czekać + Aktywacja licencji zakończona +
\ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 66fc9d84..05d78d52 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -259,7 +259,6 @@ Desbloquear… Decriptação do TLS Decripte o tráfego SSL/TLS via mitm. Isto agora pode funcionar com alguns apps, confira o guia de usuario - Decriptação do TLS está em execução Inspeção de tráfego Não foi possível iniciar o serviço do mitm. Reinstale a extensão mitm e tente novamente Assistente de configuração do mitm @@ -278,7 +277,6 @@ \nAlém disso, permite que você exporte PCAP dump do tráfego, extraia metadados e muito mais! Privacidade em primeiro lugar País e ASN - Decriptação do TLS está começando… Instalar Exportar Exporte o certificado PCAPdroid CA, logo abra em configurações do Android \"Criptografia e Credenciais\" e escolha instalar como um \"certificado CA\" diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f7172bf9..85a61599 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,6 +1,6 @@ - Начать + Запустить Остановить Настройки UDP сборщик: %1$s:%2$d @@ -218,8 +218,6 @@ Службы телефонии Разблокировать… Дешифрование TLS - Дешифрование TLS запускается… - Дешифрование TLS запущено Дешифрование SSL/TLS траффика посредством mitm. Это может работать с некоторыми приложениями, ознакомьтесь с руководством пользователя Просмотр траффика Мастер настройки mitm @@ -406,9 +404,7 @@ Журнал Нет данных Белый список (вредонос)… - Белый список (дешифрование)… mitm дополнение - Добавлено в белый список Укажите дополнительные опции для mitmproxy Ошибка запуска mitm дополнения. Проверьте журнал для деталей Режим белого списка @@ -435,13 +431,10 @@ Правило уже определено Использовать системный DNS Формат Pcapng - Белый список дешифрования Требуется разрешение на доступ к внешнему накопителю Дополнительные опции mitmproxy Делать дамп пакетов в формат pcapng, который позволяет встраивать секреты дешифрования TLS Вы пытаетесь импортировать множество правил, что может сделать приложение неотзывчивым в течение некоторых действий. Вы действительно хотите продолжить\? - Список правил для исключения отдельных соединений из процесса дешифрования TLS. Полезно, чтобы избегать случаи, когда из-за привязки сертификата нарушается работа приложения или SDK. Сопоставление хостов работает только если раннее был получен соответствующий DNS ответ - Белый список дешифрования Использовать системные DNS сервера, если это возможно Всего байт Сортировать по @@ -464,4 +457,12 @@ Достигнут лимит лицензий для данного unlock token. Приобретите новый token, чтобы сгенерировать больше лицензий Срок действия QR кода истек. Сгенерируйте новый QR код и повторите попытку Аутентификация SOCKS5 + MITM-аддон запускается… + MITM-аддон запущен + Правила расшифровки + Расшифровывать… + Эти правила указывают на те соединения, которые необходимо расшифровывать. Правила на основе хостов работают только если найден соответствующий отклик от DNS сервера + Не расшифровывать… + Зашифровано + Инжектировано \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0d88c6d8..6fd78789 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -216,7 +216,6 @@ SOCKS5 vekili: %1$s:%2$d Engeli kaldır… TLS şifre çözme - TLS şifre çözme başlıyor… Ortadaki adam kurulum sihirbazı Kur PCAPdroid CA sertifikasını dışa aktarın, ardından Android \"Şifreleme ve Kimlik Bilgileri\" ayarlarını açın ve \"CA sertifikası\" olarak kurmayı seçin @@ -262,7 +261,6 @@ Yapılandır \"VPN ve uygulamalar\" seçeneğini seçerek PCAPdroid CA sertifikasını kurun. Android, kilit ekranınızı veya parolanızı soracak Ortadaki adam gerçekleştirerek SSL/TLS trafiğinin şifresini çöz. Bu artık bazı uygulamalarla çalışabilir, kullanım kılavuzuna bakın - TLS şifre çözme çalışıyor Trafik denetimi Dışa aktar PCAPdroid\'e ortadaki adam eklentisini denetleme izni verin @@ -407,9 +405,7 @@ Günlük kaydı Veri yok Beyaz liste (kötü amaçlı yazılım)… - Beyaz liste (şifre çözme)… ortadaki adam eklentisi - Beyaz listeye alındı Ek mitmproxy seçenekleri mitmproxy için ek seçenekler sağlayın Ortadaki adam eklentisi başlatılırken hata oluştu. Ayrıntılar için günlüğe bakın @@ -431,8 +427,6 @@ IPv4 DNS sunucusu IPv6 DNS sunucusu Mümkünse sistem DNS sunucularını kullanın - Şifre çözme beyaz listesi kuralları - Şifre çözme beyaz listesi Harici depolama izni gerekli Çok sayıda kuralı içe aktarmaya çalışıyorsunuz, bu da bazı etkileşimler sırasında uygulamanın yanıt vermemesine neden olabilir. Gerçekten devam etmek istiyor musunuz\? Pcapng biçimi @@ -442,7 +436,6 @@ Sistem DNS\'sini kullan Bağlantıları farklı bir ana makineye veya bağlantı noktasına yönlendirmek için bağlantı noktası eşleme kurallarını yapılandırın Şuraya yönlendir: - Belirli bağlantıları TLS şifre çözme işleminden hariç tutmak için kurallar listesi. Sertifika sabitleme kullanan uygulamaları/SDK\'ları bozmaktan kaçınmak için faydalıdır. Ana makine eşleştirme yalnızca önceden bir DNS yanıtı görülürse çalışır Paketleri TLS şifre çözme parolalarının gömülmesine olanak tanıyan pcapng biçiminde dök Sıralama ölçütü Toplam bayt @@ -465,4 +458,12 @@ Bu kilit açma belirteci için lisans sınırına ulaştınız. Daha fazla lisans oluşturmak için yeni bir belirteç satın alın Aşağıdaki kilit açma belirtecini kullanarak \"%1$s\" aygıtı için bir lisans oluşturmak istiyor musunuz\? Geçersiz lisans + Şifre çözme kuralları + Enjekte edildi + Ortadaki adam eklentisi çalışıyor + Ortadaki adam eklentisi başlatılıyor… + Şifresini çözme… + Bu kurallar hangi bağlantıların şifresinin çözüleceğini belirtir. Ana makine tabanlı kurallar yalnızca önceden bir DNS yanıtı görülürse çalışır + Şifresini çöz… + Şifreli \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 94a1d10f..dc7cc0fd 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -245,8 +245,6 @@ SOCKS5 代理: %1$s:%2$d 拨号服务 TLS 解密 - TLS 解密正在启动… - TLS 解密运行中 流量检查 无法启动 mitm 服务。尝试手动打开 mitm 附加组件应用并重试 Mitm 设置向导 @@ -429,7 +427,6 @@ 购买 %1$s 功能开始拦截连接 似乎未安装 mitm 证书。如果继续,解密会失败 配置设备以进行 TLS 解密 - 已加入白名单 端口映射 必需的 删除所选项目吗? @@ -439,13 +436,11 @@ 你正试图导入许多规则,可能使应用程序在某些交互期间无响应。你真想继续吗? 用 PCAPNG 格式转储数据包,该格式允许内嵌 TLS 解密 secrets 如果可能,使用系统 DNS 服务器 - 流量解密白名单 配置将连接重定向到不同主机或端口的端口映射规则 日志 无数据 mitm 附加组件 白名单(恶意软件)… - 白名单(解密)… 附加 mitmproxy 选项 原始端口 提供附加的 mitmproxy 选项 @@ -461,9 +456,7 @@ 你真想重置这些统计数据吗? 目标 IP 已定义端口映射 - 将特定连接排除于 TLS 解密之外的规则列表。可避免破坏部署了证书固定特性的应用/SDK 的正常工作。主机匹配生效的前提是之前看到过相应主机的 DNS 应答 IPv6 DNS 服务器 - 流量解密白名单规则 PCAPNG 格式 DNS 服务器 IPv4 DNS 服务器 @@ -490,4 +483,12 @@ 许可证生成错误 [%1$d]: %2$s 正在请求许可代码,请稍等 已完成许可证激活 + 解密… + 这些规则指定解密哪些连接。存在先前的 DNS 响应是基于 Host 的规则生效的前提 + 已注入 + 解密规则 + Mitm 附加组件启动中… + Mitim 附加组件运行中 + 不解密… + 已加密 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 154993f5..f2cb71a4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -140,7 +140,6 @@ Host: %1$s Protocol: %1$s Whitelist (malware)… - Whitelist (decryption)… Hide… %1$d selected Select all @@ -267,8 +266,6 @@ Saved TLS decryption Decrypt the SSL/TLS traffic by performing mitm. This may now work with some apps, check out the user guide - TLS decryption is starting… - TLS decryption is running Traffic inspection Could not start the mitm service. Try to open the mitm addon app manually and retry Mitm setup wizard @@ -305,7 +302,6 @@ Show the full connections payload (e.g. the full HTTP request and response). This requires a lot of memory, don\'t use in the long run Not decryptable Decrypted - Whitelisted Decryption Decryption: %1$s PCAPdroid has not seen the start of this connection. Some information may be missing @@ -449,9 +445,6 @@ IPv6 DNS server Use system DNS Use the system DNS servers if possible - Decryption whitelist rules - List of rules to exclude specific connections from the TLS decryption. Useful to avoid breaking apps/SDKs employing certificate pinning. Host matching only works if a prior DNS reply is seen - Decryption whitelist The external storage permission is required You are trying to import many rules, which could make the app unresponsive during some interactions. Do you really want to continue? Pcapng format @@ -473,4 +466,12 @@ License generation error [%1$d]: %2$s Requesting a license code, please wait License activation completed + Mitm addon is starting… + Mitm addon is running + Decryption rules + These rules specify which connections to decrypt. Host-based rules only work if a prior DNS reply is seen + Decrypt… + Don\'t decrypt… + Encrypted + Injected diff --git a/build.gradle b/build.gradle index 89e49b0e..a67cdd35 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.0.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/fastlane/metadata/android/pl-PL/full_description.txt b/fastlane/metadata/android/pl-PL/full_description.txt new file mode 100644 index 00000000..979196e7 --- /dev/null +++ b/fastlane/metadata/android/pl-PL/full_description.txt @@ -0,0 +1,20 @@ +PCAPdroid to przyjazna dla prywatności aplikacja, która pozwala śledzić i analizować połączenia nawiązywane przez inne aplikacje na Twoim urządzeniu. +Pozwala także eksportować zrzut ruchu PCAP, sprawdzać HTTP, odszyfrowywać ruch TLS i wiele więcej. + +PCAPdroid symuluje VPN w celu przechwytywania ruchu sieciowego bez rootowania. Nie korzysta ze zdalnego serwera VPN, zamiast tego dane są przetwarzane lokalnie na urządzeniu. + +Funkcje: + +* Rejestruj i sprawdzaj połączenia wykonane przez użytkownika i aplikacje systemowe +* Wyodrębnij SNI, zapytanie DNS, adres URL HTTP i zdalny adres IP +* Sprawdzaj żądania i odpowiedzi HTTP dzięki wbudowanym dekoderom +* Sprawdź payload połączeń jako zrzut szesnastkowy/tekst +* Odszyfruj ruch HTTPS/TLS i wyeksportuj SSLKEYLOGFILE +* Zrzuć ruch do pliku PCAP, pobierz go z przeglądarki lub przesyłaj strumieniowo do zdalnego odbiornika w celu analizy w czasie rzeczywistym (np. Wireshark) +* Twórz reguły, aby odfiltrować dobry ruch i łatwo wykryć anomalie +* Zidentyfikuj kraj i ASN zdalnego serwera za pomocą wyszukiwania w bazie danych offline +* Na zrootowanych urządzeniach przechwytuj ruch, gdy działają inne aplikacje VPN + +Jeśli planujesz używać PCAPdroid do przeprowadzania analizy pakietów, sprawdź konkretną sekcję instrukcja. + +Dołącz do międzynarodowej społeczności PCAPdroid na Telegram lub na Matrix. diff --git a/fastlane/metadata/android/pl-PL/short_description.txt b/fastlane/metadata/android/pl-PL/short_description.txt new file mode 100644 index 00000000..be71b65f --- /dev/null +++ b/fastlane/metadata/android/pl-PL/short_description.txt @@ -0,0 +1 @@ +Monitor sieci bez roota i narzędzie do zrzutu ruchu dla urządzeń z systemem Android diff --git a/gradle.properties b/gradle.properties index 98ba7435..1fa372d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,4 +19,7 @@ android.useAndroidX=true android.enableJetifier=true # Gradle plugin not support API 33 yet -android.suppressUnsupportedCompileSdk=33 \ No newline at end of file +android.suppressUnsupportedCompileSdk=33 +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 87bc277d..4bd9a1ba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Mar 16 10:42:55 CET 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/submodules/zdtun b/submodules/zdtun index 342980aa..9f93252b 160000 --- a/submodules/zdtun +++ b/submodules/zdtun @@ -1 +1 @@ -Subproject commit 342980aa1e689335c0e9f978a432219fe2a1ba1a +Subproject commit 9f93252b5f92d5027a6dea542013a36993531dcd