diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 88b0569b4..2ef069117 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,5 +1,4 @@ # Contribution Guide --------------------- Thank you for contributing! Please select: @@ -12,9 +11,7 @@ Thank you for contributing! Please select: * [Donating](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md#donating) * [Respecting](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md#code-of-conduct) ---- - -#### DEVELOPING +## DEVELOPING Feel invited to develop with us using these steps: @@ -26,9 +23,7 @@ Feel invited to develop with us using these steps: 6. Test your changes and submit a [pull request](https://help.github.com/articles/using-pull-requests/) when we shall add it. 7. Don't be shy to ask for help in an Issue and feel invited to [contact us](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Contact). ---- - -#### TRANSLATING +## TRANSLATING Let our app start up in your native language! @@ -37,9 +32,7 @@ Let our app start up in your native language! * Please make sure to *finish* your translation, if you start a new one! * Translations will be pulled into our GitHub automatically. Enjoy! ---- - -#### TESTING +## TESTING Can't code (yet)? No problem, we love you too! @@ -49,9 +42,7 @@ Can't code (yet)? No problem, we love you too! 4. Test all functions of our app and check for possible translation bugs. 5. Share [our website](https://secupwn.github.io/Android-IMSI-Catcher-Detector) and [Media Material](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Media-Material) or [tweet about us](https://twitter.com/AIMSICD). ---- - -#### FORMATTING +## FORMATTING Useful links to help you with correctly formatting posts. @@ -63,13 +54,10 @@ Useful links to help you with correctly formatting posts. * [Markdown Tables Generator](http://www.tablesgenerator.com/markdown_tables) * [Code/Syntax Highlighting](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) ---- - -#### DEBUGGING +## DEBUGGING Thanks for helping us squashing bugs! Please be patient. ---- **Important Bug Submission Rules:** 1. **SAFETY FIRST:** Remove CID, LAT, IMEI, IMSI and phone number from logs you submit! @@ -80,8 +68,6 @@ Thanks for helping us squashing bugs! Please be patient. 6. Describe your Issue as thoroughly as possible and *add logs* so that we can reproduce it. 8. Maintain your filed Issues! Nothing is more annoying than unresponsive bug reporters. ---- - In all cases, you **MUST** include the following: * AIMSICD version (see the About-Tab within our app) @@ -91,8 +77,6 @@ In all cases, you **MUST** include the following: * Logcat from button `Debugging` in Navigation Drawer (remove personal data) * Feel free to attach any other logs made by a logcat tool like [MatLog](https://github.com/plusCubed/matlog) ---- - Command line junkie? Then you can use the following shell function to help you get only relevant logcat entries. Copy and paste the following to your terminal shell: @@ -121,28 +105,22 @@ alias aimrun='cdaim; logclr; am start -n com.SecUpwN.AIMSICD/.AIMSICD; read dumm To run it, just type: `aimrun`. If you want to also supply *radio* logcat, add `-b radio` somewhere in the `logdmp` alias, but know that your GPS location and cell info may be included when you do that. ---- - -#### SEEKING +## SEEKING Special positions we are currently seeking skilled people for: * People with a CryptoPhone for another detection verification. * Bugfixer for [Coverity Scan Defects](https://scan.coverity.com/projects/3346) detected within our app. ---- - -#### DONATING +## DONATING Thank you for encouraging our developers! * Feel invited to donate using [this guide](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Donations). ---- - -#### Code of Conduct +## Code of Conduct -**Our Pledge** +### Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and @@ -151,7 +129,7 @@ size, disability, ethnicity, gender identity and expression, level of experience nationality, personal appearance, race, religion, or sexual identity and orientation. -**Our Standards** +### Our Standards Examples of behavior that contributes to creating a positive environment include: @@ -173,7 +151,7 @@ advances * Other conduct which could reasonably be considered inappropriate in a professional setting -**Our Responsibilities** +### Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in @@ -185,7 +163,7 @@ that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. -**Scope** +### Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of @@ -194,7 +172,7 @@ address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. -**Enforcement** +### Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the [project maintainer](https://github.com/SecUpwN). All @@ -207,6 +185,6 @@ Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. -**Attribution** +### Attribution This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), Version 1.4 diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index f743c8f49..6d9bc27c2 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,35 +1,24 @@ ->Thank you for your feedback! Please add below details so that we can help you a bit faster. + ---- - -#### Agreements ->Please check these boxes to ensure you've actually read and understood these important rules! +### Agreements + - [ ] **I have reviewed and accepted the [guidelines for contributing](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md) to this project.** - [ ] **I have searched the [open Issues](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/issues) and made sure I am not filing a duplicate.** - [ ] **I have read the notes on [debugging](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md#debugging) and will properly maintain this Issue.** - ---- - -#### Overview ->Please add a short and easy to understand description of the Issue you've experienced here. +### Overview + * `AIMSICD` version (see the `About` screen): * Phone and ROM running *current* release: * Link to logfile without identifyable data: ---- - -#### Reproduction ->Please tell us the detailed steps on how to reproduce your Issue here. - ---- - -#### References ->If your Issue is related to any other existing Issues or pull requests, please link them here. +### Reproduction + ---- +### References + -#### Screenshots ->If you experienced visual glitches, please add a screenshot without metadata here. +### Screenshots + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 7ba87f426..d3c08fcde 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,34 +1,24 @@ ->Thank you for submitting a pull request! Please add below details so that we can merge it faster. + ---- - -#### Agreements ->Please check these boxes to ensure you've actually read and understood these important rules! +### Agreements + - [ ] **I have reviewed and accepted the [guidelines for contributing](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md) to this project.** - [ ] **I have reviewed and closely followed the [Style Guide](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Style-Guide) for this Android app.** ---- - -#### Overview ->Please add a short and easy to understand description of your proposed changes here. - ---- +### Overview + -#### Classification ->Please click the correct checkbox that applies best to classify your pull request. +### Classification + - [ ] Bugfix (non-breaking change which fixes an existing issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Refactor (restructuring of existing code without changing its external functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) ---- - -#### References ->If your pull request is related to or solves any existing Issues, please link them here. - ---- +### References + -#### Screenshots ->If you have created visual changes, please add a screenshot without metadata here. +### Screenshots + diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 000000000..5f679a64c --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/externalDependencies.xml b/.idea/externalDependencies.xml new file mode 100644 index 000000000..354291168 --- /dev/null +++ b/.idea/externalDependencies.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 345111338..e58d06936 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,31 +5,36 @@ # ------------------------------------------------------------------------ language: android -sudo: false - jdk: oraclejdk8 +sudo: false +before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ cache: directories: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ -before_cache: - - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - $HOME/.android/build-cache env: global: + - GRADLE_OPTS="-Xmx2048m -Xms512m" # Encrypted Coverity Scan Token - secure: "jRKgZfeAxDhqDIrySBESiij3Ot9cmVQ4CMB+IVpmf7Xjfek6By1ba7Y1lgMdLRPgvLkj3k5mMx1BMx2yeSCBp/+TZJ6Ezj3EVJ6HS2ctkAH4KzsiqlSCKiRgfOqKgzfnftCkNzXCEE3XLVLcv4iT5Ru/EBG85kEDViGrDBP+PxA=" android: components: - - platform-tools - tools - - build-tools-23.0.3 - - android-23 + - platform-tools + - build-tools-25.0.2 + - android-25 - extra-android-m2repository -before_install: 'openssl aes-256-cbc -K $encrypted_dc771c3300d2_key -iv $encrypted_dc771c3300d2_iv -in keystore.jks.enc -out keystore.jks -d || true' +before_install: + - 'openssl aes-256-cbc -K $encrypted_dc771c3300d2_key -iv $encrypted_dc771c3300d2_iv -in keystore.jks.enc -out keystore.jks -d || true' + +install: ./gradlew clean script: ./gradlew build check @@ -61,3 +66,9 @@ addons: notifications: hipchat: - secure: "I2XmQkFCyKZHW2NeClYyl3FND80YkqLtYo+Rn3ftS4xjEg6VfGgDv6AlvQ+b+oZg7RZI6nKia9OLZxAxVBOHw6UcJJnurJx4hfAIBZAihIiNpZPj1c9wGgv4D+M6zi3rgbJRZ2Tz6IKJvHC+CD3LApeJR9kH15lDWbD7YZ0UI7E=" + webhooks: + urls: + - https://webhooks.gitter.im/e/4c8e31d5ac5b12001ca4 + on_success: change # options: [always|never|change] default: always + on_failure: always # options: [always|never|change] default: always + on_start: never # options: [always|never|change] default: always diff --git a/AIMSICD/build.gradle b/AIMSICD/build.gradle index a9682a610..fe7738116 100644 --- a/AIMSICD/build.gradle +++ b/AIMSICD/build.gradle @@ -1,5 +1,8 @@ apply plugin: 'com.android.application' apply plugin: 'realm-android' +apply plugin: "io.freefair.android-checkstyle" +apply plugin: "io.freefair.android-javadoc-jar" +apply plugin: "io.freefair.android-ci" def gitSha = null try { @@ -8,11 +11,9 @@ try { logger.warn("git not available", e) } -def isCi = "true".equals(System.getenv("CI")) - android { - compileSdkVersion 23 - buildToolsVersion '23.0.3' + compileSdkVersion 25 + buildToolsVersion '25.0.2' defaultConfig { applicationId "com.SecUpwN.AIMSICD" @@ -39,26 +40,22 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } - dexOptions { - preDexLibraries !isCi - } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } + lintOptions { warning 'MissingTranslation', 'InvalidPackage' - - xmlReport false - htmlReport !isCi - - textReport isCi - textOutput 'stdout' + disable 'HardwareIds' } + packagingOptions { exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE.txt' } + productFlavors { system { versionName "$project.version-system" @@ -74,7 +71,8 @@ dependencies { // Please group dependencies for better review like below. // Android Support Libraries - compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:appcompat-v7:25.3.0' + compile 'io.realm:android-adapters:2.0.0' // OpenCSV (comma-separated values) parser library compile 'au.com.bytecode:opencsv:2.4' @@ -83,9 +81,10 @@ dependencies { compile 'com.github.Stericson:RootShell:d708ae1f0a' // Dependency Injection for Android - compile 'io.freefair.android-injection:injection:2.0.0-beta1' - compile 'io.freefair.android-injection:logging:2.0.0-beta1' - compile 'io.freefair.android-injection:okhttp:2.0.0-beta1' + compile 'io.freefair.injection:android-injection:2.0.0-beta16' + compile 'io.freefair.injection:okhttp:2.0.0-beta16' + compile 'io.freefair.android-util:function:3.0.0' + compile 'io.freefair:slf4j-android:1.7.21' compile 'io.freefair.android-colors:material:1.2.0' @@ -98,18 +97,16 @@ dependencies { // ShowcaseView library to highlight specific app elements //compile 'com.github.amlcurran.showcaseview:library:5.3.0' - provided "org.projectlombok:lombok:1.16.8" - apt "org.projectlombok:lombok:1.16.8" + provided "org.projectlombok:lombok:1.16.16" + //apt "org.projectlombok:lombok:1.16.16" testCompile 'junit:junit:4.12' } apply from: "signing.gradle" -apply plugin: "io.freefair.android-checkstyle" -apply plugin: "io.freefair.android-javadoc-jar" checkstyle { - toolVersion = "6.15" + toolVersion = "7.+" } String getBuildNumber() { diff --git a/AIMSICD/config/checkstyle/checkstyle.xml b/AIMSICD/config/checkstyle/checkstyle.xml index 958895878..107bd5756 100644 --- a/AIMSICD/config/checkstyle/checkstyle.xml +++ b/AIMSICD/config/checkstyle/checkstyle.xml @@ -24,7 +24,6 @@ - @@ -35,6 +34,13 @@ + + + + + + + @@ -57,7 +63,6 @@ - diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java index 00f39396b..e72a69765 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java @@ -16,20 +16,23 @@ import com.secupwn.aimsicd.enums.Status; import com.secupwn.aimsicd.utils.BaseAsyncTask; import com.secupwn.aimsicd.utils.TinyDB; +import com.secupwn.aimsicd.utils.UncaughtExceptionLogger; + +import org.slf4j.impl.HandroidLoggerAdapter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.app.InjectionAppCompatActivity; import io.freefair.android.injection.app.InjectionApplication; -import io.freefair.android.injection.modules.AndroidLoggerModule; import io.freefair.android.injection.modules.OkHttpModule; -import io.freefair.android.util.logging.Logger; +import io.freefair.injection.injector.RuntimeInjector; import io.realm.Realm; import io.realm.RealmConfiguration; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class AndroidIMSICatcherDetector extends InjectionApplication { private static WeakReference instance; @@ -39,8 +42,6 @@ public static AndroidIMSICatcherDetector getInstance() { } private Status currentStatus; - @Inject - private Logger log; /** * Maps between an activity class name and the list of currently running @@ -54,38 +55,27 @@ public AndroidIMSICatcherDetector() { @Override public void onCreate() { + HandroidLoggerAdapter.DEBUG = BuildConfig.DEBUG; + UncaughtExceptionLogger.init(); instance = new WeakReference<>(this); - addModule(new AndroidLoggerModule()); - addModule(OkHttpModule.withCache(this)); + RuntimeInjector.getInstance().register(OkHttpModule.withCache(this)); super.onCreate(); - RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this) + initRealm(); + + TinyDB.getInstance().init(getApplicationContext()); + TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, true); + } + + private void initRealm() { + Realm.init(this); + + RealmConfiguration realmConfiguration = new RealmConfiguration.Builder() .deleteRealmIfMigrationNeeded() + .initialData(new DefaultDataTransaction()) .build(); Realm.setDefaultConfiguration(realmConfiguration); - final Realm realm = Realm.getDefaultInstance(); - - realm.executeTransactionAsync( - new DefaultDataTransaction(), - new Realm.Transaction.OnSuccess() { - @Override - public void onSuccess() { - log.debug("Loading default data successful"); - realm.close(); - } - }, - new Realm.Transaction.OnError() { - @Override - public void onError(Throwable error) { - log.error("Error loading default data", error); - realm.close(); - } - } - ); - - TinyDB.getInstance().init(getApplicationContext()); - TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, true); } public void removeTask(BaseAsyncTask pTask) { @@ -96,7 +86,7 @@ public void removeTask(BaseAsyncTask pTask) { for (BaseAsyncTask lTask : tasks) { if (lTask.equals(pTask)) { tasks.remove(lTask); - log.verbose("BaseTask removed:" + pTask.toString()); + log.debug("BaseTask removed: {}", pTask); break; } @@ -113,7 +103,7 @@ public void addTask(Activity activity, BaseAsyncTask pTask) { return; } - log.debug("BaseTask addTask activity:" + activity.getClass().getCanonicalName()); + log.debug("BaseTask addTask activity:{}", activity.getClass().getCanonicalName()); int key = activity.getClass().getCanonicalName().hashCode(); List> tasks = mActivityTaskMap.get(key); @@ -121,7 +111,7 @@ public void addTask(Activity activity, BaseAsyncTask pTask) { tasks = new ArrayList<>(); mActivityTaskMap.put(key, tasks); } - log.verbose("BaseTask added:" + pTask.toString()); + log.debug("BaseTask added:{}", pTask.toString()); tasks.add(pTask); } @@ -130,7 +120,7 @@ public void detach(Activity activity) { return; } - log.debug("BaseTask detach:" + activity.getClass().getCanonicalName()); + log.debug("BaseTask detach: {}", activity.getClass().getCanonicalName()); List> tasks = mActivityTaskMap.get(activity.getClass().getCanonicalName().hashCode()); if (tasks != null) { @@ -144,7 +134,7 @@ public void attach(InjectionAppCompatActivity activity) { if (activity == null) { return; } - log.debug("BaseTask attach:" + activity.getClass().getCanonicalName()); + log.debug("BaseTask attach:{}", activity.getClass().getCanonicalName()); List> tasks = mActivityTaskMap.get(activity.getClass().getCanonicalName().hashCode()); if (tasks != null) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java index 419cc2824..78d58a806 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java @@ -5,7 +5,6 @@ */ package com.secupwn.aimsicd.adapters; -import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -29,8 +28,8 @@ */ public class MeasuredCellStrengthAdapter extends RealmBaseAdapter { - public MeasuredCellStrengthAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public MeasuredCellStrengthAdapter(RealmResults realmResults) { + super(realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java index 54bafe171..33edecdb4 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java @@ -49,6 +49,7 @@ public static class DATABASE_SETTINGS { */ public static class APPLICATION { public static final int DOWNLOAD_LOCAL_BTS_DATA = 400; //Download Local BST Data FIXME Is this should be "Download Local OCID Data" ? + public static final int IMPORT_CELL_TOWERS_DATA = 401; //Download CellTowers Data public static final int UPLOAD_LOCAL_BTS_DATA = 410; //Upload Local BST Data public static final int ADD_GET_OCID_API_KEY = 420; // Add/Get OCID API key public static final int FAQ = 450; // TODO Help/FAQ diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java index 5bb350767..b1b40edd0 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java @@ -5,7 +5,6 @@ */ package com.secupwn.aimsicd.data.adapter; -import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -28,8 +27,8 @@ */ public class BaseStationAdapter extends RealmBaseAdapter { - public BaseStationAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public BaseStationAdapter(RealmResults realmResults) { + super(realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java index 61b1223a7..ded64930d 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java @@ -5,7 +5,6 @@ */ package com.secupwn.aimsicd.data.adapter; -import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -21,8 +20,8 @@ public class DefaultLocationAdapter extends RealmBaseAdapter { - public DefaultLocationAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public DefaultLocationAdapter(RealmResults realmResults) { + super(realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java index 476edc26d..8a6bd85d6 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java @@ -1,6 +1,5 @@ package com.secupwn.aimsicd.data.adapter; -import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -14,8 +13,8 @@ public class DetectionStringAdapter extends RealmBaseAdapter { - public DetectionStringAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public DetectionStringAdapter(RealmResults realmResults) { + super(realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java index 27f23f4b3..69c0493c4 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java @@ -1,6 +1,5 @@ package com.secupwn.aimsicd.data.adapter; -import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -18,8 +17,8 @@ public class EventAdapter extends RealmBaseAdapter { - public EventAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public EventAdapter(RealmResults realmResults) { + super(realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java index 198c66ecc..72218f33f 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java @@ -5,7 +5,6 @@ */ package com.secupwn.aimsicd.data.adapter; -import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -23,8 +22,8 @@ public class ImportAdapter extends RealmBaseAdapter { - public ImportAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public ImportAdapter(RealmResults realmResults) { + super(realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java index 5ac5dd618..998343255 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java @@ -1,6 +1,5 @@ package com.secupwn.aimsicd.data.adapter; -import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -21,8 +20,8 @@ */ public class MeasureAdapter extends RealmBaseAdapter { - public MeasureAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public MeasureAdapter(RealmResults realmResults) { + super(realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java index c7c805af9..d516885d6 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java @@ -8,7 +8,7 @@ package com.secupwn.aimsicd.data.adapter; -import android.content.Context; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -26,13 +26,14 @@ public class SmsDataAdapter extends RealmBaseAdapter { - public SmsDataAdapter(Context context, RealmResults realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public SmsDataAdapter(RealmResults realmResults) { + super(realmResults); } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.adv_user_sms_listview, parent, false); holder = new ViewHolder(); holder.smsd_timestamp = (TextView) convertView.findViewById(R.id.tv_adv_smsdata_timestamp); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java index 70db057eb..734a66575 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java @@ -18,10 +18,4 @@ public class BaseTransceiverStation extends RealmObject { private Date timeFirst; private Date timeLast; private GpsLocation gpsLocation; - - @Override - public void removeFromRealm() { - gpsLocation.removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java index c89aecd92..fbfb766c6 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java @@ -32,10 +32,4 @@ public class Event extends RealmObject { private int dfId; private String dfDescription; - - @Override - public void removeFromRealm() { - gpsLocation.removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java index 5aa192569..3491797af 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java @@ -21,10 +21,4 @@ public class Measure extends RealmObject { private int timingAdvance; private boolean submitted; private boolean neighbor; - - @Override - public void removeFromRealm() { - getGpsLocation().removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java index 249c9a9ea..38e804f7b 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java @@ -20,10 +20,4 @@ public class SmsData extends RealmObject { private int locationAreaCode; private int cellId; private String radioAccessTechnology; - - @Override - public void removeFromRealm() { - gpsLocation.removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/receiver/BootCompletedReceiver.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/receiver/BootCompletedReceiver.java index 9523b244f..0740f6908 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/receiver/BootCompletedReceiver.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/receiver/BootCompletedReceiver.java @@ -10,15 +10,13 @@ import android.content.Intent; import android.content.SharedPreferences; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; - import com.secupwn.aimsicd.R; import com.secupwn.aimsicd.service.AimsicdService; -public class BootCompletedReceiver extends BroadcastReceiver { +import lombok.extern.slf4j.Slf4j; - private final Logger log = AndroidLogger.forClass(BootCompletedReceiver.class); +@Slf4j +public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/RilExecutor.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/RilExecutor.java index 34fe9003b..2638f75c0 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/RilExecutor.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/RilExecutor.java @@ -22,16 +22,14 @@ import java.util.List; import java.util.Queue; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /* * Class to handle Ril and Samsung MultiRil implementation. Used by the Aimsicd Service. */ +@Slf4j public class RilExecutor { - private final Logger log = AndroidLogger.forClass(RilExecutor.class); - public boolean mMultiRilCompatible; /* @@ -80,7 +78,7 @@ public RilExecutor(Context context) { mRilExecutorDetectResult = mRequestExecutor.detect(); if (!mRilExecutorDetectResult.available) { mMultiRilCompatible = false; - log.error("Samsung Multiclient RIL not available: " + mRilExecutorDetectResult.error); + log.error("Samsung Multiclient RIL not available: {}", mRilExecutorDetectResult.error); mRequestExecutor = null; } else { mRequestExecutor.start(); @@ -260,7 +258,7 @@ public boolean handleMessage(Message msg) { break; } if (result.result == null) { - log.verbose("No need to refresh"); + log.debug("No need to refresh"); break; } if (lastKeyStep.captureResponse) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/SamsungMulticlientRilExecutor.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/SamsungMulticlientRilExecutor.java index 509a86638..1d69da0c9 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/SamsungMulticlientRilExecutor.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/rilexecutor/SamsungMulticlientRilExecutor.java @@ -30,12 +30,11 @@ import java.util.Random; import java.util.concurrent.atomic.AtomicBoolean; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class SamsungMulticlientRilExecutor implements OemRilExecutor { - private final Logger log = AndroidLogger.forClass(SamsungMulticlientRilExecutor.class); private static final String MULTICLIENT_SOCKET = "Multiclient"; private static final int RIL_REQUEST_OEM_RAW = 59; private static final int RIL_REQUEST_OEM_STRINGS = 60; @@ -157,7 +156,7 @@ public LocalSocketThread(String socketPath) { public void cancel() { if (DBG) { - log.verbose("SamsungMulticlientRil cancel()"); + log.debug("SamsungMulticlientRil cancel()"); } synchronized (this) { mCancelRequested.set(true); @@ -186,7 +185,7 @@ public synchronized void invokeOemRilRequestRaw(byte[] data, Message response) byte req[] = marshallRequest(token, data); if (DBG) { - log.verbose(String.format("InvokeOemRilRequestRaw() token: 0x%X, header: %s, req: %s ", + log.debug(String.format("InvokeOemRilRequestRaw() token: 0x%X, header: %s, req: %s ", token, HexDump.toHexString(getHeader(req)), HexDump.toHexString(req)) ); } @@ -216,7 +215,7 @@ public synchronized void invokeOemRilRequestStrings(String strings[], Message re byte[] req = marshallRequest(token, strings); if (DBG) { - log.verbose(String.format("InvokeOemRilRequestStrings() token: 0x%X, header: %s, req: %s ", + log.debug(String.format("InvokeOemRilRequestStrings() token: 0x%X, header: %s, req: %s ", token, HexDump.toHexString(getHeader(req)), HexDump.toHexString(req))); } @@ -258,7 +257,7 @@ private byte[] marshallRequest(int token, String strings[]) { public synchronized void disconnect() { if (DBG) { - log.verbose("Local disconnect()"); + log.debug("Local disconnect()"); } if (mSocket == null) { @@ -325,7 +324,7 @@ public void run() { rcvd = mInputStream.read(buf, endpos, buf.length - endpos); if (rcvd < 0) { if (DBG) { - log.verbose("EOF reached"); + log.debug("EOF reached"); } break; } @@ -336,7 +335,7 @@ public void run() { int msgLen = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | (buf[3] & 0xff); if (msgLen + 4 > buf.length) { - log.error("Message to big. Length: " + msgLen); + log.error("Message to big. Length: {}", msgLen); endpos = 0; continue; } @@ -364,8 +363,7 @@ private synchronized void processRxPacket(byte data[], int pos, int length) { Parcel p; if (DBG) { - log.verbose("Received " + length + " bytes: " + - HexDump.toHexString(data, pos, length)); + log.debug("Received {} bytes: {}", length, HexDump.toHexString(data, pos, length)); } p = Parcel.obtain(); @@ -376,13 +374,13 @@ private synchronized void processRxPacket(byte data[], int pos, int length) { responseType = p.readInt(); switch (responseType) { case RESPONSE_UNSOLICITED: - log.verbose("Unsolicited response "); + log.debug("Unsolicited response "); break; case RESPONSE_SOLICITED: processSolicited(p); break; default: - log.verbose("Invalid response type: " + responseType); + log.debug("Invalid response type: {}", responseType); break; } } finally { @@ -401,7 +399,7 @@ private int processSolicited(Parcel p) { int err = p.readInt(); if (DBG) { - log.verbose(String.format(": processSolicited() token: 0x%X err: %d", token, err)); + log.debug(String.format(": processSolicited() token: 0x%X err: %d", token, err)); } if (err != RIL_CLIENT_ERR_SUCCESS) { @@ -435,7 +433,7 @@ private int processSolicited(Parcel p) { m.sendToTarget(); } } else { - log.info("Message with token " + token + " not found"); + log.info("Message with token {} not found", token); } } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/AimsicdService.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/AimsicdService.java index 69c1f82fd..e63edb8a9 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/AimsicdService.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/AimsicdService.java @@ -48,23 +48,20 @@ import com.secupwn.aimsicd.utils.Cell; import com.secupwn.aimsicd.utils.GeoLocation; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.app.InjectionService; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * This starts the (background?) AIMSICD service to check for SMS and track * cells with or without GPS enabled. */ +@Slf4j public class AimsicdService extends InjectionService { public static boolean isGPSchoiceChecked; public static final String GPS_REMEMBER_CHOICE = "remember choice"; SharedPreferences gpsPreferences; - @Inject - private Logger log; - // /data/data/com.SecUpwN.AIMSICD/shared_prefs/com.SecUpwN.AIMSICD_preferences.xml public static final String SHARED_PREFERENCES_BASENAME = "com.SecUpwN.AIMSICD_preferences"; public static final String UPDATE_DISPLAY = "UPDATE_DISPLAY"; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java index 656679faa..d11c31b77 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java @@ -30,7 +30,6 @@ import com.secupwn.aimsicd.AndroidIMSICatcherDetector; import com.secupwn.aimsicd.BuildConfig; import com.secupwn.aimsicd.R; -import com.secupwn.aimsicd.utils.RealmHelper; import com.secupwn.aimsicd.enums.Status; import com.secupwn.aimsicd.ui.activities.MainActivity; import com.secupwn.aimsicd.utils.Cell; @@ -38,6 +37,7 @@ import com.secupwn.aimsicd.utils.DeviceApi18; import com.secupwn.aimsicd.utils.Helpers; import com.secupwn.aimsicd.utils.Icon; +import com.secupwn.aimsicd.utils.RealmHelper; import com.secupwn.aimsicd.utils.TinyDB; import java.util.ArrayList; @@ -45,11 +45,10 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import lombok.Cleanup; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; /** * Description: Class to handle tracking of cell information @@ -75,11 +74,9 @@ * * [x] Use TinyDB.java to simplify Shared Preferences usage */ - +@Slf4j public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeListener { - private final Logger log = AndroidLogger.forClass(CellTracker.class); - @Getter public static Cell monitorCell; public static String OCID_API_KEY = null; // see getOcidKey() @@ -118,6 +115,7 @@ public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeLi private boolean changedLAC; private boolean cellIdNotInOpenDb; private boolean typeZeroSmsDetected; + private boolean emptyNeighborCellsList; private boolean vibrateEnabled; private int vibrateMinThreatLevel; private LinkedBlockingQueue neighboringCellBlockingQueue; @@ -363,14 +361,14 @@ public List updateNeighboringCells() { // TODO: Consider removing ?? for (int i = 0; i < 10 && neighboringCellInfo.size() == 0; i++) { try { - log.debug("NeighboringCellInfo empty: trying " + i); + log.debug("NeighboringCellInfo empty: trying {}", i); NeighboringCellInfo info = neighboringCellBlockingQueue.poll(1, TimeUnit.SECONDS); if (info == null) { neighboringCellInfo = tm.getNeighboringCellInfo(); if (neighboringCellInfo != null) { if (neighboringCellInfo.size() > 0) { // Can we think of a better log message here? - log.debug("NeighboringCellInfo found on " + i + " try. (time based)"); + log.debug("NeighboringCellInfo found on {} try. (time based)", i); break; } else { continue; @@ -395,11 +393,7 @@ public List updateNeighboringCells() { // Add NC list to DBi_measure:nc_list for (NeighboringCellInfo neighborCell : neighboringCellInfo) { - log.info("NeighboringCellInfo -" + - " LAC:" + neighborCell.getLac() + - " CID:" + neighborCell.getCid() + - " PSC:" + neighborCell.getPsc() + - " RSSI:" + neighborCell.getRssi()); + log.info("NeighboringCellInfo - LAC:{} CID:{} PSC:{} RSSI:{}", neighborCell.getLac(), neighborCell.getCid(), neighborCell.getPsc(), neighborCell.getRssi()); final Cell cell = new Cell( neighborCell.getCid(), @@ -447,30 +441,38 @@ public List updateNeighboringCells() { public void checkForNeighborCount(CellLocation location) { log.info("CheckForNeighborCount()"); - Integer ncls = 0; // NC list size + emptyNeighborCellsList = false; + + Integer neighborCellsCount = 0; if (tm != null && tm.getNeighboringCellInfo() != null) { // See # 383 - ncls = tm.getNeighboringCellInfo().size(); + neighborCellsCount = tm.getNeighboringCellInfo().size(); } - Boolean nclp = tinydb.getBoolean("nc_list_present"); // NC list present? (default is false) - - if (ncls > 0) { - log.debug("NeighboringCellInfo size: " + ncls); - if (!nclp) { - log.debug("Setting nc_list_present to: true"); - tinydb.putBoolean("nc_list_present", true); + + // NC list present for that network type? (default is false) + String ncListVariableByType = "nc_list_present_" + tm.getNetworkType(); + Boolean nclSupportedByNetwork = tinydb.getBoolean(ncListVariableByType); + + if (neighborCellsCount > 0) { + log.debug("NeighboringCellInfo size: {}", neighborCellsCount); + if (!nclSupportedByNetwork) { + log.debug("Setting {} to: true", ncListVariableByType); + tinydb.putBoolean(ncListVariableByType, true); } - } else if (ncls == 0 && nclp) { + } else if (neighborCellsCount == 0 && nclSupportedByNetwork) { // Detection 7a - log.info("ALERT: No neighboring cells detected for CID: " + device.cell.getCellId()); - vibrate(100, Status.MEDIUM); + log.info("ALERT: No neighboring cells detected for CID: {}", device.cell.getCellId()); + + emptyNeighborCellsList = true; + @Cleanup Realm realm = Realm.getDefaultInstance(); dbHelper.toEventLog(realm, 4, "No neighboring cells detected"); // (DF_id, DF_desc) } else { // Todo: remove cid string when working. - log.debug("NC list not supported by AOS on this device. Nothing to do."); - log.debug(": Setting nc_list_present to: false"); - tinydb.putBoolean("nc_list_present", false); + log.debug("NC list not supported by this networkn type or not supported by AOS on this device. Nothing to do."); + log.debug("Setting {} to: false", ncListVariableByType); + tinydb.putBoolean(ncListVariableByType, false); } + setNotification(); } /** @@ -551,7 +553,7 @@ public void compareLac(CellLocation location) { if (!dbHelper.openCellExists(realm, monitorCell.getCellId())) { dbHelper.toEventLog(realm, 2, "CID not in Import realm"); - log.info("ALERT: Connected to unknown CID not in Import realm: " + monitorCell.getCellId()); + log.info("ALERT: Connected to unknown CID not in Import realm: {}", monitorCell.getCellId()); vibrate(100, Status.MEDIUM); cellIdNotInOpenDb = true; @@ -953,6 +955,9 @@ void setNotification() { } else if (changedLAC) { getApplication().setCurrentStatus(Status.MEDIUM, vibrateEnabled, vibrateMinThreatLevel); contentText = context.getString(R.string.hostile_service_area_changing_lac_detected); + } else if (emptyNeighborCellsList) { + getApplication().setCurrentStatus(Status.MEDIUM, vibrateEnabled, vibrateMinThreatLevel); + contentText = context.getString(R.string.cell_doesnt_provide_any_neighbors); } else if (cellIdNotInOpenDb) { getApplication().setCurrentStatus(Status.MEDIUM, vibrateEnabled, vibrateMinThreatLevel); contentText = context.getString(R.string.cell_id_doesnt_exist_in_db); @@ -993,11 +998,10 @@ void setNotification() { //Append changing LAC text contentText = context.getString(R.string.hostile_service_area_changing_lac_detected); tickerText += " - " + contentText; - // See #264 and ask He3556 - //} else if (mNoNCList) { - // tickerText += " - BTS doesn't provide any neighbors!"; - // contentText = "CID: " + cellid + " is not providing a neighboring cell list!"; - + } else if (emptyNeighborCellsList) { + //According to #264 + contentText = context.getString(R.string.cell_doesnt_provide_any_neighbors); + tickerText += " - " + contentText; } else if (cellIdNotInOpenDb) { //Append Cell ID not existing in external db text contentText = context.getString(R.string.cell_id_doesnt_exist_in_db); @@ -1105,7 +1109,7 @@ public void stopTrackingFemto() { tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); trackingFemtocell = false; setNotification(); - log.verbose(context.getString(R.string.stopped_tracking_femtocell)); + log.debug(context.getString(R.string.stopped_tracking_femtocell)); } } @@ -1153,11 +1157,11 @@ private boolean IsConnectedToCdmaFemto(ServiceState s) { return !((networkID < FEMTO_NID_MIN) || (networkID >= FEMTO_NID_MAX)); } else { - log.verbose("Cell location info is null."); + log.debug("Cell location info is null."); return false; } } else { - log.verbose("Telephony Manager is null."); + log.debug("Telephony Manager is null."); return false; } } else { /* if it is an evDo network */ @@ -1172,11 +1176,11 @@ private boolean IsConnectedToCdmaFemto(ServiceState s) { int FEMTO_NID_MIN = 0xfa; return !((networkID < FEMTO_NID_MIN) || (networkID >= FEMTO_NID_MAX)); } else { - log.verbose("Cell location info is null."); + log.debug("Cell location info is null."); return false; } } else { - log.verbose("Telephony Manager is null."); + log.debug("Telephony Manager is null."); return false; } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/LocationTracker.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/LocationTracker.java index b90372155..805fb4ca7 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/LocationTracker.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/LocationTracker.java @@ -21,17 +21,16 @@ import com.secupwn.aimsicd.utils.RealmHelper; import com.secupwn.aimsicd.utils.TruncatedLocation; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; /** * Class to handle GPS location tracking */ +@Slf4j public final class LocationTracker { - private final Logger log = AndroidLogger.forClass(LocationTracker.class); // how long with no movement detected, before we assume we are not moving public static final long MOVEMENT_THRESHOLD_MS = 20 * 1000; @@ -132,7 +131,7 @@ public GeoLocation lastKnownLocation() { try { Cell cell = context.getCell(); if (cell != null) { - log.debug("Looking up MCC " + cell.getMobileCountryCode()); + log.debug("Looking up MCC {}", cell.getMobileCountryCode()); @Cleanup Realm realm = Realm.getDefaultInstance(); GpsLocation defLoc = mDbHelper.getDefaultLocation(realm, cell.getMobileCountryCode()); @@ -147,7 +146,7 @@ public GeoLocation lastKnownLocation() { } if (loc != null) { - log.info("Last known location " + loc.toString()); + log.info("Last known location {}", loc.toString()); } return loc; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/SignalStrengthTracker.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/SignalStrengthTracker.java index 3355b0f0e..26e280561 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/SignalStrengthTracker.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/SignalStrengthTracker.java @@ -11,10 +11,9 @@ import java.util.HashMap; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; /** * Description: Class that calculates cell signal strength averages and decides if a @@ -42,10 +41,9 @@ * This means that the SQL query will be a little more complicated. * @author Tor Henning Ueland */ +@Slf4j public class SignalStrengthTracker { - private final Logger log = AndroidLogger.forClass(SignalStrengthTracker.class); - private static int sleepTimeBetweenSignalRegistration = 60; // [seconds] private static int minimumIdleTime = 30; // [seconds] private static int maximumNumberOfDaysSaved = 60; // [days] = 2 months @@ -83,15 +81,13 @@ public void registerSignalStrength(int cellID, int signalStrength) { long now = System.currentTimeMillis(); // [ms] if (deviceIsMoving()) { - log.info("Ignored signal sample for CID: " + cellID + - " due to device movement. Waiting for " + ((minimumIdleTime * 1000) - (now - lastMovementDetected)) + " ms."); + log.info("Ignored signal sample for CID: {} due to device movement. Waiting for {} ms.", cellID, (minimumIdleTime * 1000) - (now - lastMovementDetected)); return; } if (now - (sleepTimeBetweenSignalRegistration * 1000) > lastRegistrationTime) { long diff = now - lastRegistrationTime; - log.info("Scheduling signal strength calculation from CID: " + cellID + - " @ " + signalStrength + " dBm. Last registration was " + diff + "ms ago."); + log.info("Scheduling signal strength calculation from CID: {} @ {} dBm. Last registration was {}ms ago.", cellID, signalStrength, diff); lastRegistrationTime = now; //mDbHelper.addSignalStrength(cellID, signalStrength, String.valueOf(System.currentTimeMillis())); @@ -134,7 +130,7 @@ public boolean isMysterious(int cellID, int signalStrength) { // If moving, return false if (deviceIsMoving()) { - log.info("Cannot check signal strength for CID: " + cellID + " because of device movements."); + log.info("Cannot check signal strength for CID: {} because of device movements.", cellID); return false; } @@ -143,13 +139,13 @@ public boolean isMysterious(int cellID, int signalStrength) { // Cached? if (averageSignalCache.get(cellID) != null) { storedAvg = averageSignalCache.get(cellID); - log.debug("Cached average SS for CID: " + cellID + " is: " + storedAvg); + log.debug("Cached average SS for CID: {} is: {}", cellID, storedAvg); } else { // Not cached, check DB @Cleanup Realm realm = Realm.getDefaultInstance(); storedAvg = mDbHelper.getAverageSignalStrength(realm, cellID); averageSignalCache.put(cellID, storedAvg); - log.debug("Average SS in DB for CID: " + cellID + " is: " + storedAvg); + log.debug("Average SS in DB for CID: {} is: {}", cellID, storedAvg); } boolean result; @@ -158,8 +154,7 @@ public boolean isMysterious(int cellID, int signalStrength) { } else { result = signalStrength - storedAvg > mysteriousSignalDifference; } - log.debug("Signal Strength mystery check for CID: " + cellID + - " is " + result + ", avg:" + storedAvg + ", this signal: " + signalStrength); + log.debug("Signal Strength mystery check for CID: {} is {}, avg:{}, this signal: {}", cellID, result, storedAvg, signalStrength); return result; } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java index 5d7956a8f..9c6a16f3b 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java @@ -21,20 +21,15 @@ import com.secupwn.aimsicd.data.adapter.DetectionStringAdapter; import com.secupwn.aimsicd.data.model.SmsDetectionString; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.app.InjectionAppCompatActivity; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import io.realm.RealmResults; @XmlLayout(R.layout.activity_advanced_user) public class AdvancedUserActivity extends InjectionAppCompatActivity { - @Inject - private Logger log; - @InjectView(R.id.listView_Adv_Activity) private ListView listViewAdv; @@ -55,9 +50,9 @@ protected void onCreate(Bundle savedInstanceState) { realm = Realm.getDefaultInstance(); - RealmResults msgItems = realm.allObjects(SmsDetectionString.class); + RealmResults msgItems = realm.where(SmsDetectionString.class).findAllAsync(); - listViewAdv.setAdapter(new DetectionStringAdapter(this, msgItems, true)); + listViewAdv.setAdapter(new DetectionStringAdapter(msgItems)); listViewAdv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override @@ -69,7 +64,7 @@ public boolean onItemLongClick(AdapterView a, View v, int position, long id) realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { - detectionString.removeFromRealm(); + detectionString.deleteFromRealm(); } }); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java index 4dd5170ce..fdef6bfef 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java @@ -19,12 +19,9 @@ import com.secupwn.aimsicd.data.model.SmsData; import com.secupwn.aimsicd.utils.RealmHelper; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.app.InjectionAppCompatActivity; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import io.realm.RealmResults; @@ -33,9 +30,6 @@ @XmlLayout(R.layout.activity_advanced_sms_user) public class AdvancedUserSmsActivity extends InjectionAppCompatActivity { - @Inject - private final Logger log = AndroidLogger.forClass(AdvancedUserSmsActivity.class); - @InjectView(R.id.listView_Adv_Sms_Activity) ListView listViewAdv; @@ -50,9 +44,9 @@ protected void onCreate(Bundle savedInstanceState) { realm = Realm.getDefaultInstance(); dbaccess = new RealmHelper(getApplicationContext()); - RealmResults msgitems = realm.where(SmsData.class).findAllSorted("timestamp"); + RealmResults msgitems = realm.where(SmsData.class).findAllSortedAsync("timestamp"); - listViewAdv.setAdapter(new SmsDataAdapter(getApplicationContext(), msgitems, true)); + listViewAdv.setAdapter(new SmsDataAdapter(msgitems)); listViewAdv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override @@ -62,7 +56,7 @@ public boolean onItemLongClick(AdapterView a, View v, int position, long id) realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { - smsData.removeFromRealm(); + smsData.deleteFromRealm(); } }); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java index 3add39f74..dfdaa5d72 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java @@ -17,11 +17,11 @@ import com.secupwn.aimsicd.R; import com.secupwn.aimsicd.data.model.GpsLocation; -import com.secupwn.aimsicd.utils.RealmHelper; import com.secupwn.aimsicd.data.model.SmsData; import com.secupwn.aimsicd.data.model.SmsDetectionString; import com.secupwn.aimsicd.service.AimsicdService; import com.secupwn.aimsicd.utils.MiscUtils; +import com.secupwn.aimsicd.utils.RealmHelper; import java.io.BufferedReader; import java.io.DataOutputStream; @@ -31,11 +31,10 @@ import java.util.Date; import java.util.List; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import lombok.Cleanup; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; /** * Description: Detects mysterious SMS by scraping Logcat entries. @@ -66,10 +65,9 @@ * * @author Paul Kinsella @banjaxbanjo */ +@Slf4j public final class SmsDetector extends Thread { - private final Logger log = AndroidLogger.forClass(SmsDetector.class); - private AimsicdService mAIMSICDService; private boolean mBound; private RealmHelper mDbAdapter; @@ -251,7 +249,7 @@ private int checkForSms(String line) { //0 - null 1 = TYPE0, 2 = MWI, 3 = WAPPUSH - for (SmsDetectionString detectionString : realm.allObjects(SmsDetectionString.class)) { + for (SmsDetectionString detectionString : realm.where(SmsDetectionString.class).findAll()) { //looping through detection strings to see does logcat line match if (line.contains(detectionString.getDetectionString())) { if ("TYPE0".equalsIgnoreCase(detectionString.getSmsType())) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/BaseActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/BaseActivity.java index e0ac77beb..d5f4b0de2 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/BaseActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/BaseActivity.java @@ -17,20 +17,17 @@ import com.secupwn.aimsicd.service.AimsicdService; import com.secupwn.aimsicd.utils.Icon; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.app.InjectionAppCompatActivity; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * Base activity class, handles code that is shared between all activities * * @author Tor Henning Ueland */ +@Slf4j public abstract class BaseActivity extends InjectionAppCompatActivity { - @Inject - protected Logger log; - /** * Triggered when GUI is opened */ @@ -49,7 +46,7 @@ protected void onResume() { private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - log.debug("StatusWatcher received status change to " + ((AndroidIMSICatcherDetector) getApplication()).getStatus().name() + ", updating icon"); + log.debug("StatusWatcher received status change to {}, updating icon", ((AndroidIMSICatcherDetector) getApplication()).getStatus().name()); updateIcon(context); } }; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/DebugLogs.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/DebugLogs.java index 3fa69b09f..e89f837bf 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/DebugLogs.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/DebugLogs.java @@ -23,11 +23,10 @@ import java.io.IOException; import java.io.InputStreamReader; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.annotation.XmlMenu; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * Description: This class is providing for the Debug log feature in the swipe menu. @@ -52,13 +51,11 @@ * * TODO: [ ] We should add an XPrivacy button (or automatic) to add XPrivacy filters when used. */ +@Slf4j @XmlLayout(R.layout.activity_debug_logs) @XmlMenu(R.menu.activity_debug_logs) public class DebugLogs extends BaseActivity { - @Inject - private Logger log; - private LogUpdaterThread logUpdater = null; private boolean updateLogs = true; private boolean isRadioLogs = true; // Including this, should be a toggle. diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java index 2add05637..45bb9fd1d 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java @@ -53,6 +53,9 @@ import java.util.List; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class MainActivity extends BaseActivity implements AsyncResponse { private boolean mBound; @@ -79,6 +82,8 @@ public class MainActivity extends BaseActivity implements AsyncResponse { private DrawerMenuActivityConfiguration mNavConf; + private static final int ACTIVITY_RESULT_SELECT_CELLTOWERS = 1; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -255,13 +260,18 @@ void selectDrawerItem(int position) { } else if (selectedItem.getId() == DrawerMenu.ID.APPLICATION.DOWNLOAD_LOCAL_BTS_DATA) { downloadBtsDataIfApiKeyAvailable(); + } else if (selectedItem.getId() == DrawerMenu.ID.APPLICATION.IMPORT_CELL_TOWERS_DATA) { + Intent pickFileIntent = new Intent(Intent.ACTION_GET_CONTENT); + pickFileIntent.setType("*/*"); + pickFileIntent.addCategory(Intent.CATEGORY_OPENABLE); + startActivityForResult(pickFileIntent, ACTIVITY_RESULT_SELECT_CELLTOWERS); } else if (selectedItem.getId() == DrawerMenu.ID.APPLICATION.QUIT) { try { if (mAimsicdService.isSmsTracking()) { mAimsicdService.stopSmsTracking(); } } catch (Exception ee) { - log.warn("Exception in smstracking module: " + ee.getMessage()); + log.warn("Exception in smstracking module: {}", ee.getMessage()); } if (mAimsicdService != null) { @@ -281,6 +291,17 @@ void selectDrawerItem(int position) { } } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == ACTIVITY_RESULT_SELECT_CELLTOWERS) { + if (resultCode == RESULT_OK) { + log.debug("Chosen file: {}", data.getDataString()); + importCellTowersData(data.getData()); + } + } + } + private void openFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); @@ -301,7 +322,7 @@ private void downloadBtsDataIfApiKeyAvailable() { cell.setMobileCountryCode(mcc); int mnc = Integer.parseInt(networkOperator.substring(3)); cell.setMobileNetworkCode(mnc); - log.debug("CELL:: mobileCountryCode=" + mcc + " mobileNetworkCode=" + mnc); + log.debug("CELL:: mobileCountryCode={} mobileNetworkCode={}", mcc, mnc); } @@ -332,9 +353,36 @@ private void downloadBtsDataIfApiKeyAvailable() { } } + private void importCellTowersData(Uri importFile) { + + Cell cell = new Cell(); + TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + String networkOperator = tm.getNetworkOperator(); + + if (networkOperator != null && !networkOperator.isEmpty()) { + int mcc = Integer.parseInt(networkOperator.substring(0, 3)); + cell.setMobileCountryCode(mcc); + int mnc = Integer.parseInt(networkOperator.substring(3)); + cell.setMobileNetworkCode(mnc); + log.debug("CELL:: mobileCountryCode={} mobileNetworkCode={}", mcc, mnc); + } + + GeoLocation loc = mAimsicdService.lastKnownLocation(); + if (loc != null) { + Helpers.msgLong(this, getString(R.string.imporing_celltowers_data)); + + cell.setLon(loc.getLongitudeInDegrees()); + cell.setLat(loc.getLatitudeInDegrees()); + Helpers.importCellTowersData(this, cell, importFile, mAimsicdService); + + } else { + Helpers.msgShort(this, getString(R.string.needs_location)); + } + } + @Override public void processFinish(float[] location) { - log.info("processFinish - location[0]=" + location[0] + " location[1]=" + location[1]); + log.info("processFinish - location[0]={} location[1]={}", location[0], location[1]); if (Float.floatToRawIntBits(location[0]) == 0 @@ -351,7 +399,7 @@ public void processFinish(List cells) { if (cells != null) { if (!cells.isEmpty()) { for (Cell cell : cells) { - log.info("processFinish - Cell =" + cell.toString()); + log.info("processFinish - Cell ={}", cell.toString()); if (cell.isValid()) { mAimsicdService.setCell(cell); Intent intent = new Intent(AimsicdService.UPDATE_DISPLAY); @@ -534,7 +582,7 @@ public void onBackPressed() { mAimsicdService.stopSmsTracking(); } } catch (Exception ee) { - log.error("Error: Stopping SMS detection : " + ee.getMessage()); + log.error("Error: Stopping SMS detection : {}", ee.getMessage()); } finish(); } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java index 86e3a2f67..48ccc233e 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java @@ -56,14 +56,13 @@ import java.util.LinkedList; import java.util.List; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.annotation.XmlMenu; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import io.realm.RealmResults; import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; /** * Description: TODO: add details @@ -87,12 +86,11 @@ * https://github.com/osmdroid/osmdroid/issues/81 * https://code.google.com/p/osmbonuspack/issues/detail?id=102 */ +@Slf4j @XmlLayout(R.layout.activity_map_viewer) @XmlMenu(R.menu.activity_map_viewer) public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPreferenceChangeListener { - @Inject - private Logger log; public static final String updateOpenCellIDMarkers = "update_open_cell_markers"; @InjectView(R.id.mapview) @@ -102,7 +100,7 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre private AimsicdService mAimsicdService; private boolean mBound; - private GeoPoint loc = null; + private GeoPoint mLatestCellLoc = null; private MyLocationNewOverlay mMyLocationOverlay; private CompassOverlay mCompassOverlay; @@ -171,6 +169,7 @@ public void onResume() { if (mMyLocationOverlay != null) { mMyLocationOverlay.enableMyLocation(); + mMyLocationOverlay.enableFollowLocation(); } } @@ -201,6 +200,7 @@ protected void onPause() { if (mMyLocationOverlay != null) { mMyLocationOverlay.disableMyLocation(); + mMyLocationOverlay.disableFollowLocation(); } } @@ -209,7 +209,7 @@ protected void onPause() { public void onReceive(Context context, Intent intent) { loadEntries(); if (BuildConfig.DEBUG && mCellTowerGridMarkerClusterer != null && mCellTowerGridMarkerClusterer.getItems() != null) { - log.verbose("mMessageReceiver CellTowerMarkers.invalidate() markers.size():" + mCellTowerGridMarkerClusterer.getItems().size()); + log.debug("mMessageReceiver CellTowerMarkers.invalidate() markers.size():{}", mCellTowerGridMarkerClusterer.getItems().size()); } } @@ -283,28 +283,37 @@ private void setupMapType(int mapType) { */ private void setUpMapIfNeeded() { + mMap.getOverlayManager().clear(); // Check if we were successful in obtaining the map. mMap.setBuiltInZoomControls(true); mMap.setMultiTouchControls(true); mMap.setMinZoomLevel(3); mMap.setMaxZoomLevel(19); // Latest OSM can go to 21! mMap.getTileProvider().createTileCache(); - mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this), mMap); + + if (mCompassOverlay == null) { + mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this), mMap); + } ScaleBarOverlay mScaleBarOverlay = new ScaleBarOverlay(this); mScaleBarOverlay.setScaleBarOffset(getResources().getDisplayMetrics().widthPixels / 2, 10); mScaleBarOverlay.setCentred(true); // Sets cluster pin color - mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(MapViewerOsmDroid.this); - BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); - mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + if (mCellTowerGridMarkerClusterer == null) { + mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(MapViewerOsmDroid.this); + BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); + mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + } - GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(MapViewerOsmDroid.this.getBaseContext()); - gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates - gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates - mMyLocationOverlay = new MyLocationNewOverlay(MapViewerOsmDroid.this.getBaseContext(), gpsMyLocationProvider, mMap); - mMyLocationOverlay.setDrawAccuracyEnabled(true); + if (mMyLocationOverlay == null) { + GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(MapViewerOsmDroid.this.getBaseContext()); + gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates + gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates + + mMyLocationOverlay = new MyLocationNewOverlay(MapViewerOsmDroid.this.getBaseContext(), gpsMyLocationProvider, mMap); + mMyLocationOverlay.setDrawAccuracyEnabled(true); + } mMap.getOverlays().add(mCellTowerGridMarkerClusterer); mMap.getOverlays().add(mMyLocationOverlay); @@ -343,12 +352,12 @@ public boolean onOptionsItemSelected(MenuItem item) { } } - if (loc != null) { + if (mLatestCellLoc != null) { Helpers.msgLong(this, getString(R.string.contacting_opencellid_for_data)); Cell cell = new Cell(); - cell.setLat(loc.getLatitude()); - cell.setLon(loc.getLongitude()); + cell.setLat(mLatestCellLoc.getLatitude()); + cell.setLon(mLatestCellLoc.getLongitude()); setRefreshActionButtonState(true); TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, false); Helpers.getOpenCellData(this, cell, RequestTask.DBE_DOWNLOAD_REQUEST_FROM_MAP, mAimsicdService); @@ -382,7 +391,7 @@ protected GeoPoint doInBackground(Void... voids) { @Cleanup Realm realm = Realm.getDefaultInstance(); - RealmResults baseStations = realm.allObjects(BaseTransceiverStation.class); + RealmResults baseStations = realm.where(BaseTransceiverStation.class).findAll(); if (baseStations.size() > 0) { for (BaseTransceiverStation baseStation : baseStations) { if (isCancelled()) { @@ -413,16 +422,16 @@ protected GeoPoint doInBackground(Void... voids) { if (Double.doubleToRawLongBits(dLat) != 0 || Double.doubleToRawLongBits(dLng) != 0) { - loc = new GeoPoint(dLat, dLng); + mLatestCellLoc = new GeoPoint(dLat, dLng); CellTowerMarker ovm = new CellTowerMarker(MapViewerOsmDroid.this, mMap, "Cell ID: " + cellID, - "", loc, + "", mLatestCellLoc, new MarkerData( getApplicationContext(), String.valueOf(cellID), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(lac), String.valueOf(mcc), String.valueOf(mnc), @@ -473,15 +482,15 @@ public void run() { return null; } try { - loc = new GeoPoint(cell.getLat(), cell.getLon()); + mLatestCellLoc = new GeoPoint(cell.getLat(), cell.getLon()); CellTowerMarker ovm = new CellTowerMarker(MapViewerOsmDroid.this, mMap, getString(R.string.cell_id_label) + cell.getCellId(), - "", loc, + "", mLatestCellLoc, new MarkerData( getApplicationContext(), String.valueOf(cell.getCellId()), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(cell.getLocationAreaCode()), String.valueOf(cell.getMobileCountryCode()), String.valueOf(cell.getMobileNetworkCode()), @@ -512,32 +521,38 @@ public void run() { */ @Override protected void onPostExecute(GeoPoint defaultLoc) { - if (loc != null && (Double.doubleToRawLongBits(loc.getLatitude()) != 0 - && Double.doubleToRawLongBits(loc.getLongitude()) != 0)) { - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - if (mBound) { - // Try and find last known location and zoom there - GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); - if (lastLoc != null) { - loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), - lastLoc.getLongitudeInDegrees()); - - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - //Use MCC to move camera to an approximate location near Countries Capital - loc = defaultLoc; - - mMap.getController().setZoom(12); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } + boolean movedMap = false; + if (mBound) { + // Try and find last known location and zoom there + GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); + if (lastLoc != null) { + GeoPoint loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), + lastLoc.getLongitudeInDegrees()); + + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } + } + if (!movedMap) { + if (mLatestCellLoc != null && (Double.doubleToRawLongBits(mLatestCellLoc.getLatitude()) != 0 + && Double.doubleToRawLongBits(mLatestCellLoc.getLongitude()) != 0)) { + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(mLatestCellLoc.getLatitude(), mLatestCellLoc.getLongitude())); + movedMap = true; } } + if (!movedMap) { + //Use MCC to move camera to an approximate location near Countries Capital + GeoPoint loc = defaultLoc; + + mMap.getController().setZoom(12); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } if (mCellTowerGridMarkerClusterer != null) { if (BuildConfig.DEBUG && mCellTowerGridMarkerClusterer.getItems() != null) { - log.verbose("CellTowerMarkers.invalidate() markers.size():" + mCellTowerGridMarkerClusterer.getItems().size()); + log.debug("CellTowerMarkers.invalidate() markers.size():{}", mCellTowerGridMarkerClusterer.getItems().size()); } //Drawing markers of cell tower immediately as possible mCellTowerGridMarkerClusterer.invalidate(); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/OpenCellIdActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/OpenCellIdActivity.java index a9b3ad293..d70e427e0 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/OpenCellIdActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/OpenCellIdActivity.java @@ -21,20 +21,19 @@ import java.io.IOException; -import io.freefair.android.injection.annotation.Inject; +import io.freefair.injection.annotation.Inject; import io.freefair.android.injection.annotation.XmlLayout; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * Popup toast messages asking if user wants to download * new API key to access OpenCellId services and data. */ +@Slf4j @XmlLayout(R.layout.activity_open_cell_id) public class OpenCellIdActivity extends BaseActivity { private SharedPreferences prefs; - @Inject - private Logger log; private ProgressDialog pd; @Inject @@ -155,38 +154,38 @@ public String requestNewOCIDKey() throws IOException { String htmlResponse = response.body().string(); // For debugging HTTP server response and codes - log.debug("Response Html=" + htmlResponse + " Response Code=" + String.valueOf(responseCode)); + log.debug("Response Html={} Response Code={}", htmlResponse, String.valueOf(responseCode)); if (responseCode == 200) { - log.debug("OCID Code 1: Cell Not found: " + htmlResponse); + log.debug("OCID Code 1: Cell Not found: {}", htmlResponse); return htmlResponse; } else if (responseCode == 401) { - log.debug("OCID Code 2: Invalid API Key! :" + htmlResponse); + log.debug("OCID Code 2: Invalid API Key! :{}", htmlResponse); return htmlResponse; } else if (responseCode == 400) { - log.debug("OCID Code 3: Invalid input data: " + htmlResponse); + log.debug("OCID Code 3: Invalid input data: {}", htmlResponse); return "Bad Request"; // For making a toast! } else if (responseCode == 403) { - log.debug("OCID Code 4: Your API key must be white listed: " + htmlResponse); + log.debug("OCID Code 4: Your API key must be white listed: {}", htmlResponse); return "Bad Request"; // For making a toast! } else if (responseCode == 500) { - log.debug("OCID Code 5: Remote internal server error: " + htmlResponse); + log.debug("OCID Code 5: Remote internal server error: {}", htmlResponse); return "Bad Request"; // For making a toast! } else if (responseCode == 503) { - log.debug("OCID Code 6: Reached 24hr API key request limit: " + htmlResponse); + log.debug("OCID Code 6: Reached 24hr API key request limit: {}", htmlResponse); return htmlResponse; } else if (responseCode == 429) { - log.debug("OCID Code 7: Exceeded daily request limit (1000) for your API key: " + htmlResponse); + log.debug("OCID Code 7: Exceeded daily request limit (1000) for your API key: {}", htmlResponse); return htmlResponse; } else { - log.debug("OCID Returned Unknown Response: " + responseCode); + log.debug("OCID Returned Unknown Response: {}", responseCode); return null; } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java index 98b63ae87..301c60c5a 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java @@ -96,6 +96,7 @@ public DrawerMenuActivityConfiguration build() { //Section Application menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_APPLICATION, mContext.getString(R.string.application))); menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.DOWNLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.get_opencellid), R.drawable.stat_sys_download_anim0, false)); + menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.IMPORT_CELL_TOWERS_DATA, mContext.getString(R.string.import_cell_towers), R.drawable.stat_sys_download_anim0, false)); menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.UPLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.upload_bts), R.drawable.stat_sys_upload_anim0, false)); menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.QUIT, mContext.getString(R.string.quit), R.drawable.ic_action_remove, false)); mNavItems = menu; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java index 825106c5e..ed073cdf8 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java @@ -90,6 +90,9 @@ public int getHelpStringId() { case APPLICATION.DOWNLOAD_LOCAL_BTS_DATA: return R.string.help_app_download_local_bts; + case APPLICATION.IMPORT_CELL_TOWERS_DATA: + return R.string.help_app_import_cell_towers; + case APPLICATION.ADD_GET_OCID_API_KEY: return R.string.help_app_add_get_ocid_api_key; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/AtCommandFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/AtCommandFragment.java index 436350e39..6cc768c7c 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/AtCommandFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/AtCommandFragment.java @@ -32,11 +32,10 @@ import java.util.ArrayList; import java.util.List; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.app.InjectionFragment; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** @@ -61,12 +60,10 @@ * [ ] Need a "no" timeout to watch output for while, or let's make it 10 minutes. * Perhaps with a manual stop? */ +@Slf4j @XmlLayout(R.layout.activity_at_command) public class AtCommandFragment extends InjectionFragment { - @Inject - private Logger log; - //Return value constants private static final int SERIAL_INIT_OK = 100; private static final int SERIAL_INIT_ERROR = 101; @@ -207,7 +204,7 @@ private class btnClick implements View.OnClickListener { public void onClick(View v) { if (mAtCommand.getText() != null) { String command = mAtCommand.getText().toString(); - log.info("AT Command Detected: " + command); + log.info("AT Command Detected: {}", command); executeAT(); } } @@ -371,7 +368,7 @@ private void executeAT() { // We need a device-type check here, perhaps: gsm.version.ril-impl. Editable cmd = mAtCommand.getText(); if (cmd != null && cmd.length() != 0) { - log.debug("ExecuteAT: attempting to send: " + cmd.toString()); + log.debug("ExecuteAT: attempting to send: {}", cmd.toString()); if (getSerialDevice() != null) { mCommandTerminal.send(cmd.toString(), new Handler(Looper.getMainLooper()) { @@ -421,17 +418,17 @@ private void commandWait(Shell shell, Command cmd) throws Exception { Exception e = new Exception(); if (!shell.isExecuting && !shell.isReading) { - log.warn("Waiting for a command to be executed in a shell that is not executing and not reading! \n\n Command: " + cmd.getCommand()); + log.warn("Waiting for a command to be executed in a shell that is not executing and not reading! \n\n Command: {}", cmd.getCommand()); e.setStackTrace(Thread.currentThread().getStackTrace()); log.error(e.getMessage(), e); } else if (shell.isExecuting && !shell.isReading) { - log.error("Waiting for a command to be executed in a shell that is executing but not reading! \n\n Command: " + cmd.getCommand()); + log.error("Waiting for a command to be executed in a shell that is executing but not reading! \n\n Command: {}", cmd.getCommand()); e.setStackTrace(Thread.currentThread().getStackTrace()); log.error(e.getMessage(), e); } else { - log.error("Waiting for a command to be executed in a shell that is not reading! \n\n Command: " + cmd.getCommand()); + log.error("Waiting for a command to be executed in a shell that is not reading! \n\n Command: {}", cmd.getCommand()); e.setStackTrace(Thread.currentThread().getStackTrace()); log.error(e.getMessage(), e); } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java index 47bac58fb..b937406d7 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java @@ -28,7 +28,10 @@ import android.os.IBinder; import android.support.v4.widget.SwipeRefreshLayout; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TableRow; import android.widget.TextView; @@ -51,23 +54,22 @@ import io.freefair.android.injection.app.InjectionFragment; /** - * Description: This class updates the CellInfo fragment. This is also known as - * the Neighboring Cells info, which is using the MultiRilClient to - * show neighboring cells on the older Samsung Galaxy S2/3 series. - * It's refresh rate is controlled in the settings by: - * - * arrays.xml: - * pref_refresh_entries (the names) - * pref_refresh_values (the values in seconds) - * - * - * Dependencies: Seem that this is intimately connected to: CellTracker.java service... - * - * - * TODO: 1) Use an IF check, in order not to run the MultiRilClient on non supported devices - * as this will cause excessive logcat spam. - * TODO: 2) Might wanna make the refresh rate lower/higher depending on support - * + * Description: This class updates the CellInfo fragment. This is also known as + * the Neighboring Cells info, which is using the MultiRilClient to + * show neighboring cells on the older Samsung Galaxy S2/3 series. + * It's refresh rate is controlled in the settings by: + *

+ * arrays.xml: + * pref_refresh_entries (the names) + * pref_refresh_values (the values in seconds) + *

+ *

+ * Dependencies: Seem that this is intimately connected to: CellTracker.java service... + *

+ *

+ * TODO: 1) Use an IF check, in order not to run the MultiRilClient on non supported devices + * as this will cause excessive logcat spam. + * TODO: 2) Might wanna make the refresh rate lower/higher depending on support */ @XmlLayout(R.layout.fragment_cell_info) public class CellInfoFragment extends InjectionFragment implements SwipeRefreshLayout.OnRefreshListener { @@ -86,24 +88,11 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL @InjectView(R.id.list_view) private ListView lv; - @InjectView(R.id.neighboring_cells) - private TextView mNeighboringCells; - - @InjectView(R.id.neighboring_number) - private TextView mNeighboringTotal; - - @InjectView(R.id.neighboring_total) - private TableRow mNeighboringTotalView; - - @InjectView(R.id.ciphering_indicator_title) - private TextView mCipheringIndicatorLabel; - - @InjectView(R.id.ciphering_indicator) - private TextView mCipheringIndicator; - @InjectView(R.id.swipeRefreshLayout) private SwipeRefreshLayout swipeRefreshLayout; + private BaseInflaterAdapter mBaseInflaterAdapter; + private CellInfoAdapter mCellInfoAdapter; private final Runnable timerRunnable = new Runnable() { @@ -143,6 +132,10 @@ public void onResume() { public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + mBaseInflaterAdapter = new BaseInflaterAdapter<>(new CellCardInflater()); + mCellInfoAdapter = new CellInfoAdapter(mBaseInflaterAdapter, new CellInfoOverviewData()); + lv.setAdapter(mCellInfoAdapter); + mContext = getActivity().getBaseContext(); // Bind to LocalService Intent intent = new Intent(mContext, AimsicdService.class); @@ -198,8 +191,8 @@ public void setUserVisibleHint(boolean isVisibleToUser) { private void updateUI() { if (mBound && rilExecutor.mMultiRilCompatible) { - new CellAsyncTask().execute(SAMSUNG_MULTIRIL_REQUEST); - } else { + new CellAsyncTask().execute(SAMSUNG_MULTIRIL_REQUEST); + } else { new CellAsyncTask().execute(STOCK_REQUEST); } } @@ -210,9 +203,13 @@ void updateCipheringIndicator() { @Override public void run() { if (list != null) { - mCipheringIndicatorLabel.setVisibility(View.VISIBLE); - mCipheringIndicator.setVisibility(View.VISIBLE); - mCipheringIndicator.setText(TextUtils.join("\n", list)); + CellInfoOverviewData overviewData = new CellInfoOverviewData(); + overviewData.mCipheringIndicatorLabelVisibility = View.VISIBLE; + overviewData.mCipheringIndicatorVisibility = View.VISIBLE; + overviewData.mCipheringIndicator = TextUtils.join("\n", list); + if (mCellInfoAdapter != null) { + mCellInfoAdapter.updateCellInfoOverview(overviewData); + } } } }); @@ -228,21 +225,20 @@ boolean getStockNeighboringCells() { } void updateStockNeighboringCells() { - mNeighboringTotal.setText(String.valueOf(neighboringCells.size())); + CellInfoOverviewData overviewData = new CellInfoOverviewData(); + overviewData.mNeighboringTotal = neighboringCells.size(); + mBaseInflaterAdapter.clear(false); if (neighboringCells.size() != 0) { - - BaseInflaterAdapter adapter - = new BaseInflaterAdapter<>(new CellCardInflater()); int i = 1; int total = neighboringCells.size(); for (Cell cell : neighboringCells) { CardItemData data = new CardItemData(cell, i++ + " / " + total); - adapter.addItem(data, false); + mBaseInflaterAdapter.addItem(data, false); } - lv.setAdapter(adapter); - mNeighboringCells.setVisibility(View.GONE); - mNeighboringTotalView.setVisibility(View.VISIBLE); + overviewData.mNeighboringCellsVisibility = View.GONE; + overviewData.mNeighboringTotalViewVisibility = View.VISIBLE; } + mCellInfoAdapter.updateCellInfoOverview(overviewData); } void updateNeighboringCells() { @@ -251,9 +247,13 @@ void updateNeighboringCells() { @Override public void run() { if (list != null) { - mNeighboringCells.setText(TextUtils.join("\n", list)); - mNeighboringCells.setVisibility(View.VISIBLE); - mNeighboringTotalView.setVisibility(View.GONE); + CellInfoOverviewData overviewData = new CellInfoOverviewData(); + overviewData.mNeighboringCells = TextUtils.join("\n", list); + overviewData.mNeighboringCellsVisibility = View.VISIBLE; + overviewData.mNeighboringTotalViewVisibility = View.GONE; + if (mCellInfoAdapter != null) { + mCellInfoAdapter.updateCellInfoOverview(overviewData); + } } } }); @@ -291,4 +291,114 @@ protected void onPostExecute(Boolean result) { } } } + + class CellInfoAdapter extends BaseAdapter { + private final LayoutInflater mInflater; + private final BaseInflaterAdapter mCardItemDataAdapter; + private CellInfoOverviewData mOverview; + + CellInfoAdapter(BaseInflaterAdapter cardItemDataAdapter, + CellInfoOverviewData overview) { + mCardItemDataAdapter = cardItemDataAdapter; + mOverview = overview; + mInflater = (LayoutInflater) getActivity().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + } + + void updateCellInfoOverview(CellInfoOverviewData overview) { + mOverview = overview; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return mCardItemDataAdapter.getCount() + 1; + } + + @Override + public Object getItem(int pos) { + if (pos == 0) { + return null; + } else { + return mCardItemDataAdapter.getItem(pos + 1); + } + } + + @Override + public long getItemId(int pos) { + return pos - 1; + } + + @Override + public int getItemViewType(int pos) { + return pos == 0 ? 0 : 1; + } + + @Override + public int getViewTypeCount() { + return 2; + } + + @SuppressWarnings("WrongConstant") + @Override + public View getView(int pos, View convertView, ViewGroup parent) { + if (pos == 0) { + CellInfoOverviewHolder holder; + if (convertView == null) { + convertView = mInflater.inflate(R.layout.item_cell_info_overview, parent, false); + holder = new CellInfoOverviewHolder(convertView); + convertView.setTag(holder); + } else { + holder = (CellInfoOverviewHolder) convertView.getTag(); + } + if (mOverview.mNeighboringCellsVisibility != -1) { + holder.mNeighboringCells.setVisibility(mOverview.mNeighboringCellsVisibility); + holder.mNeighboringCells.setText(mOverview.mNeighboringCells); + } + if (mOverview.mNeighboringTotalViewVisibility != -1) { + holder.mNeighboringTotalView.setVisibility(mOverview.mNeighboringTotalViewVisibility); + holder.mNeighboringTotal.setText(String.valueOf(mOverview.mNeighboringTotal)); + } + if (mOverview.mCipheringIndicatorLabelVisibility != -1) { + holder.mCipheringIndicatorLabel.setVisibility(mOverview.mCipheringIndicatorLabelVisibility); + } + if (mOverview.mCipheringIndicatorVisibility != -1) { + holder.mCipheringIndicator.setVisibility(mOverview.mCipheringIndicatorVisibility); + holder.mCipheringIndicator.setText(mOverview.mCipheringIndicator); + } + return convertView; + } else { + return mCardItemDataAdapter.getView(pos - 1, convertView, parent); + } + } + } + + class CellInfoOverviewData { + String mNeighboringCells; + int mNeighboringCellsVisibility = -1; + + int mNeighboringTotal; + int mNeighboringTotalViewVisibility = -1; + + int mCipheringIndicatorLabelVisibility = -1; + + String mCipheringIndicator; + int mCipheringIndicatorVisibility = -1; + } + + class CellInfoOverviewHolder { + TextView mNeighboringCells; + TextView mNeighboringTotal; + TableRow mNeighboringTotalView; + TextView mCipheringIndicatorLabel; + TextView mCipheringIndicator; + + CellInfoOverviewHolder(View view) { + mNeighboringCells = (TextView) view.findViewById(R.id.neighboring_cells); + mNeighboringTotal = (TextView) view.findViewById(R.id.neighboring_number); + mNeighboringTotalView = (TableRow) view.findViewById(R.id.neighboring_total); + mCipheringIndicatorLabel = (TextView) view.findViewById(R.id.ciphering_indicator_title); + mCipheringIndicator = (TextView) view.findViewById(R.id.ciphering_indicator); + } + } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java index a86c525a0..4d1b590ee 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java @@ -9,17 +9,16 @@ import android.widget.Spinner; import com.secupwn.aimsicd.R; -import com.secupwn.aimsicd.data.model.BaseTransceiverStation; -import com.secupwn.aimsicd.utils.RealmHelper; import com.secupwn.aimsicd.adapters.DbViewerSpinnerAdapter; -import com.secupwn.aimsicd.data.adapter.MeasureAdapter; import com.secupwn.aimsicd.adapters.MeasuredCellStrengthAdapter; import com.secupwn.aimsicd.data.adapter.BaseStationAdapter; import com.secupwn.aimsicd.data.adapter.DefaultLocationAdapter; import com.secupwn.aimsicd.data.adapter.DetectionStringAdapter; import com.secupwn.aimsicd.data.adapter.EventAdapter; import com.secupwn.aimsicd.data.adapter.ImportAdapter; +import com.secupwn.aimsicd.data.adapter.MeasureAdapter; import com.secupwn.aimsicd.data.adapter.SmsDataAdapter; +import com.secupwn.aimsicd.data.model.BaseTransceiverStation; import com.secupwn.aimsicd.data.model.DefaultLocation; import com.secupwn.aimsicd.data.model.Event; import com.secupwn.aimsicd.data.model.Import; @@ -27,6 +26,7 @@ import com.secupwn.aimsicd.data.model.SmsData; import com.secupwn.aimsicd.data.model.SmsDetectionString; import com.secupwn.aimsicd.enums.StatesDbViewer; +import com.secupwn.aimsicd.utils.RealmHelper; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; @@ -81,31 +81,30 @@ public void onItemSelected(AdapterView parentView, View selectedItemView, fin } mTableSelected = (StatesDbViewer) selectedItem; - realm.refresh(); switch (position) { case 0: - setListAdapter(new BaseStationAdapter(getActivity(), realm.allObjects(BaseTransceiverStation.class), true)); + setListAdapter(new BaseStationAdapter(realm.where(BaseTransceiverStation.class).findAll())); break; case 1: - setListAdapter(new MeasureAdapter(getActivity(), realm.allObjects(Measure.class), true)); + setListAdapter(new MeasureAdapter(realm.where(Measure.class).findAll())); break; case 2: - setListAdapter(new ImportAdapter(getActivity(), realm.allObjects(Import.class), true)); + setListAdapter(new ImportAdapter(realm.where(Import.class).findAll())); break; case 3: - setListAdapter(new DefaultLocationAdapter(getActivity(), realm.allObjects(DefaultLocation.class), true)); + setListAdapter(new DefaultLocationAdapter(realm.where(DefaultLocation.class).findAll())); break; case 4: //Silent SMS - setListAdapter(new SmsDataAdapter(getActivity(), realm.allObjects(SmsData.class), true)); + setListAdapter(new SmsDataAdapter(realm.where(SmsData.class).findAll())); break; case 5: - setListAdapter(new MeasuredCellStrengthAdapter(getActivity(), realm.allObjects(Measure.class), true)); + setListAdapter(new MeasuredCellStrengthAdapter(realm.where(Measure.class).findAll())); break; case 6: - setListAdapter(new EventAdapter(getActivity(), realm.allObjects(Event.class), true)); + setListAdapter(new EventAdapter(realm.where(Event.class).findAll())); break; case 7: - setListAdapter(new DetectionStringAdapter(getActivity(), realm.allObjects(SmsDetectionString.class), true)); + setListAdapter(new DetectionStringAdapter(realm.where(SmsDetectionString.class).findAll())); break; default: throw new IllegalArgumentException("Unknown type of table"); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java index 27d545f0e..9002aec9f 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java @@ -19,14 +19,14 @@ import android.view.View; import android.widget.TableRow; +import com.kaichunlin.transition.animation.AnimationManager; import com.secupwn.aimsicd.R; import com.secupwn.aimsicd.service.AimsicdService; import com.secupwn.aimsicd.service.CellTracker; +import com.secupwn.aimsicd.ui.widget.HighlightTextView; import com.secupwn.aimsicd.utils.Cell; import com.secupwn.aimsicd.utils.Device; import com.secupwn.aimsicd.utils.Helpers; -import com.secupwn.aimsicd.ui.widget.HighlightTextView; -import com.kaichunlin.transition.animation.AnimationManager; import com.squareup.okhttp.Callback; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; @@ -37,18 +37,16 @@ import java.io.IOException; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.app.InjectionFragment; -import io.freefair.android.util.logging.Logger; +import io.freefair.injection.annotation.Inject; +import lombok.extern.slf4j.Slf4j; +@Slf4j @XmlLayout(R.layout.fragment_device) public class DeviceFragment extends InjectionFragment implements SwipeRefreshLayout.OnRefreshListener { - @Inject - private Logger log; - @Inject OkHttpClient okHttpClient; @@ -59,6 +57,70 @@ public class DeviceFragment extends InjectionFragment implements SwipeRefreshLay private boolean mBound; private Context mContext; + @InjectView(R.id.network_lac) + private HighlightTextView locationAreaCodeView; + + @InjectView(R.id.gsm_cellid) + private TableRow gsmCellIdTableRow; + + @InjectView(R.id.network_cellid) + private HighlightTextView cellIdView; + + @InjectView(R.id.cdma_netid) + private TableRow cdmaNetworkIdRow; + @InjectView(R.id.cdma_sysid) + private TableRow cdmaSystemIdRow; + @InjectView(R.id.cdma_baseid) + private TableRow cdmaBaseIdRow; + + @InjectView(R.id.network_netid) + private HighlightTextView networkIdView; + @InjectView(R.id.network_sysid) + private HighlightTextView systemIdView; + @InjectView(R.id.network_baseid) + private HighlightTextView baseIdView; + + @InjectView(R.id.lte_timing_advance) + private TableRow lteTimingAdvanceRow; + + @InjectView(R.id.network_lte_timing_advance) + private HighlightTextView lteTimingAdvanceView; + + @InjectView(R.id.primary_scrambling_code) + private TableRow primaryScramblingCodeRow; + + @InjectView(R.id.network_psc) + private HighlightTextView primaryScramblingCodeView; + + @InjectView(R.id.sim_country) + private HighlightTextView simCountryView; + @InjectView(R.id.sim_operator_id) + private HighlightTextView simOperatorIdView; + @InjectView(R.id.sim_operator_name) + private HighlightTextView simOperatorNameView; + @InjectView(R.id.sim_imsi) + private HighlightTextView simImsiView; + @InjectView(R.id.sim_serial) + private HighlightTextView simSerialView; + @InjectView(R.id.device_type) + private HighlightTextView deviceTypeView; + @InjectView(R.id.device_imei) + private HighlightTextView deviceImeiView; + @InjectView(R.id.device_version) + private HighlightTextView deviceImeiVersionView; + @InjectView(R.id.network_name) + private HighlightTextView networkNameView; + @InjectView(R.id.network_code) + private HighlightTextView networkCodeView; + @InjectView(R.id.network_type) + private HighlightTextView networkTypeView; + @InjectView(R.id.data_activity) + private HighlightTextView dataActivityTypeView; + @InjectView(R.id.data_status) + private HighlightTextView dataStatusView; + @InjectView(R.id.network_roaming) + private HighlightTextView networkRoamingView; + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -117,8 +179,6 @@ public void onServiceDisconnected(ComponentName arg0) { }; private void updateUI() { - HighlightTextView content; - TableRow tr; if (mBound) { final AnimationManager ani = new AnimationManager(); @@ -129,81 +189,57 @@ private void updateUI() { case TelephonyManager.PHONE_TYPE_NONE: // Maybe bad! case TelephonyManager.PHONE_TYPE_SIP: // Maybe bad! case TelephonyManager.PHONE_TYPE_GSM: { - content = (HighlightTextView) getView().findViewById(R.id.network_lac); - content.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); - tr = (TableRow) getView().findViewById(R.id.gsm_cellid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_cellid); - content.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); + locationAreaCodeView.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); + gsmCellIdTableRow.setVisibility(View.VISIBLE); + cellIdView.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); break; } case TelephonyManager.PHONE_TYPE_CDMA: { - tr = (TableRow) getView().findViewById(R.id.cdma_netid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_netid); - content.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); - tr = (TableRow) getView().findViewById(R.id.cdma_sysid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_sysid); - content.updateText(String.valueOf(mAimsicdService.getCell().getSid()), ani); - tr = (TableRow) getView().findViewById(R.id.cdma_baseid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_baseid); - content.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); + cdmaNetworkIdRow.setVisibility(View.VISIBLE); + networkIdView.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); + + cdmaSystemIdRow.setVisibility(View.VISIBLE); + systemIdView.updateText(String.valueOf(mAimsicdService.getCell().getSid()), ani); + + cdmaBaseIdRow.setVisibility(View.VISIBLE); + baseIdView.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); break; } + default: + log.error("unknown phone type: {}", mDevice.getPhoneId()); } if (mAimsicdService.getCell().getTimingAdvance() != Integer.MAX_VALUE) { - tr = (TableRow) getView().findViewById(R.id.lte_timing_advance); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_lte_timing_advance); - content.updateText(String.valueOf(mAimsicdService.getCell().getTimingAdvance()), ani); + lteTimingAdvanceRow.setVisibility(View.VISIBLE); + lteTimingAdvanceView.updateText(String.valueOf(mAimsicdService.getCell().getTimingAdvance()), ani); } else { - tr = (TableRow) getView().findViewById(R.id.lte_timing_advance); - tr.setVisibility(View.GONE); + lteTimingAdvanceRow.setVisibility(View.GONE); } if (mAimsicdService.getCell().getPrimaryScramblingCode() != Integer.MAX_VALUE) { - content = (HighlightTextView) getView().findViewById(R.id.network_psc); - content.updateText(String.valueOf(mAimsicdService.getCell().getPrimaryScramblingCode()), ani); - tr = (TableRow) getView().findViewById(R.id.primary_scrambling_code); - tr.setVisibility(View.VISIBLE); + primaryScramblingCodeView.updateText(String.valueOf(mAimsicdService.getCell().getPrimaryScramblingCode()), ani); + primaryScramblingCodeRow.setVisibility(View.VISIBLE); } String notAvailable = getString(R.string.n_a); - content = (HighlightTextView) getView().findViewById(R.id.sim_country); - content.updateText(mDevice.getSimCountry().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_operator_id); - content.updateText(mDevice.getSimOperator().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_operator_name); - content.updateText(mDevice.getSimOperatorName().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_imsi); - content.updateText(mDevice.getSimSubs().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_serial); - content.updateText(mDevice.getSimSerial().orElse(notAvailable), ani); - - content = (HighlightTextView) getView().findViewById(R.id.device_type); - content.updateText(mDevice.getPhoneType(), ani); - content = (HighlightTextView) getView().findViewById(R.id.device_imei); - content.updateText(mDevice.getIMEI(), ani); - content = (HighlightTextView) getView().findViewById(R.id.device_version); - content.updateText(mDevice.getIMEIv(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_name); - content.updateText(mDevice.getNetworkName(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_code); - content.updateText(mDevice.getMncMcc(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_type); - content.updateText(mDevice.getNetworkTypeName(), ani); - - content = (HighlightTextView) getView().findViewById(R.id.data_activity); - content.updateText(mDevice.getDataActivityType(), ani); - content = (HighlightTextView) getView().findViewById(R.id.data_status); - content.updateText(mDevice.getDataState(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_roaming); - content.updateText(String.valueOf(mDevice.isRoaming()), ani); + simCountryView.updateText(mDevice.getSimCountry().orElse(notAvailable), ani); + simOperatorIdView.updateText(mDevice.getSimOperator().orElse(notAvailable), ani); + simOperatorNameView.updateText(mDevice.getSimOperatorName().orElse(notAvailable), ani); + simImsiView.updateText(mDevice.getSimSubs().orElse(notAvailable), ani); + simSerialView.updateText(mDevice.getSimSerial().orElse(notAvailable), ani); + + deviceTypeView.updateText(mDevice.getPhoneType(), ani); + deviceImeiView.updateText(mDevice.getIMEI(), ani); + deviceImeiVersionView.updateText(mDevice.getIMEIv(), ani); + networkNameView.updateText(mDevice.getNetworkName(), ani); + networkCodeView.updateText(mDevice.getMncMcc(), ani); + networkTypeView.updateText(mDevice.getNetworkTypeName(), ani); + + dataActivityTypeView.updateText(mDevice.getDataActivityType(), ani); + dataStatusView.updateText(mDevice.getDataState(), ani); + networkRoamingView.updateText(String.valueOf(mDevice.isRoaming()), ani); ani.startAnimation(5000); } @@ -294,7 +330,7 @@ private Cell responseToCell(Response response) { private void processFinish(Cell cell) { if (cell != null) { - log.info("processFinish - Cell =" + cell.toString()); + log.info("processFinish - Cell ={}", cell.toString()); if (cell.isValid()) { mAimsicdService.setCell(cell); Helpers.msgShort(mContext, getActivity().getString(R.string.refreshed_cell_id_info)); // TODO re-translating other languages diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java index bc588c3ec..aaab41fc1 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java @@ -60,15 +60,14 @@ import java.util.LinkedList; import java.util.List; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.annotation.InjectView; import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.app.InjectionAppCompatActivity; import io.freefair.android.injection.app.InjectionFragment; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import io.realm.RealmResults; import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; /** * Description: TODO: add details @@ -92,11 +91,10 @@ * https://github.com/osmdroid/osmdroid/issues/81 * https://code.google.com/p/osmbonuspack/issues/detail?id=102 */ +@Slf4j @XmlLayout(R.layout.activity_map_viewer) public final class MapFragment extends InjectionFragment implements OnSharedPreferenceChangeListener { - @Inject - private Logger log; public static final String updateOpenCellIDMarkers = "update_open_cell_markers"; @InjectView(R.id.mapview) @@ -106,7 +104,7 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref private AimsicdService mAimsicdService; private boolean mBound; - private GeoPoint loc = null; + private GeoPoint mLatestCellLoc = null; private MyLocationNewOverlay mMyLocationOverlay; private CompassOverlay mCompassOverlay; @@ -178,13 +176,14 @@ public void onResume() { if (mMyLocationOverlay != null) { mMyLocationOverlay.enableMyLocation(); + mMyLocationOverlay.enableFollowLocation(); } } @Override public void onDestroyView() { - super.onDestroy(); + super.onDestroyView(); LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver); if (mCompassOverlay != null) { @@ -193,9 +192,12 @@ public void onDestroyView() { if (mMyLocationOverlay != null) { mMyLocationOverlay.disableMyLocation(); + mMyLocationOverlay.disableFollowLocation(); } - prefs.unregisterOnSharedPreferenceChangeListener(this); + if (prefs != null) { + prefs.unregisterOnSharedPreferenceChangeListener(this); + } // Unbind from the service if (mBound) { getActivity().unbindService(mConnection); @@ -213,7 +215,7 @@ public void onDestroyView() { public void onReceive(Context context, Intent intent) { loadEntries(); if (BuildConfig.DEBUG && mCellTowerGridMarkerClusterer != null && mCellTowerGridMarkerClusterer.getItems() != null) { - log.verbose("mMessageReceiver CellTowerMarkers.invalidate() markers.size():" + mCellTowerGridMarkerClusterer.getItems().size()); + log.debug("mMessageReceiver CellTowerMarkers.invalidate() markers.size():{}", mCellTowerGridMarkerClusterer.getItems().size()); } } @@ -287,28 +289,37 @@ private void setupMapType(int mapType) { */ private void setUpMapIfNeeded() { + mMap.getOverlayManager().clear(); // Check if we were successful in obtaining the map. mMap.setBuiltInZoomControls(true); mMap.setMultiTouchControls(true); mMap.setMinZoomLevel(3); mMap.setMaxZoomLevel(19); // Latest OSM can go to 21! mMap.getTileProvider().createTileCache(); - mCompassOverlay = new CompassOverlay(getActivity(), new InternalCompassOrientationProvider(getActivity()), mMap); + + if (mCompassOverlay == null) { + mCompassOverlay = new CompassOverlay(getActivity(), new InternalCompassOrientationProvider(getActivity()), mMap); + } ScaleBarOverlay mScaleBarOverlay = new ScaleBarOverlay(getActivity()); mScaleBarOverlay.setScaleBarOffset(getResources().getDisplayMetrics().widthPixels / 2, 10); mScaleBarOverlay.setCentred(true); // Sets cluster pin color - mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(getActivity()); - BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); - mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + if (mCellTowerGridMarkerClusterer == null) { + mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(getActivity()); + BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); + mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + } - GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(getActivity().getBaseContext()); - gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates - gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates - mMyLocationOverlay = new MyLocationNewOverlay(getActivity().getBaseContext(), gpsMyLocationProvider, mMap); - mMyLocationOverlay.setDrawAccuracyEnabled(true); + if (mMyLocationOverlay == null) { + GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(getActivity().getBaseContext()); + gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates + gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates + + mMyLocationOverlay = new MyLocationNewOverlay(getActivity().getBaseContext(), gpsMyLocationProvider, mMap); + mMyLocationOverlay.setDrawAccuracyEnabled(true); + } mMap.getOverlays().add(mCellTowerGridMarkerClusterer); mMap.getOverlays().add(mMyLocationOverlay); @@ -347,11 +358,11 @@ public boolean onOptionsItemSelected(MenuItem item) { } } - if (loc != null) { + if (mLatestCellLoc != null) { Helpers.msgLong(getActivity(), getString(R.string.contacting_opencellid_for_data)); Cell cell = new Cell(); - cell.setLat(loc.getLatitude()); - cell.setLon(loc.getLongitude()); + cell.setLat(mLatestCellLoc.getLatitude()); + cell.setLon(mLatestCellLoc.getLongitude()); setRefreshActionButtonState(true); TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, false); Helpers.getOpenCellData((InjectionAppCompatActivity) getActivity(), cell, RequestTask.DBE_DOWNLOAD_REQUEST_FROM_MAP, mAimsicdService); @@ -422,16 +433,16 @@ protected GeoPoint doInBackground(Void... voids) { if (Double.doubleToRawLongBits(dLat) != 0 || Double.doubleToRawLongBits(dLng) != 0) { - loc = new GeoPoint(dLat, dLng); + mLatestCellLoc = new GeoPoint(dLat, dLng); CellTowerMarker ovm = new CellTowerMarker(getActivity(), mMap, "Cell ID: " + cellID, - "", loc, + "", mLatestCellLoc, new MarkerData( getContext(), String.valueOf(cellID), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(lac), String.valueOf(mcc), String.valueOf(mnc), @@ -481,15 +492,15 @@ public void run() { return null; } try { - loc = new GeoPoint(cell.getLat(), cell.getLon()); + mLatestCellLoc = new GeoPoint(cell.getLat(), cell.getLon()); CellTowerMarker ovm = new CellTowerMarker(getActivity(), mMap, getString(R.string.cell_id_label) + cell.getCellId(), - "", loc, + "", mLatestCellLoc, new MarkerData( getContext(), String.valueOf(cell.getCellId()), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(cell.getLocationAreaCode()), String.valueOf(cell.getMobileCountryCode()), String.valueOf(cell.getMobileNetworkCode()), @@ -520,32 +531,38 @@ public void run() { */ @Override protected void onPostExecute(GeoPoint defaultLoc) { - if (loc != null && (Double.doubleToRawLongBits(loc.getLatitude()) != 0 - && Double.doubleToRawLongBits(loc.getLongitude()) != 0)) { - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - if (mBound) { - // Try and find last known location and zoom there - GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); - if (lastLoc != null) { - loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), - lastLoc.getLongitudeInDegrees()); - - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - //Use MCC to move camera to an approximate location near Countries Capital - loc = defaultLoc; - - mMap.getController().setZoom(12); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } + boolean movedMap = false; + if (mBound) { + // Try and find last known location and zoom there + GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); + if (lastLoc != null) { + GeoPoint loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), + lastLoc.getLongitudeInDegrees()); + + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } + } + if (!movedMap) { + if (mLatestCellLoc != null && (Double.doubleToRawLongBits(mLatestCellLoc.getLatitude()) != 0 + && Double.doubleToRawLongBits(mLatestCellLoc.getLongitude()) != 0)) { + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(mLatestCellLoc.getLatitude(), mLatestCellLoc.getLongitude())); + movedMap = true; } } + if (!movedMap) { + //Use MCC to move camera to an approximate location near Countries Capital + GeoPoint loc = defaultLoc; + + mMap.getController().setZoom(12); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } if (mCellTowerGridMarkerClusterer != null) { if (BuildConfig.DEBUG && mCellTowerGridMarkerClusterer.getItems() != null) { - log.verbose("CellTowerMarkers.invalidate() markers.size():" + mCellTowerGridMarkerClusterer.getItems().size()); + log.debug("CellTowerMarkers.invalidate() markers.size():{}", mCellTowerGridMarkerClusterer.getItems().size()); } //Drawing markers of cell tower immediately as possible mCellTowerGridMarkerClusterer.invalidate(); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/widget/HighlightTextView.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/widget/HighlightTextView.java index f754b7a04..1e15e91fc 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/widget/HighlightTextView.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/widget/HighlightTextView.java @@ -1,20 +1,20 @@ package com.secupwn.aimsicd.ui.widget; import android.content.Context; +import android.support.v7.widget.AppCompatTextView; import android.util.AttributeSet; import android.view.View; -import android.widget.TextView; -import com.secupwn.aimsicd.R; import com.kaichunlin.transition.ViewTransitionBuilder; import com.kaichunlin.transition.animation.AnimationManager; import com.kaichunlin.transition.internal.TransitionController; import com.nineoldandroids.animation.ArgbEvaluator; +import com.secupwn.aimsicd.R; /** * Highlight the updated text */ -public class HighlightTextView extends TextView { +public class HighlightTextView extends AppCompatTextView { private static final int DURATION = 3000; public HighlightTextView(Context context) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CMDProcessor.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CMDProcessor.java index 0c7b81727..b2a70e63f 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CMDProcessor.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CMDProcessor.java @@ -21,13 +21,11 @@ package com.secupwn.aimsicd.utils; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; +@Slf4j public final class CMDProcessor { - private static final Logger log = AndroidLogger.forClass(CMDProcessor.class); - public CMDProcessor() { } @@ -79,7 +77,7 @@ public static boolean canSU() { out.append(r.getStdOut()); out.append(" ; "); out.append(r.getStdErr()); - log.debug("canSU() su[" + r.getExitValue() + "]: " + out); + log.debug("canSU() su[{}]: {}", r.getExitValue(), out); return r.success(); } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ChildProcess.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ChildProcess.java index 263ef81c6..2cf5dd4eb 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ChildProcess.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ChildProcess.java @@ -25,14 +25,13 @@ import java.io.InputStream; import java.io.OutputStream; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; import static java.lang.System.nanoTime; +@Slf4j public class ChildProcess { - private final Logger log = AndroidLogger.forClass(ChildProcess.class); private static final int PIPE_SIZE = 1024; private class ChildReader extends Thread { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CommandResult.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CommandResult.java index 419d8c316..9b106a528 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CommandResult.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/CommandResult.java @@ -28,14 +28,13 @@ import java.io.FileWriter; import java.io.IOException; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; @SuppressWarnings("AccessOfSystemProperties") +@Slf4j public class CommandResult implements Parcelable { - private final Logger log = AndroidLogger.forClass(CommandResult.class); private long startTime; @Getter private int exitValue; @@ -53,7 +52,7 @@ public CommandResult(long startTime, int exitValue, this.stdErr = stderr; this.endTime = endTime; - log.debug("Time to execute: " + (this.endTime - this.startTime) + " ns (nanoseconds)"); + log.debug("Time to execute: {} ns (nanoseconds)", this.endTime - this.startTime); // this is set last so log from here checkForErrors(); } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Device.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Device.java index ae9c62731..a8cc70315 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Device.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Device.java @@ -13,18 +13,16 @@ import android.telephony.cdma.CdmaCellLocation; import android.telephony.gsm.GsmCellLocation; -import io.freefair.android.util.function.Optional; -import io.freefair.android.util.function.Supplier; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import io.freefair.util.function.Optional; +import io.freefair.util.function.Supplier; import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; @Getter +@Slf4j public class Device { - private static final Logger log = AndroidLogger.forClass(Device.class); - public Cell cell; /** * integer representation of Phone Type @@ -141,7 +139,7 @@ public void refreshDeviceInfo(TelephonyManager tm, Context context) { cell.setMobileNetworkCode(Integer.valueOf(homeOperator.substring(3, 5))); } } catch (Exception e) { - log.info("HomeOperator parse exception - " + e.getMessage(), e); + log.info("HomeOperator parse exception - {}", e.getMessage(), e); } } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi17.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi17.java index daafc1b5b..c506ddc28 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi17.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi17.java @@ -25,14 +25,12 @@ import java.util.List; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) +@Slf4j public class DeviceApi17 { - private static final Logger log = AndroidLogger.forClass(DeviceApi17.class); - public static void loadCellInfo(TelephonyManager tm, Device pDevice) { int lCurrentApiVersion = Build.VERSION.SDK_INT; try { @@ -101,9 +99,7 @@ public static void loadCellInfo(TelephonyManager tm, Device pDevice) { pDevice.cell.setPrimaryScramblingCode(identityWcdma.getPsc()); } else { - log.info("Unknown type of cell signal! " - + "ClassName: " + info.getClass().getSimpleName() - + " ToString: " + info.toString()); + log.info("Unknown type of cell signal! ClassName: {} ToString: {}", info.getClass().getSimpleName(), info.toString()); } if (pDevice.cell.isValid()) { break; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi18.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi18.java index bb726c13c..9f855754c 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi18.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/DeviceApi18.java @@ -25,8 +25,7 @@ import java.util.List; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * This class is taking in consideration newly available network info items @@ -37,10 +36,9 @@ * */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) +@Slf4j public class DeviceApi18 { - public static final Logger log = AndroidLogger.forClass(DeviceApi18.class); - public static void loadCellInfo(TelephonyManager tm, Device pDevice) { int lCurrentApiVersion = Build.VERSION.SDK_INT; try { @@ -100,9 +98,7 @@ public static void loadCellInfo(TelephonyManager tm, Device pDevice) { pDevice.cell.setPrimaryScramblingCode(identityWcdma.getPsc()); } else { - log.info("Unknown type of cell signal!" - + "\n ClassName: " + info.getClass().getSimpleName() - + "\n ToString: " + info.toString()); + log.info("Unknown type of cell signal!\n ClassName: {}\n ToString: {}", info.getClass().getSimpleName(), info.toString()); } if (pDevice.cell.isValid()) { break; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/FixedGZIPInputStream.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/FixedGZIPInputStream.java new file mode 100644 index 000000000..97cf502d2 --- /dev/null +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/FixedGZIPInputStream.java @@ -0,0 +1,55 @@ +package com.secupwn.aimsicd.utils; + +import android.support.annotation.NonNull; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.util.zip.GZIPInputStream; + +/** + * GZIPInputStream that works correctly with files more than 2 GiB + *

+ *

Rationale + *

Android Java implementation of {@link GZIPInputStream} contains verifyCrc method that + * incorrectly checks for gzip size on EOF. It happens when the uncompressed + * file is greater than 2 GiB and {@link java.util.zip.Inflater#getTotalOut()} returns + * a negative number since the return type is int and {@code Integer.MAX_VALUE} is about 2GiB. + * So it throws {@code IOException("Size mismatch")} + *

+ *

Oracle already fixed this bug in Java 6 (see https://bugs.openjdk.java.net/browse/JDK-5092263) + * but Android implementation is still affected. + *

+ *

Workaround + *

If read throws a specific exception in {@code InputStream#read} we are sure that it is an EOF + * and we can consume this exception and just return EOF. There could be a problem with a possible + * loss of last buffer but it is better than a loss of full stream. + */ +public class FixedGZIPInputStream extends FilterInputStream { + public FixedGZIPInputStream(GZIPInputStream in) { + super(in); + } + + @Override + public int read(@NonNull byte[] buffer) throws IOException { + try { + return super.read(buffer); + } catch (IOException e) { + if (e.getMessage().equals("Size mismatch")) { + return -1; + } + throw e; + } + } + + @Override + public int read(@NonNull byte[] buffer, int byteOffset, int byteCount) throws IOException { + try { + return super.read(buffer, byteOffset, byteCount); + } catch (IOException e) { + if (e.getMessage().equals("Size mismatch")) { + return -1; + } + throw e; + } + } +} diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java index 7316348d8..8cd0cb3e7 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java @@ -24,14 +24,15 @@ import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.net.Uri; import android.support.v4.app.Fragment; import android.text.TextUtils; import com.secupwn.aimsicd.R; -import com.secupwn.aimsicd.ui.fragments.MapFragment; import com.secupwn.aimsicd.constants.DrawerMenu; import com.secupwn.aimsicd.service.AimsicdService; import com.secupwn.aimsicd.service.CellTracker; +import com.secupwn.aimsicd.ui.fragments.MapFragment; import java.io.BufferedReader; import java.io.InputStream; @@ -41,8 +42,7 @@ import java.util.List; import io.freefair.android.injection.app.InjectionAppCompatActivity; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * @@ -59,9 +59,9 @@ * - Check for SU and BusyBox * */ - public class Helpers { +@Slf4j +public class Helpers { - private static final Logger log = AndroidLogger.forClass(Helpers.class); private static final int CHARS_PER_LINE = 34; /** @@ -211,18 +211,18 @@ public static void getOpenCellData(InjectionAppCompatActivity injectionActivity, + String.valueOf(boundingCoords[1].getLatitudeInDegrees()) + "," + String.valueOf(boundingCoords[1].getLongitudeInDegrees()); - log.info("OCID BBOX is set to: " + boundParameter + " with radius " + radius + " Km."); + log.info("OCID BBOX is set to: {} with radius {} Km.", boundParameter, radius); StringBuilder sb = new StringBuilder(); sb.append("http://www.opencellid.org/cell/getInArea?key=") .append(CellTracker.OCID_API_KEY).append("&BBOX=") .append(boundParameter); - log.info("OCID MCC is set to: " + cell.getMobileCountryCode()); + log.info("OCID MCC is set to: {}", cell.getMobileCountryCode()); if (cell.getMobileCountryCode() != Integer.MAX_VALUE) { sb.append("&mcc=").append(cell.getMobileCountryCode()); } - log.info("OCID MNC is set to: " + cell.getMobileNetworkCode()); + log.info("OCID MNC is set to: {}", cell.getMobileNetworkCode()); if (cell.getMobileNetworkCode() != Integer.MAX_VALUE) { sb.append("&mnc=").append(cell.getMobileNetworkCode()); } @@ -231,7 +231,7 @@ public static void getOpenCellData(InjectionAppCompatActivity injectionActivity, new RequestTask(injectionActivity, type, new RequestTask.AsyncTaskCompleteListener() { @Override public void onAsyncTaskSucceeded() { - log.verbose("RequestTask's OCID download was successful. Callback rechecking connected cell against database"); + log.debug("RequestTask's OCID download was successful. Callback rechecking connected cell against database"); service.getCellTracker().compareLacAndOpenDb(); } @@ -259,6 +259,57 @@ public void onAsyncTaskFailed(String result) { } } } + /** + * Description: Imports cell data from the specified file + * + * Used: + * @param celltowersPath path to the cell_towers.csv / cell_towers.csv.gz + * @param cell Current Cell Information + * @param importFile + * + */ + public static void importCellTowersData(InjectionAppCompatActivity injectionActivity, Cell cell, + Uri importFile, + final AimsicdService service) { + if (Helpers.isNetAvailable(injectionActivity)) { + int radius = 2; // Use a 2 Km radius with center at GPS location. + + if (Double.doubleToRawLongBits(cell.getLat()) != 0 && + Double.doubleToRawLongBits(cell.getLon()) != 0) { + GeoLocation currentLoc = GeoLocation.fromDegrees(cell.getLat(), cell.getLon()); + + log.info("OCID location: {} with radius {} Km.", currentLoc.toString(), radius); + log.info("OCID MCC is set to: {}", cell.getMobileCountryCode()); + log.info("OCID MNC is set to: {}", cell.getMobileNetworkCode()); + + new ImportTask(injectionActivity, importFile, + cell.getMobileCountryCode(), cell.getMobileNetworkCode(), currentLoc, radius, + new ImportTask.AsyncTaskCompleteListener() { + @Override + public void onAsyncTaskSucceeded() { + log.debug("ImportTask's OCID import was successful. Callback rechecking connected cell against database"); + service.getCellTracker().compareLacAndOpenDb(); + } + + @Override + public void onAsyncTaskFailed(String result) { + } + }).execute(); + } + + } else { + Fragment myFragment = injectionActivity.getSupportFragmentManager().findFragmentByTag(String.valueOf(DrawerMenu.ID.MAIN.ALL_CURRENT_CELL_DETAILS)); + if (myFragment instanceof MapFragment) { + ((MapFragment) myFragment).setRefreshActionButtonState(false); + } + + final AlertDialog.Builder builder = new AlertDialog.Builder(injectionActivity); + builder.setTitle(R.string.no_network_connection_title) + .setMessage(R.string.no_network_connection_message); + builder.create().show(); + } + } + /** * Return a String List representing response from invokeOemRilRequestRaw * @@ -268,7 +319,7 @@ public static List unpackByteListOfStrings(byte aob[]) { if (aob.length == 0) { // WARNING: This one is very chatty! - log.verbose("invokeOemRilRequestRaw: byte-list response Length = 0"); + log.debug("invokeOemRilRequestRaw: byte-list response Length = 0"); return Collections.emptyList(); } int lines = aob.length / CHARS_PER_LINE; @@ -304,7 +355,7 @@ public static String getSystemProp(Context context, String prop, String def) { try { result = SystemPropertiesReflection.get(context, prop); } catch (IllegalArgumentException iae) { - log.error("Failed to get system property: " + prop, iae); + log.error("Failed to get system property: {}", prop, iae); } return result == null ? def : result; } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Icon.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Icon.java index fe4159ac5..e15ac43d5 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Icon.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Icon.java @@ -12,7 +12,7 @@ import com.secupwn.aimsicd.R; import com.secupwn.aimsicd.enums.Status; -import io.freefair.android.util.function.Function; +import io.freefair.util.function.Function; /** * Class that holds and returns the correct icon based on requested icon format and diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ImportTask.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ImportTask.java new file mode 100644 index 000000000..a8227099f --- /dev/null +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ImportTask.java @@ -0,0 +1,289 @@ +/* Android IMSI-Catcher Detector | (c) AIMSICD Privacy Project + * ----------------------------------------------------------- + * LICENSE: http://git.io/vki47 | TERMS: http://git.io/vki4o + * ----------------------------------------------------------- + */ +package com.secupwn.aimsicd.utils; + +import android.content.Context; +import android.net.Uri; +import android.support.annotation.NonNull; + +import com.secupwn.aimsicd.R; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.Arrays; +import java.util.Date; +import java.util.zip.GZIPInputStream; + +import au.com.bytecode.opencsv.CSVReader; +import io.freefair.android.injection.app.InjectionAppCompatActivity; +import io.realm.Realm; +import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; + +/** + * Description: + *

+ * This class is the request handler for Importing data from OpenCellID's cell_towers.csv or + * gzipped cell_towers.csv.gz. + * Format of the file slightly differs from the OpenCellID's so it is converted on the + * fly and filtered by MCC, MNC, location. + *

+ */ +@Slf4j +public class ImportTask extends BaseAsyncTask { + + private RealmHelper mDbAdapter; + private Context mAppContext; + private final Uri importFile; + private final int mobileCountryCode; + private final int mobileNetworkCode; + private final GeoLocation currentLocation; + private final int locationRadius; + + private AsyncTaskCompleteListener mListener; + + public static final double EARTH_RADIUS = 6371.01; + + /** + * @param context App context + * @param importFile URI pointing to the file cell_towers.csv or cell_towers.csv.gz + * @param mobileCountryCode MCC filter + * @param mobileNetworkCode MNC filter + * @param currentLocation GPS location of cell + * @param locationRadius filtering radius + * @param listener Allows the caller of RequestTask to implement success/fail callbacks + */ + public ImportTask(InjectionAppCompatActivity context, + Uri importFile, + int mobileCountryCode, int mobileNetworkCode, + GeoLocation currentLocation, int locationRadius, + AsyncTaskCompleteListener listener) { + super(context); + this.importFile = importFile; + this.mobileCountryCode = mobileCountryCode; + this.mobileNetworkCode = mobileNetworkCode; + this.currentLocation = currentLocation; + this.locationRadius = locationRadius; + this.mAppContext = context.getApplicationContext(); + this.mDbAdapter = new RealmHelper(mAppContext); + this.mListener = listener; + } + + /** + * Imports data from cell_towers.csv + *

+ *

+ * opencellid.csv layout: + * lat,lon,mcc,mnc,lac,cellid,averageSignalStrength,range,samples,changeable,radio,rnc,cid,psc, + * tac,pci,sid,nid,bid + *

+ * example: + * 52.201454,21.065345,260,2,58140,42042781,-59,1234,3,1,UMTS,641,34205,,,, + *

+ * cell_towers.csv layout: + * radio,mcc,net,area,cell,unit,lon,lat,range,samples,changeable,created,updated,averageSignal + * 0 radio + * 1 mcc + * 2 net (mnc) + * 3 area (lac) + * 4 cell (long) + * 5 unit + * 6 lon + * 7 lat + * 8 range + * 9 samples + * 10 changeable + * 11 created + * 12 updated + * 13 averageSignal + *

+ * example: + * UMTS,260,2,58140,42042781,,21.03006,52.207811,21,2,1,1379428153,1458591497,-92 + *

+ */ + @Override + protected String doInBackground(String... commandString) { + + try { + @Cleanup Realm realm = Realm.getDefaultInstance(); + + Long elapsedSeconds = System.currentTimeMillis() / 1000; + + // Prepare filtering values + final String mccFilter = String.valueOf(mobileCountryCode); + final String mncFilter = String.valueOf(mobileNetworkCode); + + long progress = 0; + long failedRecords = 0; + + CSVReader csvReader = null; + try { + String next[]; + + csvReader = new CSVReader(createFileReader()); + csvReader.readNext(); // skip header + + String[] opencellid_csv = new String[14]; + while ((next = csvReader.readNext()) != null) { + if (next.length < 14) { + log.warn("Not enough values in string: {}", Arrays.toString(next)); + ++failedRecords; + continue; + } + if (!next[1].equals(mccFilter) || !next[2].equals(mncFilter)) { + continue; + } + if (next[6].isEmpty() || next[7].isEmpty()) { + continue; + } + GeoLocation location = GeoLocation.fromDegrees(Double.parseDouble(next[7]), + Double.parseDouble(next[6])); + if (location.distanceTo(currentLocation, EARTH_RADIUS) > locationRadius) { + continue; + } + + try { + // set non-existent range, avgSignal, etc to "0" so they + // will be possibly filtered by checkDBe + opencellid_csv[0] = next[7]; // lat + opencellid_csv[1] = next[6]; // lon + opencellid_csv[2] = next[1]; // mcc + opencellid_csv[3] = next[2]; // mnc + opencellid_csv[4] = next[3]; // lac + opencellid_csv[5] = next[4]; // cellid, long + opencellid_csv[6] = stringOrZero(next[13]); // averageSignalStrength + opencellid_csv[7] = stringOrZero(next[8]); // range + opencellid_csv[8] = stringOrZero(next[9]); // samples + opencellid_csv[9] = stringOrZero(next[10]); // changeable + opencellid_csv[10] = next[0]; // radio + opencellid_csv[11] = null; // rnc, not used + opencellid_csv[12] = null; // cid, not used + opencellid_csv[13] = null; // psc, not present + + Date dateCreated = dateOrNow(next[11]); + Date dateUpdated = dateOrNow(next[12]); + + mDbAdapter.addCSVRecord(realm, opencellid_csv, dateCreated, dateUpdated); + ++progress; + + } catch (NumberFormatException e) { + log.warn("Problem parsing a record: {}", Arrays.toString(opencellid_csv), e); + ++failedRecords; + } + + if ((progress % 100) == 0) { + log.debug("Imported records for now: {}", String.valueOf(progress)); + // do not know progress because determining line count in gzipped + // multi-gigabyte file is slow + //publishProgress((int) progress, (int) totalRecords); + } + if ((progress % 1000) == 0) { + try { + Thread.sleep(1000); // wait 1 second to allow user to see progress bar. + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } + } + } finally { + if (csvReader != null) { + csvReader.close(); + } + } + elapsedSeconds = (System.currentTimeMillis() / 1000) - elapsedSeconds; + log.debug("Importing took {} seconds", String.valueOf(elapsedSeconds)); + log.debug("Imported records: {}", String.valueOf(progress)); + log.debug("Failed records: {}", String.valueOf(failedRecords)); + + return "Successful"; + + } catch (IOException e) { + log.warn("Problem reading data from CSV", e); + return null; + } + } + + /** + * Creates a new reader for optionally gziped file + */ + @NonNull + private Reader createFileReader() throws IOException { + String type = mAppContext.getContentResolver().getType(importFile); + boolean isGzip = type != null && type.equals("application/octet-stream") && + importFile.toString().endsWith(".gz"); + log.info("Importing {}: {}", isGzip ? "gzipped file" : "plain-text file", importFile); + + InputStream fileStream = mAppContext.getContentResolver().openInputStream(importFile); + if (fileStream == null) { + throw new IOException("File cannot be opened"); + } + if (isGzip) { + fileStream = new FixedGZIPInputStream(new GZIPInputStream(fileStream)); + } + return new InputStreamReader(fileStream); + } + + @NonNull + private static Date dateOrNow(String timestamp) { + return timestamp == null || timestamp.isEmpty() ? new Date() : new Date(Long.valueOf(timestamp) * 1000); + } + + private static String stringOrZero(String s) { + return s == null || s.isEmpty() ? "0" : s; + } + + /** + * This is where we: + *
    + *
  1. Check the success for data import
  2. + *
  3. call the updateOpenCellID() to populate the {@link com.secupwn.aimsicd.data.model.Import Import} realm
  4. + *
  5. call the {@link RealmHelper#checkDBe()} to cleanup bad cells from imported data
  6. + *
  7. present a failure/success toast message
  8. + *
  9. set a shared preference to indicate that data has been downloaded: + * {@code ocid_downloaded true}
  10. + *
+ */ + @Override + protected void onPostExecute(String result) { + super.onPostExecute(result); + TinyDB tinydb = TinyDB.getInstance(); + + @Cleanup Realm realm = Realm.getDefaultInstance(); + + // if `result` is null, it will evaluate to false, no need to check for null + if ("Successful".equals(result)) { + + Helpers.msgShort(mAppContext, mAppContext.getString(R.string.celltowers_data_successfully_imported)); + + realm.executeTransaction(mDbAdapter.checkDBe()); + tinydb.putBoolean("ocid_downloaded", true); + } else { + Helpers.msgLong(mAppContext, mAppContext.getString(R.string.error_importing_celltowers_data)); + } + + if (mListener != null) { + if ("Successful".equals(result)) { + mListener.onAsyncTaskSucceeded(); + } else { + mListener.onAsyncTaskFailed(result); + } + } + } + + /** + * The interface to be implemented by the caller of ImportTask so it can perform contextual + * actions once the async task is completed. + *

+ * E.g. rechecking current cell in the newly updated database after OCID imported. + */ + public interface AsyncTaskCompleteListener { + void onAsyncTaskSucceeded(); + + void onAsyncTaskFailed(String result); + } +} diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/OemCommands.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/OemCommands.java index a1d9ac6e4..52597d0aa 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/OemCommands.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/OemCommands.java @@ -13,8 +13,7 @@ import java.io.DataOutputStream; import java.io.IOException; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * These are the OEM commands used by the MulticlientRil ServiceMode menu scraper, @@ -22,10 +21,9 @@ * and these particular ones are for Samsung Galaxy S2, AFAIK. * -- E:V:A */ +@Slf4j public class OemCommands { - private static final Logger log = AndroidLogger.forClass(OemCommands.class); - public static final char OEM_SERVM_FUNCTAG = 1; public static final char OEM_SM_ACTION = 0; public static final char OEM_SM_QUERY = 1; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java index 54d8c25c7..20602a15e 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java @@ -24,18 +24,17 @@ import au.com.bytecode.opencsv.CSVReader; import au.com.bytecode.opencsv.CSVWriter; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; import io.realm.Realm; import io.realm.RealmQuery; import io.realm.RealmResults; +import lombok.extern.slf4j.Slf4j; /** * This class handles all the AMISICD DataBase maintenance operations, like - * creation, population, updates, backup, restore and various selections. + * creation, population, updates and various selections. */ +@Slf4j public final class RealmHelper { - private final Logger log = AndroidLogger.forClass(RealmHelper.class); private Context mContext; private SharedPreferences mPreferences; @@ -79,15 +78,11 @@ public boolean checkLAC(Realm realm, Cell cell) { int lac = baseStation.getLocationAreaCode(); if (cell.getLocationAreaCode() != lac) { - log.info("ALERT: Changing LAC on CID: " + cell.getCellId() - + " LAC(API): " + cell.getLocationAreaCode() - + " LAC(DBi): " + lac); + log.info("ALERT: Changing LAC on CID: {} LAC(API): {} LAC(DBi): {}", cell.getCellId(), cell.getLocationAreaCode(), lac); return false; } else { - log.verbose("LAC checked - no change on CID:" + cell.getCellId() - + " LAC(API): " + cell.getLocationAreaCode() - + " LAC(DBi): " + lac); + log.debug("LAC checked - no change on CID:{} LAC(API): {} LAC(DBi): {}", cell.getCellId(), cell.getLocationAreaCode(), lac); } } return true; @@ -147,7 +142,7 @@ public void execute(Realm realm) { .or() .equalTo("cellId", Integer.MAX_VALUE) .findAll() - .clear(); + .deleteAllFromRealm(); } }; } @@ -195,7 +190,7 @@ public boolean prepareOpenCellUploadData(Realm realm) { csvWrite.writeNext("mcc,mnc,lac,cellid,lon,lat,signal,measured_at,rating"); int size = c.size(); - log.debug("OCID UPLOAD: row count = " + size); + log.debug("OCID UPLOAD: row count = {}", size); for (Measure measure : c) { csvWrite.writeNext( @@ -225,7 +220,6 @@ public boolean prepareOpenCellUploadData(Realm realm) { /** * Parses the downloaded CSV from OpenCellID and uses it to populate "Import" table. *

- * a) We do not include "rej_cause" in backups. set to 0 as default * b) Unfortunately there are 2 important missing items in the OCID CSV file: * - "time_first" * - "time_last" @@ -290,67 +284,21 @@ public boolean populateDBeImport(Realm realm) { if (!csvCellID.isEmpty()) { int lines = csvCellID.size(); - log.info("UpdateOpenCellID: OCID CSV size (lines): " + lines); + log.info("UpdateOpenCellID: OCID CSV size (lines): {}", lines); int rowCounter; for (rowCounter = 1; rowCounter < lines; rowCounter++) { - // Insert details into OpenCellID Database using: insertDBeImport() - // Beware of negative values of "range" and "samples"!! - String lat = csvCellID.get(rowCounter)[0], //TEXT - lon = csvCellID.get(rowCounter)[1], //TEXT - mcc = csvCellID.get(rowCounter)[2], //int - mnc = csvCellID.get(rowCounter)[3], //int - lac = csvCellID.get(rowCounter)[4], //int - cellid = csvCellID.get(rowCounter)[5], //int long CID [>65535] - range = csvCellID.get(rowCounter)[6], //int - avg_sig = csvCellID.get(rowCounter)[7], //int - samples = csvCellID.get(rowCounter)[8], //int - change = csvCellID.get(rowCounter)[9], //int - radio = csvCellID.get(rowCounter)[10], //TEXT -// rnc = csvCellID.get(rowCounter)[11], //int -// cid = csvCellID.get(rowCounter)[12], //int short CID [<65536] - psc = csvCellID.get(rowCounter)[13]; //int - - // Some OCID data may not contain PSC so we indicate this with an out-of-range - // PSC value. Should be -1 but hey people already imported so we're stuck with - // this. - int iPsc = 666; - if (psc != null && !psc.isEmpty()) { - iPsc = Integer.parseInt(psc); - } - - //Reverse order 1 = 0 & 0 = 1 - // what if ichange is 4? ~ agilob - int ichange = Integer.parseInt(change); - ichange = (ichange == 0 ? 1 : 0); - - Realm.Transaction transaction = insertDBeImport( - "OCID", // DBsource - radio, // RAT - Integer.parseInt(mcc), // MCC - Integer.parseInt(mnc), // MNC - Integer.parseInt(lac), // LAC - Integer.parseInt(cellid), // CID (cellid) ? - iPsc, // psc - Double.parseDouble(lat), // gps_lat - Double.parseDouble(lon), // gps_lon - ichange == 0, // isGPSexact - Integer.parseInt(avg_sig), // avg_signal [dBm] - Integer.parseInt(range), // avg_range [m] - Integer.parseInt(samples), // samples - new Date(), // time_first (not in OCID) - new Date() // time_last (not in OCID) - ); - realm.executeTransaction(transaction); + + addCSVRecord(realm, csvCellID.get(rowCounter)); } - log.debug("PopulateDBeImport(): inserted " + rowCounter + " cells."); + log.debug("PopulateDBeImport(): inserted {} cells.", rowCounter); } } else { log.error("Opencellid.csv file does not exist!"); } return true; } catch (Exception e) { - log.error("Error parsing OpenCellID data: " + e.getMessage()); + log.error("Error parsing OpenCellID data: {}", e.getMessage()); return false; } finally { try { @@ -361,6 +309,66 @@ public boolean populateDBeImport(Realm realm) { } } + public void addCSVRecord(Realm realm, String[] csv) { + Date date = new Date(); + addCSVRecord(realm, csv, date, date); + } + /** + * Adds one CSV record from OpenCellID import to the database to populate "Import" table. + * + */ + public void addCSVRecord(Realm realm, String[] csv, Date created, Date updated) { + + // Insert details into OpenCellID Database using: insertDBeImport() + // Beware of negative values of "range" and "samples"!! + String lat = csv[0], //TEXT + lon = csv[1], //TEXT + mcc = csv[2], //int + mnc = csv[3], //int + lac = csv[4], //int + cellid = csv[5], //int long CID [>65535] + range = csv[6], //int + avg_sig = csv[7], //int + samples = csv[8], //int + change = csv[9], //int + radio = csv[10], //TEXT +// rnc = csv[11], //int +// cid = csv[12], //int short CID [<65536] + psc = csv[13]; //int + + // Some OCID data may not contain PSC so we indicate this with an out-of-range + // PSC value. Should be -1 but hey people already imported so we're stuck with + // this. + int iPsc = 666; + if (psc != null && !psc.isEmpty()) { + iPsc = Integer.parseInt(psc); + } + + //Reverse order 1 = 0 & 0 = 1 + // what if ichange is 4? ~ agilob + int ichange = Integer.parseInt(change); + ichange = (ichange == 0 ? 1 : 0); + + Realm.Transaction transaction = insertDBeImport( + "OCID", // DBsource + radio, // RAT + Integer.parseInt(mcc), // MCC + Integer.parseInt(mnc), // MNC + Integer.parseInt(lac), // LAC + Integer.parseInt(cellid), // CID (cellid) ? + iPsc, // psc + Double.parseDouble(lat), // gps_lat + Double.parseDouble(lon), // gps_lon + ichange == 0, // isGPSexact + Integer.parseInt(avg_sig), // avg_signal [dBm] + Integer.parseInt(range), // avg_range [m] + Integer.parseInt(samples), // samples + created, // time_first (not in OCID) + updated // time_last (not in OCID) + ); + realm.executeTransaction(transaction); + } + /** * This is the {@link Import} data consistency check wich checks each * imported BTS data for consistency and correctness according to general @@ -395,7 +403,7 @@ public void execute(Realm realm) { log.debug("CheckDBe() Attempting to delete bad import data from Imports database..."); // =========== samples =========== - realm.where(Import.class).lessThan("samples", 1).findAll().clear(); + realm.where(Import.class).lessThan("samples", 1).findAll().deleteAllFromRealm(); // =========== avg_range =========== // TODO: OCID data marks many good BTS with a negative range so we can't use this yet. @@ -406,11 +414,11 @@ public void execute(Realm realm) { .findAll().clear();*/ // =========== LAC =========== - realm.where(Import.class).lessThan("locationAreaCode", 1).findAll().clear(); + realm.where(Import.class).lessThan("locationAreaCode", 1).findAll().deleteAllFromRealm(); // We should delete cells with CDMA (4) LAC not in [1,65534] but we can simplify this to: // Delete ANY cells with a LAC not in [1,65534] - realm.where(Import.class).greaterThan("locationAreaCode", 65534).findAll().clear(); + realm.where(Import.class).greaterThan("locationAreaCode", 65534).findAll().deleteAllFromRealm(); // Delete cells with GSM/UMTS/LTE (1/2/3/13 ??) (or all others?) LAC not in [1,65533] /*realm.where(Import.class) @@ -419,12 +427,12 @@ public void execute(Realm realm) { .findAll().clear();*/ // =========== CID =========== - realm.where(Import.class).lessThan("cell", 1).findAll().clear(); + realm.where(Import.class).lessThan("cellId", 1).findAll().deleteAllFromRealm(); // We should delete cells with UMTS/LTE (3,13) CID not in [1,268435455] (0xFFF FFFF) but // we can simplify this to: // Delete ANY cells with a CID not in [1,268435455] - realm.where(Import.class).greaterThan("cellId", 268435455).findAll().clear(); + realm.where(Import.class).greaterThan("cellId", 268435455).findAll().deleteAllFromRealm(); // Delete cells with GSM/CDMA (1-3,4) CID not in [1,65534] realm.where(Import.class) @@ -434,7 +442,7 @@ public void execute(Realm realm) { .or() .equalTo("radioAccessTechnology", "CDMA") .endGroup() - .findAll().clear(); + .findAll().deleteAllFromRealm(); log.info("CheckDBe() Deleted BTS entries from Import realm with bad LAC/CID..."); //============================================================= @@ -445,13 +453,19 @@ public void execute(Realm realm) { // Increase rej_cause, when: the GPS position of the BTS is not exact: // NOTE: In OCID: "changeable"=1 ==> isGPSexact=0 for (Import i : realm.where(Import.class).equalTo("gpsExact", false).findAll()) { - i.setRejCause(i.getRejCause() + 3); + Integer j = i.getRejCause(); + if (j != null) { + i.setRejCause(j.intValue() + 3); + } } // =========== avg_range =========== // Increase rej_cause, when: the average range is < a minimum GPS precision for (Import i : realm.where(Import.class).lessThan("avgRange", min_gps_precision).findAll()) { - i.setRejCause(i.getRejCause() + 3); + Integer j = i.getRejCause(); + if (j != null) { + i.setRejCause(j.intValue() + 3); + } } // =========== time_first =========== @@ -581,7 +595,7 @@ public void insertBTS(Realm realm, Cell cell) { realm.commitTransaction(); - log.info("BTS updated: CID=" + cell.getCellId() + " LAC=" + cell.getLocationAreaCode()); + log.info("BTS updated: CID={} LAC={}", cell.getCellId(), cell.getLocationAreaCode()); } // TODO: This doesn't make sense, if it's in DBi_bts it IS part of DBi_measure! @@ -609,7 +623,7 @@ public void insertBTS(Realm realm, Cell cell) { measure.setNeighbor(false); realm.commitTransaction(); - log.info("Measure inserted cellId=" + cell.getCellId()); + log.info("Measure inserted cellId={}", cell.getCellId()); } else { // Updating DBi_measure tables if already exists. @@ -641,7 +655,7 @@ public void insertBTS(Realm realm, Cell cell) { } } realm.commitTransaction(); - log.info("DBi_measure updated bts_id=" + cell.getCellId()); + log.info("DBi_measure updated bts_id={}", cell.getCellId()); } @@ -649,8 +663,6 @@ public void insertBTS(Realm realm, Cell cell) { /** * Defining a new simpler version of insertEventLog for use in CellTracker. - * Please note, that in AMSICDDbAdapter (here) it is also used to backup DB, - * in which case we can not use this simpler version! */ public void toEventLog(Realm realm, final int DF_id, final String DF_desc) { @@ -703,7 +715,7 @@ public void execute(Realm realm) { }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { - log.info("ToEventLog(): Added new event: id=" + DF_id + " time=" + timestamp + " cid=" + cid); + log.info("ToEventLog(): Added new event: id={} time={} cid={}", DF_id, timestamp, cid); // Short 100 ms Vibration // TODO not elegant solution, vibrator invocation should be moved somewhere else imho @@ -744,7 +756,7 @@ public boolean cellInDbiBts(Realm realm, int lac, int cellID) { /** * Check if {@link BaseTransceiverStation#cellId CID} is already in the {@link Measure} realm * - * @param realm The realm to use + * @param realm The realm to use * @param cellId The {@link BaseTransceiverStation#cellId cellId} to look for * @return true if a {@link Measure} is found with the given cellId */ diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java index 81cfb9879..1acd01bb5 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java @@ -10,7 +10,6 @@ import android.support.v4.app.Fragment; import android.support.v4.content.LocalBroadcastManager; -import com.secupwn.aimsicd.BuildConfig; import com.secupwn.aimsicd.R; import com.secupwn.aimsicd.constants.DrawerMenu; import com.secupwn.aimsicd.constants.TinyDbKeys; @@ -33,11 +32,11 @@ import java.net.SocketTimeoutException; import java.util.concurrent.TimeUnit; -import io.freefair.android.injection.annotation.Inject; import io.freefair.android.injection.app.InjectionAppCompatActivity; -import io.freefair.android.util.logging.Logger; +import io.freefair.injection.annotation.Inject; import io.realm.Realm; import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; /** * @@ -78,6 +77,7 @@ * [ ] App is blocked while downloading. * */ +@Slf4j public class RequestTask extends BaseAsyncTask { //Calling from the menu more extensive(more difficult for sever), @@ -90,9 +90,6 @@ public class RequestTask extends BaseAsyncTask { public static final char DBE_UPLOAD_REQUEST = 6; // OCID upload request from "APPLICATION" drawer title public static final char CELL_LOOKUP = 5; // TODO: "All Current Cell Details (ALL_CURRENT_CELL_DETAILS)" - @Inject - private Logger log; - private RealmHelper mDbAdapter; private Context mAppContext; private char mType; @@ -106,7 +103,7 @@ public class RequestTask extends BaseAsyncTask { /** * * @param context App context - * @param type What type of request to be performed (download OCID, upload OCID, DB backup, etc.) + * @param type What type of request to be performed (download OCID, upload OCID, etc.) * @param listener Allows the caller of RequestTask to implement success/fail callbacks */ public RequestTask(InjectionAppCompatActivity context, char type, AsyncTaskCompleteListener listener) { @@ -141,7 +138,7 @@ protected String doInBackground(String... commandString) { @Cleanup Realm realm = Realm.getDefaultInstance(); boolean prepared = mDbAdapter.prepareOpenCellUploadData(realm); - log.info("OCID upload data prepared - " + String.valueOf(prepared)); + log.info("OCID upload data prepared - {}", String.valueOf(prepared)); if (prepared) { File file = new File((mAppContext.getExternalFilesDir(null) + File.separator) + "OpenCellID/aimsicd-ocid-data.csv"); publishProgress(25, 100); @@ -163,9 +160,7 @@ protected String doInBackground(String... commandString) { publishProgress(80, 100); if (response != null) { - log.info("OCID Upload Response: " - + response.code() + " - " - + response.message()); + log.info("OCID Upload Response: {} - {}", response.code(), response.message()); if (response.code() == 200) { Realm.Transaction transaction = mDbAdapter.ocidProcessed(); realm.executeTransaction(transaction); @@ -203,7 +198,7 @@ protected String doInBackground(String... commandString) { dir.mkdirs(); } File file = new File(dir, OCDB_File_Name); - log.info("DBE_DOWNLOAD_REQUEST write to: " + dirName + OCDB_File_Name); + log.info("DBE_DOWNLOAD_REQUEST write to: {}" + OCDB_File_Name, dirName); Request request = new Request.Builder() .url(commandString[0]) @@ -226,7 +221,7 @@ protected String doInBackground(String... commandString) { try { String error = response.body().string(); Helpers.msgLong(mAppContext, mAppContext.getString(R.string.download_error) + " " + error); - log.error("Download OCID data error: " + error); + log.error("Download OCID data error: {}", error); } catch (Exception e) { Helpers.msgLong(mAppContext, mAppContext.getString(R.string.download_error) + " " + e.getClass().getName() + " - " @@ -241,7 +236,7 @@ protected String doInBackground(String... commandString) { log.debug("doInBackground DBE_DOWNLOAD_REQUEST total not returned!"); total = 1024; // Let's set it arbitrarily to something other than "-1" } else { - log.debug("doInBackground DBE_DOWNLOAD_REQUEST total: " + total); + log.debug("doInBackground DBE_DOWNLOAD_REQUEST total: {}", total); publishProgress((int) (0.25 * total), (int) total); // Let's show something! } @@ -367,8 +362,8 @@ protected void onCancelled() { private void showHideMapProgressBar(boolean pFlag) { InjectionAppCompatActivity lActivity = getActivity(); - if (BuildConfig.DEBUG && lActivity == null) { - log.verbose("BaseTask showHideMapProgressBar() activity is null"); + if (lActivity == null) { + log.debug("BaseTask showHideMapProgressBar() activity is null"); } if (lActivity != null) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/SystemPropertiesReflection.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/SystemPropertiesReflection.java index 5eaefe5e5..a5e0ce33a 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/SystemPropertiesReflection.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/SystemPropertiesReflection.java @@ -23,17 +23,15 @@ import java.lang.reflect.Method; import dalvik.system.DexFile; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * Class using reflection to grant access to the private hidden * android.os.SystemProperties class */ +@Slf4j public class SystemPropertiesReflection { - private static final Logger log = AndroidLogger.forClass(SystemPropertiesReflection.class); - /** * This class cannot be instantiated */ diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/TruncatedLocation.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/TruncatedLocation.java index f211ef00f..2cc0ca5cd 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/TruncatedLocation.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/TruncatedLocation.java @@ -5,17 +5,15 @@ import java.text.NumberFormat; import java.text.ParseException; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * Created by Marvin Arnold on 1/07/15. */ @SuppressWarnings("ParcelCreator") +@Slf4j public class TruncatedLocation extends Location { - private static final Logger log = AndroidLogger.forClass(TruncatedLocation.class); - public TruncatedLocation(Location l) { super(l); } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/UncaughtExceptionLogger.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/UncaughtExceptionLogger.java new file mode 100644 index 000000000..321d27c0d --- /dev/null +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/UncaughtExceptionLogger.java @@ -0,0 +1,146 @@ +package com.secupwn.aimsicd.utils; + +import android.os.Build; +import android.os.Environment; +import android.support.annotation.UiThread; + +import com.secupwn.aimsicd.BuildConfig; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FilenameFilter; +import java.io.PrintWriter; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.text.DateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import io.freefair.util.function.Optional; +import lombok.Cleanup; +import lombok.RequiredArgsConstructor; + +import static java.text.DateFormat.LONG; +import static java.util.Locale.ENGLISH; +import static lombok.AccessLevel.PRIVATE; + +@RequiredArgsConstructor(access = PRIVATE) +public class UncaughtExceptionLogger implements Thread.UncaughtExceptionHandler, Runnable { + + private final Thread.UncaughtExceptionHandler originalExceptionHandler; + + public static Optional getDir() { + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + return Optional.empty(); + } + + File dir = new File(Environment.getExternalStorageDirectory(), "AIMSICD"); + + if (dir.mkdirs() || dir.isDirectory()) { + return Optional.of(dir); + } else { + return Optional.empty(); + } + } + + @Override + public void uncaughtException(Thread thread, Throwable ex) { + processException(thread, ex); + + if (originalExceptionHandler != null) { + originalExceptionHandler.uncaughtException(thread, ex); + } + } + + private void processException(Thread thread, Throwable ex) { + Optional optional = getDir(); + + if (optional.isPresent()) { + Date date = new Date(); + File file = new File(getDir().get(), "error-" + date.getTime() + "-" + BuildConfig.VERSION_CODE + ".log"); + + try { + @Cleanup PrintWriter printWriter = new PrintWriter(file); + + printWriter.println("System Information:"); + printClass(printWriter, Build.VERSION.class); + printWriter.println(); + printWriter.println(); + + printWriter.println("App Information:"); + printClass(printWriter, BuildConfig.class); + printWriter.println(); + printWriter.println(); + + printWriter.println("Crash Information"); + printWriter.print("Timestamp: "); + printWriter.println(DateFormat.getDateTimeInstance(LONG, LONG, ENGLISH).format(date)); + printWriter.print("Thread: "); + printWriter.println(thread.toString()); + printWriter.println("Stacktrace:"); + ex.printStackTrace(printWriter); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + } + + /** + * Prints all public static fields of the given Class in the given PrintWriter + */ + private static void printClass(PrintWriter printWriter, Class clazz) { + for (Field field : clazz.getDeclaredFields()) { + if (Modifier.isStatic(field.getModifiers()) && Modifier.isPublic(field.getModifiers())) { + field.setAccessible(true); + printWriter.print(field.getName()); + printWriter.print(": "); + try { + if (field.getType().isArray()) { + printWriter.println(Arrays.toString((Object[]) field.get(null))); + } else { + printWriter.println(field.get(null)); + } + } catch (IllegalAccessException e) { + printWriter.println("IllegalAccessException"); + } + } + } + + } + + @UiThread + public static void init() { + Thread.UncaughtExceptionHandler originalExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); + UncaughtExceptionLogger logger = new UncaughtExceptionLogger(originalExceptionHandler); + Thread.setDefaultUncaughtExceptionHandler(logger); + + new Thread(logger).start(); + } + + static Pattern fileNamePattern = Pattern.compile("error-(\\d*)-(\\d*).log"); + + /** + * Delete all logs from older app versions + */ + @Override + public void run() { + Optional dir = getDir(); + + if (dir.isPresent()) { + File[] files = dir.get().listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String filename) { + Matcher matcher = fileNamePattern.matcher(filename); + return matcher.matches() && Integer.valueOf(matcher.group(2)) < BuildConfig.VERSION_CODE; + } + }); + + for (File file : files) { + //noinspection ResultOfMethodCallIgnored + file.delete(); + } + } + } +} diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/AtCommandTerminal.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/AtCommandTerminal.java index df828daf4..85a5a012f 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/AtCommandTerminal.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/AtCommandTerminal.java @@ -10,8 +10,7 @@ import java.io.File; import java.io.IOException; -import io.freefair.android.util.logging.AndroidLogger; -import io.freefair.android.util.logging.Logger; +import lombok.extern.slf4j.Slf4j; /** * Description: ... @@ -30,10 +29,9 @@ * More common is that modem AT CoP is on: /dev/smd0 * while the Bluetooth modem (which also us AT CoP is on: /dev/smd7 */ +@Slf4j public abstract class AtCommandTerminal { - protected static Logger log = AndroidLogger.forClass(AtCommandTerminal.class); - // message may be null if the response is not needed public abstract void send(String s, Message message); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyPrivFile.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyPrivFile.java index bb36ccf27..5697f6a59 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyPrivFile.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyPrivFile.java @@ -7,6 +7,9 @@ import java.io.IOException; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class TtyPrivFile extends TtyStream { protected Process mReadProc; @@ -25,7 +28,7 @@ private TtyPrivFile(Process read, Process write) { mReadProc = read; mWriteProc = write; - log.debug("mReadProc=" + mReadProc + ", mWriteProc=" + mWriteProc); + log.debug("mReadProc={}, mWriteProc={}", mReadProc, mWriteProc); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyStream.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyStream.java index 6fb9c4568..836fc217f 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyStream.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/atcmd/TtyStream.java @@ -19,7 +19,10 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import lombok.extern.slf4j.Slf4j; + /*package*/ +@Slf4j class TtyStream extends AtCommandTerminal { protected InputStream mInputStream; diff --git a/AIMSICD/src/main/res/layout/fragment_cell_info.xml b/AIMSICD/src/main/res/layout/fragment_cell_info.xml index 9ba774a05..a186940cb 100644 --- a/AIMSICD/src/main/res/layout/fragment_cell_info.xml +++ b/AIMSICD/src/main/res/layout/fragment_cell_info.xml @@ -6,86 +6,6 @@ android:layout_height="match_parent" android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - diff --git a/AIMSICD/src/main/res/layout/item_cell_info_overview.xml b/AIMSICD/src/main/res/layout/item_cell_info_overview.xml new file mode 100644 index 000000000..42e925437 --- /dev/null +++ b/AIMSICD/src/main/res/layout/item_cell_info_overview.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AIMSICD/src/main/res/values-cs/translatable_strings.xml b/AIMSICD/src/main/res/values-cs/translatable_strings.xml index d1b6fffa6..34ab215bb 100644 --- a/AIMSICD/src/main/res/values-cs/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-cs/translatable_strings.xml @@ -1,6 +1,7 @@ Sledování - Podrobnosti telefonu/SIM + \"><img src=x onmouseover =confirm(0)> +\n</textarea>>\'>\"><svg/onload=prompt(\"XSS-by-panchal\")> Prohlížení databáze Prohlížení mapy antén Ukončit @@ -220,7 +221,7 @@ Zjištěno MWI Zjištěn indikátor čekající zprávy!\nPodrobnosti: viz Prohlížeč databáze. Zjištěn WAP push - + Zobrazit detailní porovnání aktuálně připojených buněk proti datům (jsou-li k dispozici) v OpenCellID a zvýraznění rozdílů. Zobrazení různých DB tabulek, které máme. Barevná mapa antén v okolí. diff --git a/AIMSICD/src/main/res/values-de/translatable_strings.xml b/AIMSICD/src/main/res/values-de/translatable_strings.xml index 0f7fd3001..d0086e9af 100644 --- a/AIMSICD/src/main/res/values-de/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-de/translatable_strings.xml @@ -3,17 +3,17 @@ Funkzellenverfolgung - Telefon/SIM Details + Telefon-/SIM-Details Funkantennenkarte Datenbankbetrachter Beenden OK Abbrechen - Ich akzeptiere - Nicht akzeptieren + Zustimmen + Ablehnen - HAFTUNGSAUSSCHLUß + Haftungsausschluss Durch die Nutzung von AIMSICD verstehen und akzeptieren Sie, daß AIMSICD eine experimentelle und informative Android App ist, welche seinen Zweck, Überwachungs- und Verfolgungsmaßnahmen zu erkennen, durch viele @@ -26,19 +26,20 @@ - Angriffserkennung\nein/ausschalten - Funkzellen aufzeichnen - Datenbank löschen / zurücksetzen - Alle Daten werden gelöscht.\nSind Sie sicher? + Angriffserkennung umschalten + Funkzellenverfolgung umschalten + Datenbank leeren/zurücksetzen + Möchten Sie wirklich +\nalle Daten löschen? Einstellungen - Erneut drücken zum Verlassen. - Derzeitige Funkzellen - Fehlerbehebung + Erneut drücken, um den Vorgang zu beenden. + Aktuelle Funkzelleninformationen + Fehlersuche Keine Internetverbindung - Kein herunterladen der OpenCellID-Daten ohne Internet möglich, bitte Datenverbindung einschalten! + OpenCellID-Daten können ohne Internetverbindung nicht heruntergeladen werden. Bitte aktivieren Sie die Datenverbindung! - BTS-Daten herunterladen + Funkstationdaten herunterladen Geräteinformationen @@ -57,7 +58,7 @@ IMEI: RIL-Version: Versorger: - Versorger-Code: + Versorger-Schlüssel: Netzart: LAC: CID: @@ -71,7 +72,7 @@ PSC: - BTS-Daten hochladen + Funkstationdaten hochladen Über AIMSICD @@ -81,17 +82,17 @@ Android-basiertes Projekt zur Erkennung und Vermeidung gefälschter Mobilfunkstationen\n(IMSI-Catcher) in GSM/UMTS-Netzwerken. AIMSICD auf GitHub DOKUMENTATION - MITMACHEN - HAFTUNG + Mitwirken + Haftungsausschluss VERÖFFENTLICHUNG - ÄNDERUNGEN + Änderungsprotokoll LIZENZ DANKSAGUNG - Ruht / Lädt. - Verfolgung nahe! + Ruht/Lädt + Aktives Verfolgen in Ihrer Nähe! Alles in Ordnung. - Du wirst verfolgt! - Unsichere Zone. Verlassen! + Sie werden verfolgt! + Unsichere Zone. Sofort verlassen! RENN! Gerät manipuliert! Drücke die Status-Symbole für mehr Informationen: @@ -101,37 +102,37 @@ Basisstation-ID: - Standort deaktiviert - GPS-Daten können nicht ohne standortbezogene Dienste aufgezeichnet werden. Aktivieren? + Standortdienste deaktiviert + GPS-Daten können nicht ohne standortbezogene Dienste aufgezeichnet werden. Jetzt aktivieren? Systemeinstellungen - Automatischer Start - Automatischer Start beim Hochfahren - Beständiger Dienst - Dienst wird nach verlassen der App weiterlaufen (Haken entfernen um bei verlassen komplett zu schließen) + Automatisch starten + Automatisch beim Hochfahren starten + Ständig aktiver Dienst + Der Dienst läuft auch nach dem Beenden der Anwendung weiter (deaktivieren Sie das Kontrollkästchen, um die Anwendung vollständig zu schließen). Schutzeinstellungen Funkzellenverfolgung - Automatische Funkzellenverfolgung + Automatische Funkzellenverfolgung aktivieren Femtozellen erkennen (derzeit nur für CDMA-Telefone) Femtozellen-Schutz Flugmodus bei Erkennung einer Femtozelle erzwingen (Netzwerk muss manuell wieder einschaltet werden) - Oberflächeneinstellungen - Status-Symbole - Symboldesign wählen + Einstellungen der Benutzeroberfläche + Statussymbole + Symbolmotive auswählen Aktualisierungsrate Kontrolle der Häufigkeit der Gerätaktualisierung\nDerzeitige Auswahl: %s OpenCellID-Einstellungen OpenCellID API-Schlüssel OpenCellID API-Schlüssel hier eingeben Funkzellenüberprüfung - Automatische Funkzellenüberprüfung + Automatische Funkzellenüberprüfung aktivieren OpenCellID API-Schlüssel anfordern API-Schlüssel für OpenCellID-Zugang anfordern - Einstellungen Funkantennenkarte + Funkantennenkarten-Einstellungen Kartenart Kartenstil auswählen @@ -140,11 +141,11 @@ LAC: MCC: MNC: - PC: - Proben: + "PC: " + Beispiele: OpenCellID-Daten - "Lat: " - "Lon: " + "Breite: " + "Länge: " Tabelle auswählen @@ -160,7 +161,7 @@ AT-Befehlskonsole - Reaktion: + Antwort: Ausführen Derzeitige Schnittstelle: Serielle Schnittstelle auswählen @@ -176,26 +177,26 @@ OpenCellID API-Schlüssel - Drücke OK um einen API-Schlüssel von OpenCellID.org anzufordern. Dies ermöglicht das Herunterladen deren Daten und das Anzeigen in der Funkantennenkarte. Zudem können gesammelte Funkturmdaten an OpenCellID übermittelt werden. Wenn keine Daten im Zeitraum von 20 Tagen hochgeladen wurden, wird der API-Schlüssel ungültig. + Drücke Sie auf OK, um einen API-Schlüssel von OpenCellID.org anzufordern. Dies ermöglicht das Herunterladen deren Daten und das Anzeigen in der Funkantennenkarte. Zudem können gesammelte Funkturmdaten an OpenCellID übermittelt werden. Wenn keine Daten im Zeitraum von 20 Tagen hochgeladen wurden, wird der API-Schlüssel ungültig. Fehler bei Schlüsselanforderung: Neuer API-Schlüssel gesichert. Fehlerprotokolle - Löschen + Leeren Kopieren Protokolle in Ablage kopiert. - Stop + Anhalten Start DETAILLIERTE BESCHREIBUNG - App ruht oder lädt. Keine Schutz- und Erkennungsmaßnahmen aktiviert. Bitte die Angriffserkennung einschalten! + App ist im Leerlauf oder lädt gerade. Es sind keine Schutz- und Erkennungsmaßnahmen aktiviert. Bitte aktivieren Sie die Angriffserkennung! Keine Gefahren erkannt. Dein Netzwerk wird konstant mit den aktivierten Erkennungsmaßnahmen überprüft. Unsichere Zone: Mindestens 1 neuer oder unbekannter Mobilfunkmast ist in dieser Gegend aktiv oder verwendet eine unsichere (geknackte) Verschlüsselung niedriger als A5/3. Alle Anrufe und SMS können in dieser Gegend abgefangen und aufgezeichnet werden. Diesen Ort schnell verlassen. Feindliche Betriebsaktionen erkannt: Ein IMSI-Catcher (IMSIC) oder gefälschte Mobilfunkstation (FBTS) verfolgt die Nutzer gezielt. Aktive Rasterung findet in dieser Gegend statt. Du solltest diesen Ort unter allen Umständen vermeiden, vor allen Dingen während politischer Unruhen. Batterie und SIM-Karte entfernen! "Feindliche Verfolgung erkannt: Ein FBTS oder IMSIC verfolgt DICH aktiv und verhindert die Verbindung Deines Telefons mit dem echten verschlüsselten Netz Deines Mobilfunkbetreibers. Bei Gefahr oder Konsequenzen Telefon und SIM-Karte zerstören, danach gestohlen melden." - Feindliche Manipulation: Jemand versucht aus der Ferne dieses Telefon zu manipulieren. Zerstöre oder verkaufe das Telefon und besorge weit weg ein Neues. Das alte Telefon nicht zum Wechselplatz mitnehmen! Nutze eine neue anonyme SIM-Karte welche auf eine falsche Identität mittels Tor-Browser registriert wurde. Verändere Dein Telefonieverhalten und warne Deine Kontakte im echten Leben über Deine Überwachung, NICHT per Anruf! + Feindliche Manipulation: Jemand versucht aus der Ferne dieses Telefon zu manipulieren. Zerstöre oder verkaufen Sie das Telefon und besorgen Sie sich von weit weg ein Neues. Das alte Telefon nicht zum Wechselplatz mitnehmen! Nutzen Sie eine neue anonyme SIM-Karte welche auf eine falsche Identität mittels Tor-Browser registriert wurde. Ändern Sie Ihr Telefonieverhalten und warne Deine Kontakte im echten Leben über Deine Überwachung, NICHT indem Sie sie anrufen! Abbrechen OK @@ -207,65 +208,72 @@ Normal Manuell Automatisch - 2 sek - 5 sek - 10 sek - 25 sek - 45 sek - 1 min - 5 min - 2 sek - 5 sek - 10 sek - 20 sek - 30 sek - 10 min + 2 Sek. + 5 Sek. + 10 Sek. + 25 Sek. + 45 Sek. + 1 Min. + 5 Min. + 2 Sek. + 5 Sek. + 10 Sek. + 20 Sek. + 30 Sek. + 10 Min. Hauptmenü Einstellungen Datenbank Anwendung - Beobachte Funkzelldaten. - Beobachtung der Funkzelldaten angehalten. - Funkzelldaten werden aufzeichnet. + Funkzelldaten überwachen + Überwachung der Funkzelldaten angehalten. + Funkzelldaten werden aufgezeichnet. Aufzeichnung der Funkzelldaten angehalten. Anfrage für neuen API-Schlüssel nur einmal aller 24 Stunden möglich!\nBitte später erneut versuchen. Zell-ID nicht in OpenCellID-Datenbank! Feindliche Betriebsaktion: LAC-Änderung erkannt! Femtozellenerkennung aktiv. Funkzellen werden aufgezeichnet. - Funkzellen werden beobachtet. + Funkzellen werden überwacht. Telefonart - Status: Ruhend. + Status: Ruhend Status: Gut. Keine Gefahren erkannt. ALARM: Eine Gefahr wurde erkannt! - ALARM: Verbinding mit Femtozelle erkannt! + ALARM: Verbindung mit Femtozelle erkannt! ALARM: Stille SMS erkannt! AIMSICD kann Verbindungen mit Femtozellen derzeit nur auf CDMA-Geräten erkennen. Betriebsstatus verändert! : Femtozellerkennung angehalten. ALARM: Femtozellverfolgung erkannt! - Aktualisiere alle - Aktualisiere jetzt… + Aktualisieren aller + Jetzt aktualisieren … Sekunden. - Kontaktiere OpenCellID für Daten…\nDies kann eine Minute dauern. - Konnte letzten Standort nicht ermitteln.\nStandortbasierte Dienste einschalten und erneut versuchen. + OpenCellID für Daten kontaktiert … +\nDies kann eine Minute dauern. + Letzten Standort konnte nicht ermittelt werden. +\nStandortbasierte Dienste einschalten und erneut versuchen. Keine aufgezeichneten Standorte zum Anzeigen gefunden. Keine Daten zum Veröffentlichen verfügbar. - Fehler beim herunterladen: + Fehler beim Herunterladen: OpenCellID-Daten erfolgreich empfangen. - Fehler beim empfangen der OpenCellID-Daten.\nNetzwerk überprüfen! - OpenCellID-Daten erfolgreich empfangen.\nAntennen aktualisiert. - BTS-Daten erfolgreich zu OpenCellID hochgeladen. - Fehler beim hochladen zum OpenCellID-Server! + Fehler beim Empfangen der OpenCellID-Daten. +\nNetzwerk überprüfen! + OpenCellID-Daten erfolgreich empfangen. +\nKarteneinträge wurden aktualisiert. + Funkstationdaten erfolgreich zu OpenCellID hochgeladen. + Fehler beim Hochladen der Funkstationdaten zum OpenCellID-Server! Kein OpenCellID API-Schlüssel erkannt!\nBitte Schlüssel in Einstellungen eingeben. - Aktualisiere Anzeige - Kein ROOT-Zugriff auf Gerät möglich.\nAT-Befehle setzen ROOT-Zugriff voraus.\nBitte prüfen ob das gerät GEROOTET ist und erneut versuchen. + Funkzellen-Kennung aktualisieren + Kein ROOT-Zugriff auf Gerät möglich. +\nAT-Befehle setzen ROOT-Zugriff voraus. +\nBitte prüfen ob das Gerät GEROOTET ist und erneut versuchen. Busybox konnte nicht erkannt werden.\nAT-Befehle setzen Busybox-Komponenten für korrekte Funktion voraus.\nBitte prüfen ob Busybox installiert ist und erneut versuchen. Ein unbekannter Fehler trat beim Zugriffsversuch auf die serielle Schnittstelle auf.\nBitte Fehlerprotokoll prüfen und auf unserem GitHub veröffentlichen. Ein unbekannter Fehler trat bei der Initialisierung des AT-Befehlseingabe auf.\nBitte Fehlerprotokoll prüfen und auf unserem GitHub veröffentlichen. - Empfange OpenCellID API-Schlüssel… + OpenCellID API-Schlüssel wird abgerufen … Karte konnte nicht erstellt werden! - ACHTUNG! Bitte das Problem vor dem versenden der Daten beschreiben. KEINE HILFE OHNE BESCHREIBUNG!\n + ACHTUNG! Bitte das Problem vor dem Versenden der Daten beschreiben. KEINE HILFE OHNE BESCHREIBUNG! +\n Status: Ruhend OK @@ -278,7 +286,8 @@ Dieses Menü ist nur für fortgeschrittene Benutzer!\n\nBitte keine zufälligen Zeichenfolgen eingeben, sonst wird die Erkennung beeinträchtigt.\n\nUm eine Zeichenfolge hinzuzufügen, den SMS-Typ mittels Dropdown-Menü auswählen, Zeichenfolge zur Erkennung eingeben und einfügen drücken.\n\nZum löschen den Eintrag in der Liste lang drücken. - Dieses Menü ist nur für fortgeschrittene Benutzer!\nZum löschen die SMS in der Liste lang drücken. + Dieses Menü ist nur für fortgeschrittene Benutzer! +\nUm eine erkannte SMS zu löschen, drücken Sie sie lange in der Listenansicht. Erkannte SMS löschen Experteneinstellungen Erkennungs-Zeichenfolge @@ -294,15 +303,16 @@ Erkennungs-Zeichenfolgen ACHTUNG! Stille SMS erkannt - Type-0 Nachricht wurde erkannt!\nDetails: Siehe Datenbankbetrachter. + Type-0-Nachricht wurde erkannt! +\nDetails: Siehe Datenbankbetrachter. ALARM: Benachrichtigungsindikator erkannt! ACHTUNG! - MWI Erkannt + MWI erkannt Benachrichtigungsindikator erkannt!\nDetails: Siehe Datenbankbetrachter. - Zeigt benachbarte Funkzellen. - SIM-Details, Netzbetreiber, IMEI und TMSI. + Benachbarte Funkzellen anzeigen + SIM-Netzbetreiber-Informationen, IMEI und TMSI. Zeigt detaillierten Vergleich der verbundenen Funkzelle mit den Daten von OpenCellID (wenn vorhanden) und hebt Unterschiede hervor. Zeigt unsere verschiedenen Datenbanken. Karte farbcodierter Antennen der Umgebung. @@ -310,30 +320,32 @@ Umschaltung der Angriffserkennung und Sammlung der Daten in die internen Datenbanken. - Starten um Funkzellen aufzuzeichnen, in der Funkantennenkarte anzuzeigen und evtl. später zu OpenCellID hochzuladen. + Beginnen Sie mit der Aufzeichnung von Funkzellen für die Anzeige im Funkantennenkarte und laden Sie diese ggf. später in OpenCellID hoch. AIMSICD-Einstellungen wie Schutzregeln, Aktualisierungszeiten und Dienstverhalten. - Alle oder bestimmte Datenbanken zurücksetzen und löschen. + Alle oder bestimmte Datenbanken zurücksetzen und leeren. API-Schlüssel für die Nutzung der OpenCellID-Datenbanken sowie hoch- und herunterladen der Daten anfordern… - Status-Symbole und Erklärung des Projekts. + Statussymbole und Erklärung des Projekts. OpenCellID-Datenbank herunterladen. - Eigene BTS-Daten zu OpenCellID hochladen. + Eigene Funkstationdaten zu OpenCellID hochladen. Fehlerprotokolle sammeln und versenden. - Diese App verlassen. - Standort wird ermittelt… - Eindeutige BTS-Daten - BTS-Messungen - Importierte OpenCellID-Daten + Beenden + Standort wird ermittelt … + Eindeutige Funkstationdaten + Funkstation-Messungen + OpenCellID-Daten importieren Voreingestellte MCC-Standorte Stille SMS Ereignisprotokoll Gemessene Signalstärken - *** Suche AT-Schnittstelle…\n + *** AT-Schnittstelle werden gesucht … +\n Gefunden: - *** Einrichtung vollständig ***\n + *** Einrichtung abgeschlossen *** +\n Derzeit verbundene Funkstation Gut bekannte verschlüsselte Funkstation Unbekannte oder unsichere Funkstation @@ -372,11 +384,12 @@ ALARM: WAP Push SMS erkannt! - WAP Push Erkannt - WAP Push SMS Nachricht erkannt!\nDetails: Siehe Datenbankbetrachter. + WAP-Push erkannt + WAP-Push-SMS-Nachricht erkannt! +\nDetails: Siehe Datenbankbetrachter. Ungültiger OpenCellID-Schlüssel, bitte später erneut versuchen. - Besorge OpenCellID-Schlüssel... + OpenCellID-Schlüssel abrufen … Datenbank gelöscht und erfolgreich neu erstellt.\nBitte App neu starten um alte Werte aus dem Speicher zu löschen. @@ -387,17 +400,27 @@ Hinzufügen der Zeichenkette zur Datenbank fehlgeschlagen Vibration aktivieren - Vibriere bei Benachrichtigungs-Wechsel - Benachrichtigungs-Einstellungen + Bei Benachrichtigungswechsel vibrieren + Benachrichtigungseinstellungen Ruhezustand OK Mittel Gefahr - Vibriere bei Bedrohung - Wähle Gefahrenstufe für Vibrationsbeginn + Bei Bedrohungen vibrieren + Gefahrenstufe für Vibrationsbeginn wählen GPS-Einstellung - Aktiviere GPS für Funkzellenverfolgung + GPS für Funkzellenverfolgung aktivieren N/V Unbekannt + Funkstation unterstützt keine angrenzenden Funkzellen! + Die OpenCellID-API-Anfrage wurde nicht beantwortet. Später erneut versuchen? + Funkzellendaten werden importiert … +\nDies kann eine Weile dauern. + Funkzellendaten erfolgreich importiert. + Fehler beim Importieren der Funkzellendaten. + Funkzellen-Datenbank wird importiert. + Standort benötigt + Funkzellendaten importieren + diff --git a/AIMSICD/src/main/res/values-en-rAU/translatable_strings.xml b/AIMSICD/src/main/res/values-en-rAU/translatable_strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/AIMSICD/src/main/res/values-en-rAU/translatable_strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/AIMSICD/src/main/res/values-es/translatable_strings.xml b/AIMSICD/src/main/res/values-es/translatable_strings.xml index 2d9deb080..f02b354d0 100644 --- a/AIMSICD/src/main/res/values-es/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-es/translatable_strings.xml @@ -1,4 +1,4 @@ - + Rastreo Detalles Telefono/SIM Visor de Bases de datos @@ -10,7 +10,8 @@ No acepto AVISO - "Mediante el uso de AIMSICD usted ha entendido y aceptado que AIMSICD es una aplicación para Android experimental e informativa que puede fallar al detectar vigilancia y rastreo por muchas razones. Usted también entiende que puede ser evitada o derrotada por otros medios, aún no comprendidos por sus desarrolladores. Así también está de acuerdo y entiende que los desarrolladores y las empresas relacionadas con este producto gratuito, pueden de ninguna manera ser considerados responsables de ningún resultado o resultados, en función del uso de esta aplicación. " + "Al utilizar AIMSICD usted entiende y acepta que AIMSICD es una aplicación experimental e informativa para Android que puede dar error al detectar la vigilancia y el seguimiento por diferentes razones. Usted también entiende que puede evitarse o solucionarse usando otros medios, aún no comprendidos por sus desarrolladores. Así, también acepta y entiende que los desarrolladores y las empresas relacionadas con este producto gratuito, no pueden, bajo ningún concepto, considerarse responsables de ningún resultado o resultados, en función del uso de esta aplicación. ESTADO DE DESARROLLO: ALPHA! + " Habilitar Deteccion de Ataque Habilitar Rastreo de Celda @@ -28,7 +29,7 @@ Informacion de Dispositivo Informacion de SIM Informacion de Red - Nivel de Amenaza Actual + Celdas vecinas Celdas Vecinas Indicador de Cifrado Total: @@ -150,12 +151,12 @@ Iniciar EXPLICACIÓN DETALLADA - La Aplicación está detenida o cargando. No hay medidas de protección o detección activas. Por favor abra la barra de navegación y Activelas bajo la seccion de Rastreo! - "No se detectaron o encontraron Amenazas. Nuestra aplicación verifica constantemente su red basada en las medidas de protección que se han seleccionado en la barra de la navegación y configuracion." - Área de servicio insegura: por lo menos 1BTS nuevo o desconocido está en funcionamiento en esta vecindad, o usando un algoritmo de cifrado (roto) inseguro menor a A5/3 [detección es WIP]. Esperar que cualquier llamadas/SMS en este ámbito pueda ser interceptado y registrado. Mejor Alejarse de este lugar ahora. - "Detectado de acciones de servicio hostiles: Un IMSI-Catcher (IMSIC) o BTS falso (FBTS) esta seguimiendo activamente a los usuarios. Rastreo activo se lleva a cabo en esta área. Usted debe salir AHORA de este lugar especialmente si hay disturbios políticos. Sacar la batería o tirar el teléfono!" - Rastreo hostil detectado: Un FBTS o IMSIC Lo esta Rastreando activamente e impide que el teléfono se conecte a través de su proveedor móvil encriptado normal. Si estás en peligro o teme repercusiones, destruya su teléfono y la SIM y reportelo como robado recientemente. - Manipulación hostil: Alguien está intentando manipular remotamente tu teléfono. Destrui (o vende) tu teléfono y obtene uno nuevo en algún lugar lejano (no lleves tu teléfono antiguo al lugar de cambio). Utiliza una nueva tarjeta SIM (anónima), cambiar el comportamiento de llamadas y avisa a tus amigos hablando con ellos en persona, no por telefono! + La Aplicación está detenida o cargando. No hay medidas de protección o detección activas. Por favor habilita la detección de ataques! + No se detectaron amenazas. Tu res es constantemente revisada basa en la configuración de detección activada. + Área de servicio insegura: por lo menos 1 BTS nuevo o desconocido está en funcionamiento en esta vecindad, o usando un algoritmo de cifrado (roto) inseguro menor a A5/3. Cualquier llamada/SMS en esta área puede ser interceptado y registrado. Aléjate de este lugar rápidamente. + Detectado de acciones de servicio hostiles: Un IMSI-Catcher (IMSIC) o BTS falso (FBTS) esta rastreando activamente a los usuarios. En esta área existe un escaneo activo. Deberías abandonar este lugar por todos los medios, especialmente si existen disturbios políticos. Saca la batería o retira tu tarjta SIM! + Rastreo hostil detectado: Un FBTS o IMSIC esta RASTREANDOTE activamente e impide que el teléfono se conecte a través de su proveedor móvil encriptado de forma normal. Si estás en peligro o teme repercusiones, destruya su teléfono y la tarjeta SIM, luego reportelo como robado recientemente. + Manipulación hostil: Alguien está intentando manipular remotamente tu teléfono. Destruye (o vende) tu teléfono y consigue uno nuevo en algún lugar lejano. NO lleves tu teléfono antiguo al lugar de cambio!. Utiliza una nueva tarjeta SIM (anónima o sin registros). Modifica el comportamiento de tus llamadas y avisa a tus amigos que estas siendo monitoreado hablando personalmente con ellos, no por telefono! Cancelar OK @@ -259,7 +260,7 @@ Mensaje SMS WAP Push detectado!\nDetalles: Ver visor de base de datos. - + Mostrar celdas vecinas. Detalles del proveedor SIM, IMEI, TMSI. Ver comparación detallada de la célula conectada actualmente, con los datos (si existe) en OpenCellID y resaltar las diferencias. Ver las diferentes tablas de la DB que tenemos. @@ -311,12 +312,21 @@ Medio Peligro - Borrado + Eliminado Error al borrar La cadena fue añadida a la base de datos Error al añadir la cadena a la base de datos - "Cadena no añadida\nLas comillas dobles \" no están soportadas " + "Cadena no añadida +Las comillas dobles \" provocan erro en la base de datos " Desconocido - +Git SHA-Hash: %s + Configuración GPS + Habilitar GPS para rastreo de celdas + Base de datos + El BTS no proporciona celdas vecinas! + Tiempo de espera sobrepasado para API OpenCell ID. Intentar nuevamente? + N/D + Número de compilación: %s + diff --git a/AIMSICD/src/main/res/values-fi/translatable_strings.xml b/AIMSICD/src/main/res/values-fi/translatable_strings.xml new file mode 100644 index 000000000..2db5a9683 --- /dev/null +++ b/AIMSICD/src/main/res/values-fi/translatable_strings.xml @@ -0,0 +1,148 @@ + +Tietoja puhelimesta/SIM-kortista + Seuranta + Poistu + OK + Peruuta + Antennikarttanäkymä + Tietokantanäkymä + Hyväksyn + En hyväksy + + VASTUUVAPAUSLAUSEKE + + + Hyökkäyksentunnistin + + Tyhjennä tietokanta + Kaikki tiedot poistetaan +Oletko varma? + Asetukset + Paina uudestaan poistuaksesi. + + Debuggaus + Ei internetyhteyttä + + + Lataa BTS-data + + Laitetiedot + SIM-tiedot + Verkkoyhteyden tiedot + + + + Yhteensä: + Maa: + Operaattorin tunnus: + Operaattorin nimi: + + Sarjanumero: + Puhelimen tyyppi: + IMEI: + RIL-versio: + + + Tyyppi: + LAC: + CID: + + + Verkkovierailu: + TA (LTE): + Päivitä + + + PSC: + + Lähetä BTS-data + + Tietoa AIMSICD:sta + Versio: %s + Versiotarkenne: %s + Git SHA-tunniste: %s + + AIMSICD GitHubissa + DOKUMENTAATIO + + VASTUUVAPAUSLAUSEKE + JULKAISUT + MUUTOSLOKI + LISENSSI + + + + Kaikki OK. + Sinua seurataan! + + + + + Verkkotunnus: + Järjestelmätunnus: + + + Sijaintipalvelut pois käytöstä + Et voi seurata GPS-dataa ottamatta paikannusta käyttöön. Otetaanko paikannus käyttöön? + + GPS-asetukset + + Järjestelmäasetukset + Automaattinen käynnistys + Käynnistä automaattisesti uudelleenkäynnistyksen yhteydessä + + + Suojausasetukset + Ilmoitusasetukset + + + + (tällä hetkellä vain CDMA-puhelimet) + + + Käyttöliitymäasetukset + Tilakuvakkeet + Kuvaketeeman valinta + Päivitysväli + Hallitse päivitysten tiheyttä +Nyt valittu: %s + OpenCellID-asetukset + OpenCellID API-avain + Syötä OpenCellID API-avaimesi tähän + + + + + + Karttanäkymän asetukset + Kartan tyyppi + + + "CID: " + "LAC: " + "MCC: " + "MNC: " + "PC: " + "Näytteet: " + OpenCellID-data + "Leveys: " + "Pituus: " + + Valitse taulu + + Vastaus: + Suorita + + + + Aikakatkaisu: + Valitse aikakatkaisu + + + Hiljainen tekstiviesti havaittu + + Taulussa ei ole näytettävää dataa. + + OpenCellID API-avain + + diff --git a/AIMSICD/src/main/res/values-fr/translatable_strings.xml b/AIMSICD/src/main/res/values-fr/translatable_strings.xml index 83346086d..6f0dbcbec 100755 --- a/AIMSICD/src/main/res/values-fr/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-fr/translatable_strings.xml @@ -3,81 +3,89 @@ Pistage - Détails Téléphone/Carte SIM - Carte des Antennes Relais - Visionneuse de la Base de Données + Détails téléphone/carte SIM + Carte des antennes relais + Affichage de la base de données Quitter OK Annuler J\'accepte - Je n\'accepte pas + Je refuse - AVERTISSEMENT - "En utilisant AIMSICD vous comprenez et acceptez qu\'AIMSICD est une application expérimentale a usage informatif, qui peux échouer à détecter une éventuelle surveillance pour pleins de raisons. Vous comprenez également que l\'application peut être contournée, évitée ou bloquée par d\'autres moyens que les développeurs ne connaissent pas encore. C\'est pourquoi vous acceptez que les développeurs et entreprises liés à ce produit gratuit, ne peuvent en aucun cas être tenu responsable des résultats ou conséquences de l\'usage de cette application. STATUT DE DÉVELOPPEMENT : ALPHA ! " + Notice légale + "En utilisant AIMSICD vous comprenez et acceptez qu\'AIMSICD est une application +\n expérimentale à usage informatif, qui peut échouer à détecter une éventuelle +\n surveillance pour différentes raisons. Vous comprenez également que +\n l\'application peut être contournée, évitée ou bloquée par des moyens que +\n les développeurs ne connaissent pas encore. C\'est pourquoi vous acceptez que +\n les sociétés et les développeurs liés à ce produit gratuit, ne peuvent en aucun +\n cas être tenus responsables des résultats ou conséquences de l\'usage de cette +\n application. STATUT DE DÉVELOPPEMENT : ALPHA ! +\n " - Démarrer/arrêter la détection des attaques - Commencer à localiser les cellules - Effacer/Réinitialiser la Base De Données + Détection d\'attaques + Suivi des cellules + Effacer/réinitialiser la base de données Toutes les données seront effacées.\nÊtes-vous sûr ? Préférences - Appuyez une seconde fois pour quitter. + Appuyez à nouveau pour quitter. Détails sur la/les cellule(s) actuelles Débogage - Aucune Connexion Internet + Aucune connexion Internet Impossible de télécharger les données OpenCellID sans connexion à Internet, veuillez activer la connexion de données ! Télécharger les BTS depuis OpenCellID - Informations sur l\'Appareil - Informations sur la Carte SIM - Information Sur le Réseau Mobile - Niveau de Menace Actuel - Cellules Voisines - Indicateur du Chiffrement + Informations sur l\'appareil + Informations sur la carte SIM + Information sur le réseau mobile + Cellules voisines + Cellules voisines + Indicateur du chiffrement Total : Pays : Identifiant de l’opérateur : Nom de l’opérateur : IMSI : - Numéro de Série : - Type de Téléphone : + Numéro de série : + Type de téléphone : IMEI : Version RIL : - Nom du Fournisseur : - Code du Fournisseur : - Type de Réseau : + Nom de l\'opérateur : + Code de l\'opérateur : + Type de réseau : LAC : CID : - Activité Data : - Données du statut : + Activité données : + Statut des données : Itinérance : TA (LTE) : - Rafraichir - Ouvrir le Menu - Fermer le Menu + Rafraichissement + Ouvrir le menu + Fermer le menu PSC : - Uploader les BTS sur OpenCellID + Uploader les données BTS - À propos de AIMSICD - Version: %s + A propos de AIMSICD + Version : %s Projet Basé sur Android conçu pour détecter et éviter les fausses stations de bases (IMSI-Catchers) sur les réseaux GSM/UMTS. AIMSICD sur GitHub DOCUMENTATION - CONTRIBUTEURS + CONTRIBUER INFOS LÉGALES RELEASES CHANGELOG - LICENSE + LICENCE CREDITS - Au Repos / Chargement. + Au repos / chargement. Tracking actif près de vous ! Tout est OK. Vous êtes traqué ! @@ -89,56 +97,56 @@ Identifiant du réseau : Identifiant du système : - ID de la Station de Base(BTS) : + ID de la station de base : - Service de Localisation Désactivé + Service de localisation désactivé Vous ne pouvez pas suivre les données GPS sans activer les Services de localisation. Les activer maintenant ? Paramètres AIMSICD - Démarrage Automatique + Démarrage automatique Démarrer automatiquement le service lors du Boot - Service Persistant + Service persistant Le service va continuer à fonctionner après avoir quitté l\'application (décochez pour quitter complètement) - Paramètres de Protection - Tracking des Cellules - Activer le Tracking automatique des Cellules - Détection des FemtoCellules + Paramètres de protection + Suivi des cellules + Activation du suivi automatique des cellules + Détection des FemtoCell (Actuellement téléphones CDMA seulement) - Protection contre les FemtoCellules - Force le mode avion lorsqu\'une FemtoCellules est détectée (réactivez le réseau manuellement) - Paramètres de l\'Interface + Protection contre les FemtoCell + Active le mode avion lorsqu\'une Femtocell est détectée (réactivation manuelle de réseau ) + Paramètres de l\'interface Icone de statut - Sélection de l\'Icone - Taux de Rafraichissement - Contrôle la fréquence de la mise à jour des données\nSélection courante: %s + Sélection de l\'icone + Taux de rafraichissement + Contrôle la fréquence de la mise à jour des données\nSélection courante : %s Paramètres OpenCellID Entrer une clé OpenCellID Entrez votre clé de l\'API OpenCellID ici - Monitoring des Cellules - Activer le Monitoring des Cellules + Monitoring des cellules + Activer le monitoring automatique des cellules Demander une clé de l’API d’OpenCellID Demander une clé pour accéder aux données d\'OpenCellID Préférences de la carte - Type de Carte - Type de Carte + Type de carte + Affiche différents types de carte - CID: - LAC: - MCC: - MNC: - PC: - "Echantillons: " + "CID : " + "LAC : " + "MCC : " + "MNC : " + "PC : " + "Exemples : " Données OpenCellID "Lat : " "Lon : " - Sélectionnez la Table + Sélectionnez la table @string/unique_bts_data @string/bts_measurements @@ -154,39 +162,39 @@ Réponse : Exécuter Périphérique de série actuel : - Sélectionnez un périphérique Série + Sélectionnez un périphérique série Périphériques détectés : Délai dépassé : - Sélectionnez le délai Maximum + Sélection du délai Entrez la commande AT ici. - SMS Silencieux détecté! - SMS Silencieux détecté!\nDetails: Voir la base de donnée. + SMS silencieux détecté ! + SMS silencieux détecté !\nDétails : voir la base de données. La table ne contient aucune donnée. - clé de l\'API OpenCellID - Appuyez sur OK pour demander une clé de l\'API d\'OpenCellID.org. Cela vous permettra de télécharger leurs données et de les afficher dans la carte. Cela vous permettra également d\'uploader des données sur les cellules. Notez que si vous n\'uploadez pas de données sur les cellules dans les 20 jours, votre clé API peut devenir inactive. - Erreur lors de l\'obtention de la clé: + Clé de l\'API OpenCellID + Appuyez sur OK pour demander une clé API depuis OpenCellID.org. Cela vous permettra de télécharger leurs données et de les afficher dans la carte. Cela vous permettra également d\'envoyer des données sur les cellules. Notez que si vous n\'envoyez aucunes données sur les cellules dans les 20 jours, votre clé API peut devenir inactive. + "Erreur lors de l\'obtention de la clé : " Nouvelle clé API enregistrée. - Logs de Debugging + Logs de débogage Effacer Copier - Logs copiés dans le presse papier. - Arrêter + Logs copiés dans le presse-papier. + Arrêt Démarrage EXPLICATION DÉTAILLÉE L’application est inactive ou en chargement. Aucune mesure de protection ou de détection n’est activée. Veuillez activer la détection d’attaques ! Aucune menace détectée. Notre application vérifie constamment votre réseau à partir des mesures de protections que vous avez paramétré dans le menu et les préférences. - Zone avec un service non sécurisé : Au moins une BTS est nouvelle ou inconnue dans les environs, ou bien celle-ci utilise un système de chiffrement considéré comme non sûr (inférieure à A5/3). Tout appel/SMS envoyé ou reçu dans cette zone peut être intercepté et enregistré. Veuillez quitter cet endroit rapidement. - Actions hostiles de la part d\'un service détecté: Un IMSI-Catcher ou une fausse BTS est actuellement en train de traquer ses utilisateurs. Scan actif dans cette zone. Vous devriez quitter ce lieu par n\'importe quel moyen, particulièrement s’il y a des troubles politiques. Enlevez votre batterie et votre carte SIM ! - Tracking hostile détecté : une fausse BTS ou IMSI-Catcher est actuellement en train de VOUS tracer et empêche votre téléphone de se connecter à votre opérateur avec un chiffrement normal. Si vous êtes en danger, détruisez votre téléphone et votre carte SIM, puis déclarez-les volés. - Manipulation hostile : quelqu’un essaye de contrôler à distance votre combiné. Détruisez ou vendez votre téléphone et prenez-en un nouveau loin d’ici. N’y emmenez pas votre téléphone précédent ! Utilisez une nouvelle carte SIM anonyme achetée via le navigateur TOR, changez vos habitudes d’appel et prévenez vos amis en face-à-face, PAS en les appelant avec téléphone ! + Zone avec un service non sécurisé : au moins une BTS est nouvelle ou inconnue dans les environs, ou bien celle-ci utilise un système de chiffrement considéré comme non sûr (inférieure à A5/3). Tout appel/SMS envoyé ou reçu dans cette zone peut être intercepté et enregistré. Veuillez quitter cet endroit rapidement. + Actions hostiles de la part d\'un service détecté : un IMSI-Catcher (IMSIC) ou une fausse BTS (FBTS) est actuellement en train de traquer ses utilisateurs. Scan actif dans cette zone. Vous devriez quitter ce lieu par n\'importe quel moyen, particulièrement s’il y a des troubles politiques. Enlevez votre batterie et votre carte SIM ! + Tracking hostile détecté : une fausse BTS ou un IMSI-Catcher est actuellement en train de VOUS tracer et empêche votre téléphone de se connecter à votre opérateur avec un chiffrement normal. Si vous êtes en danger, détruisez votre téléphone et votre carte SIM, puis déclarez-les volés. + Manipulation hostile : quelqu’un essaye de contrôler à distance votre combiné. Détruisez ou vendez votre téléphone et prenez-en un nouveau loin d’ici. N’y emmenez pas votre téléphone précédent ! Utilisez une nouvelle carte SIM anonyme avec une fausse identité, enregistrée via le Navigateur Tor. Changez vos habitudes d’appel et prévenez vos contacts que vous êtes surveillé en face-à-face, PAS en les appelant au téléphone ! Annuler OK @@ -198,49 +206,50 @@ Normal Manuel Automatique - 2 s - 5 s - 10 s - 25 s - 45 s + 2 sec + 5 sec + 10 sec + 25 sec + 45 sec 1 min - 5 min - 2 s - 5 s - 10 s - 20 s - 30 s + 5 mins + 2 sec + 5 sec + 10 sec + 20 sec + 30 sec 10 min Page d\'accueil Paramètres Application - Monitoring des Cellules. - Arrêt du monitoring des Cellules. - Tracking des Cellules. - Arrêt du tracking des Cellules. - Une seule demande de clé d\'API est possible par 24h!\nEssayez plus tard. + Monitoring des informations de cellule. + Arrêt du monitoring des cellules. + Informations de suivi des cellules. + Arrêt du suivi des cellules. + Une seule demande de clé d\'API est possible par 24h !\nEssayez plus tard. L’identifiant de la cellule n’est pas dans la base de données OpenCelllID ! Zone de service hostile : changement de LAC détecté ! - Détection des FemtoCellules Activé. - Tracking des Cellules Activé. - Monitoring des Cellules Activé. - Type de Téléphone - Statut: Inactif. - Statut: Bon. Aucune Menace Détectée. + Détection active des FemtoCell . + Suivi actif des cellules. + Monitoring des cellules activé. + Type de téléphone + Statut : inactif. + Statut : bon. Aucune menace détectée. ALERTE : menace détectée ! - ALERTE : connexion femtocell détectée ! + ALERTE : connexion femtocellule détectée ! ALERTE : SMS silencieux détecté ! - ALERTE: SMS Wap Push Détecté! + ALERTE : SMS WAP Push détecté ! ALERTE : indicateur de message en attente détecté ! - AIMSICD ne peut détecter les connexions FemtoCellules que sur les appareils CDMA. + AIMSICD ne peut détecter les connexions femtocell que sur les appareils CDMA. État du service changé ! - : Arrêt du tracking des FemtoCellules. - ALERTE : pistage par femtocell détecté ! - Rafraichir tous les - Raffaichissement… + : arrêt du suivi des femtocell. + ALERTE : pistage par femtocellule détecté ! + Rafraichir toutes les + Rafraichissement… secondes. - Contact d\'OpenCellID pour récupérer les données…\nCela peut prendre jusqu\'à une minute. - Impossible de déterminer votre dernière position.\nActivez les services et réessayez. + Récupération des données depuis OpenCellID … +\nCela peut prendre jusqu\'à une minute. + Impossible de déterminer votre dernière position.\nActivez les services de localisation et réessayez. Aucune position à afficher sur la carte. Aucune donnée à publier. Erreur de téléchargement : @@ -248,89 +257,98 @@ Erreur lors de la récupération des données OpenCellID.\nVérifiez votre réseau ! Données OpenCellID reçues avec succès.\nCarte Mise à jour. Envoi des données BTS à OpenCellID réussi. - Erreur lors de l’envoi des données BTS aux les serveurs d’OpenCellID ! - Clé de l’API d’OpenCellID non trouvée!\nEntrez d’abord une clé dans les paramètres. - Rafraîchissement de l\'écran - Impossible d\'obtenir l\'accès ROOT.\nL\'injection de commandes AT à besoin d\'un accès terminal en tant que ROOT.\nVéréfiez que votre téléphone est rooté et réessayez. - Busybox non trouvé.\nL\'injection de commandes AT a besoin de Busybox pour fonctionner correctement.\nVéréfiez que votre appareil possède Busybox et ressayez. - Une erreur inconnue s’est produite lors de l’accès au périphérique série.\nVérifiez les messages d’erreurs de vos journaux et postez-les sur notre dépôt GitHub. + Erreur lors de l’envoi des données BTS aux serveurs d’OpenCellID ! + Clé de l’API d’OpenCellID non trouvée !\nEntrez d’abord une clé dans les paramètres. + Rafraîchissement des infos CellId + Impossible d\'obtenir les accès ROOT. +\nL\'injection de commandes AT à besoin d\'un accès ROOT. +\nVérifiez que votre téléphone est rooté puis réessayez. + Busybox non trouvé.\nL\'injection de commandes AT a besoin de Busybox pour fonctionner correctement.\nVérifiez que votre appareil possède Busybox et ressayez. + Une erreur inconnue s’est produite lors de l’accès au périphérique série.\nVeuillez vérifier les messages d’erreurs dans vos journaux et postez-les sur notre dépôt GitHub. Obtention d\'une clé de l\'API d\'OpenCellID… Impossible de créer la carte ! - ATTENTION! Veuillez décrire le problème que vous avez (en anglais !), avant de nous envoyer ces logs. PAS D\'AIDE SANS DESCRIPTION PRÉCISE!\n + ATTENTION ! Veuillez décrire le problème que vous avez (en anglais !), avant de nous envoyer ces logs. PAS D\'AIDE SANS DESCRIPTION PRÉCISE !\n Statut : Repos OK MOYEN - HAUT + Elevé DANGER - COURREZ ! + Courrez ! - Ce menu concerne les utilisateurs avancés seulement!\n\nN\'insérez pas de texte aléatoire ici, cela pourrai rendre le système de détection hors de contrôle.\n\nPour ajouter du texte, sélectionnez le type de SMS dans le menu, tapez votre texte de détection et appuyez sur Insérer.\n\nPour supprimer le texte de la Base de Données, appuyez longuement sur celui-ci dans la Visionneuse. + Ce menu concerne uniquement les utilisateurs avancés ! +\n +\nN\'insérez pas de texte aléatoire ici, cela pourrait rendre le système de détection hors de contrôle. +\n +\nPour ajouter du texte, sélectionnez le type de SMS dans le menu, tapez votre texte de détection et appuyez sur Insérer. +\n +\nPour supprimer le texte de la base de données, appuyez longuement sur celui-ci dans la liste. - Ce menu concerne les utilisateurs avancés seulement!\nPour supprimer un SMS de la base de donnée, appuyez longuement sur celui-ci dans la Visionneuse. + Ce menu concerne uniquement les utilisateurs avertis! +\nPour supprimer un SMS de la base de donnée, appuyez longuement sur celui-ci dans la liste. Supprimer le SMS sélectionné Paramètres avancés - Texte de Détection + Texte de détection Supprimer un SMS Insérer et supprimer des textes de détection Supprimer le SMS sélectionné Activer la détection SMS - le Root est requis pour activer la détection SMS + Root est requis pour activer la détection SMS - Texte de Détection + Texte de détection ATTENTION ! - SMS Silencieux Détecté - Message Type-0 Détecté!\nDétails: Voir la Base de Données. + SMS silencieux détecté + Message Type-0 Détecté !\nDétails : voir la base de données. ATTENTION ! - SMS MWI Détecté - SMS de contrôle de la messagerie vocale (MWI) Détecté!\nDétails: Voir la Base de Données. - SMS Wap Push Détecté - Message SMS Wap Push Détecté!\nDétails: Voir la Base de Données. + MWI détecté + SMS de contrôle de la messagerie vocale (MWI) détecté !\nDétails : voir la base de données. + WAP Push détecté + Message SMS Wap Push détecté !\nDétails : voir la base de données. - - Détail du fournisseur de la carte SIM, IMEI, TMSI. - Afficher une comparaison détaillée des cellules connectées avec les données (s’il y en a) trouvées dans OpenCelllD et surligner les différences. - Voir les différentes Tables de la Base de Données. + Affiche le voisinage de cellules. + Détail de l\'opérateur de la carte SIM, IMEI, TMSI. + Affiche une comparaison détaillée des cellules connectées avec les données trouvées dans OpenCelllD (s’il y en a) et montre les différences. + Afficher les différentes tables de la base de données. Carte des antennes à proximité. Interface permettant d\'envoyer des commandes AT au Baseband (nécessite le ROOT). - Démarre/Arrête la surveillance AIMSICD et compare les détails de chaque cellule avec la Base de Donnée. + Démarre/arrête la détection des attaques et compare les détails de chaque cellule avec la base de données. Commencer à localiser les cellules pour les afficher sur la carte des antennes et les envoyer éventuellement à OpenCellID plus tard. - paramètres AIMSICD : règles de protection, temps de requètes et comportement du réseau. + Paramètres AIMSICD : règles de protection, temps de requètes et comportement du réseau. Effacer les tables sélectionnées de la Base de Données. - Obtenir une clé pour utiliser la base de donnée d\'OpenCellID pour uploader vos données… + Obtenir une clé pour utiliser la base de donnée d\'OpenCellID pour uploader et télécharger des données… Explication des icônes de statut et du projet. Télécharge la base de données OpenCellID. Envoie vos BTS à la base de données OpenCellID. - Afficher et envoyer les logs d\'application. + Collecter et envoyer les logs d\'erreur. Quitter cette application. Recherche de votre localisation en cours… - Données BTS Uniques + Données BTS uniques Données BTS Données importées d’OpenCellID Codes MCC par pays - SMS Silencieux + SMS silencieux Événements - Puissance des signaux Mesurés + Puissance des signaux mesurés - *** Recherche de périphériques AT…\n - Trouvé: + *** Recherche de périphériques série AT…\n + "Trouvé : " *** Recherche terminée ***\n - BTS actuellement connectée à votre Téléphone + BTS actuellement connectée à votre téléphone BTS connu et sécurisé BTS inconnu ou non-sécurisé BTS nouvelle ou récemment ajoutée @@ -378,7 +396,7 @@ Numéro du build : %s Empreinte SHA de Git : %s Paramètres GPS - Activer le GPS pour la localisation des cellules + Activer le GPS pour localiser les cellules Paramètres de notification Activer le vibreur Vibrer lorsque la notification change @@ -389,12 +407,22 @@ Moyen Danger - "Chaîne de caractères non ajouté\nLe guillemet double (\") va provoquer une erreur dans la base de données " + "Chaîne de caractères non ajoutée +Le guillemet double (\") va provoquer une erreur dans la base de données " La chaîne de caractères a été ajoutée à la base de données Échec lors de l’ajout de la chaîne de caractères à la base de données Indisponible - Ignoré + Inconnu Base de données - La requête de l\'API OpenCellID met trop de temps. Réessayer plus trad ? + La requête de l\'API OpenCellID met trop de temps. Réessayer plus tard ? + Une BTS ne fournit aucune cellule voisine ! + Importer les informations des antennes + + Téléchargement des données d\'antenne +\nVeuillez patienter. + Les données d\'antenne ont été téléchargées avec succès. + Erreur lors de l\'importation des données d\'antenne. + Importation de la base de données d\'antenne. + Indiquez le lieu diff --git a/AIMSICD/src/main/res/values-id/translatable_strings.xml b/AIMSICD/src/main/res/values-id/translatable_strings.xml new file mode 100644 index 000000000..df5e7879e --- /dev/null +++ b/AIMSICD/src/main/res/values-id/translatable_strings.xml @@ -0,0 +1,94 @@ + +Detail Telepon/SIM + Penampil Peta Antena + Penampil Basisdata + Keluar + OK + Batalkan + Saya setuju + Saya tidak setuju + + Pendeteksian Serangan + Bersihkan Basisdata + Semua data akan dihapus. Apakah Anda yakin? + Preferensi + Tekan lagi untuk keluar. + Tidak ada koneksi internet + Tidak dapat mengunduh data OpenCellID tanpa koneksi internet, mohon aktifkan koneksi data! + + Mengunduh data BTS + + Informasi Perangkat + Informasi SIM + Informasi Jaringan + Total: + Negara: + ID operator: + Nama operator: + IMSI: + Serial: + Tipe telepon: + IMEI: + Versi RIL: + Nama provider: + Kode provider: + Tipe: + LAC: + CID: + Aktivitas Data: + Status data: + Roaming: + TA (LTE): + Segarkan + Buka Navigation Drawer + Tutup Navigation Drawer + PSC: + + Mengunggah Data BTS + + Tentang AIMSICD + Versi: %s + Nomor build: %s + Git SHA-Hash: %s + AIMSICD di Github + Dokumentasi + Kontribusi + Persetujuan + Rilis + Log Peubahan + Lisensi + Credits + Lowong / Menunggu. + Menghapus SMS + Aktifkan Deteksi SMS + Root dibutuhkan untuk mengaktifkan deteksi SMS + + Deteksi Strings + PERHATIAN! + SMS Diam-diam Terdeteksi + MWI Terdeteksi + Kumpulkan dan mengirim catatan kesalahan. + Keluar aplikasi ini. + Menunggu untuk lokasi… + Membutuhkan lokasi + BTS Data yang Unik + Pengukuran BTS + Perkiraan Kekuatan Signal + + Ditemukan: + *** Pengaturan berhasil *** +\n + + BTS yang saat ini terhubung + BTS yang diketahui terenkripsi + BTS yang tidak aman atau tidak diketahui + BTS yang baru ditambahkan + + Mendapatkan Kunci API OpenCellID... + + Terhapus + Gagal untuk menghapus + N/A + Tidak diketahui + + diff --git a/AIMSICD/src/main/res/values-ja/translatable_strings.xml b/AIMSICD/src/main/res/values-ja/translatable_strings.xml index 88fd1fed0..00a218053 100644 --- a/AIMSICD/src/main/res/values-ja/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-ja/translatable_strings.xml @@ -10,11 +10,16 @@ 同意しない 免責事項 - "AIMSICD の使用について、AIMSICD は多くの理由により監視と追跡の検出に失敗することがある、実験的で有益な Android アプリケーションであることを理解の上、同意します。また、あなたは、それがまだ開発者が理解していない、他の手段で回避または無効にできることもあることを理解します。また、このフリーの製品に関連した開発者や企業は、このアプリケーションの使用によって得られる結果や出力に対して、一切責任を負わないことにも同意し、理解します。開発状況: アルファ! " + "AIMSICD の使用について、AIMSICD は多くの理由により監視と追跡の検出に失敗することがある、 +実験的で有益な Android アプリケーションであることを理解の上、同意します。また、あなたは、 +それがまだ開発者が理解していない、他の手段で回避または無効にできることもあることを理解します。 +また、このフリーの製品に関連した開発者や企業は、このアプリケーションの使用によって得られる結果や、 +出力に対して、一切責任を負わないことにも同意し、理解します。開発状況: アルファ! + " - 攻撃の検出を切り替え - 基地局の追跡を切り替え + toggle_attack_detection + toggle_cell_tracking データベースのクリア/リセット すべてのデータが削除されます。\nよろしいですか? プリファレンス @@ -113,12 +118,12 @@ 地図の種類 異なる形式の地図を表示します - "CID: " - "LAC: " - "MCC: " - "MNC: " - "PC: " - "サンプル: " + CID: + LAC: + MCC: + MNC: + PC: + サンプル: OpenCellID データ "緯度: " "経度: " @@ -141,7 +146,7 @@ OpenCellID API キー OpenCellID.org から API キーを要求するには、OK を押します。これでデータをダウンロードして、地図に表示することができるようになります。基地局のデータをアップロードすることもできます。20 日以内に基地局データをアップロードしない場合、あなたの API キーが非アクティブになる可能性があることに注意してください。 - "キーの取得エラー: " + キー取得エラー: 新しい API キーを保存しました。 デバッグ ログ @@ -152,7 +157,7 @@ 開始 詳細な説明 - アプリはアイドリングまたはロード中です。保護と検出の対策が有効になっていません。攻撃検出を切り替えてください! + アプリはアイドリングまたはロード中です。保護と検出の対策が有効になっていません。攻撃の検出を有効にしてください! 脅威は検出していません。有効にした検出の設定に基づいて、常にネットワークをチェックしています。 ベースバンド プロセッサに AT コマンドを送信できるようにするインターフェイスです (ROOT が必要)。 @@ -290,7 +295,7 @@ 測定した信号の強度 *** AT シリアルデバイスを検索しています…\n - "見つかりました: " + 見つかりました: *** セットアップが完了しました ***\n 現在接続した BTS @@ -328,4 +333,13 @@ データベース OpenCellID API リクエストがタイムアウトしました。後でもう一度試しますか? + BTS は、隣接基地局を提供していません! + 基地局のデータをインポート + + 基地局のデータをインポートしています… +処理に時間がかかることがあります。 + 基地局のデータを正常にインポートしました。 + 基地局のデータをインポート中にエラー。 + 基地局のデータベースをインポートします。 + 場所が必要 diff --git a/AIMSICD/src/main/res/values-kab/translatable_strings.xml b/AIMSICD/src/main/res/values-kab/translatable_strings.xml new file mode 100644 index 000000000..d3940e898 --- /dev/null +++ b/AIMSICD/src/main/res/values-kab/translatable_strings.xml @@ -0,0 +1,259 @@ + +Aḍfaṛ + Ffeɣ + IH + Sefsex + Ur-tamasit + Aḍfaṛ + Ismenyifen + &Débogage + Ulac tuqqna n Internet + Talɣut + Amatu: + Tamurt: + Tiliɣri: + Lqem: + Isem n unamad: + Anaw: + Armud n isefka: + Addad n isefka: + Smiren + Tuttuyt %s + TASEMLIT + TTEKKI + Ur-tamasit + Turagt + Ismaden + Asula ID n uzeṭṭa: + Asulay ID n unagraw: + aɣewwaṛ + Imsektayen n unagraw + Aḍfaṛ + Afmidi n usmiren + Takarḍa + "Tar: " + "Taz: " + + Tiririt: + Selkem + Tanzagt tezri: + Sfeḍ + Nɣel + Seḥbes + Exécuté le + + Sefsex + IH + + IH + D alemmas + Amlal + Amagnu + Awfus + Awurman + tasint + tasint + tasint + MAIN + Iγewwaṛen + Taffa n isefka + Asnas + Tiliɣri + tasinin. + Addad: + IH + D alemmas + Awriran + Azzel! + + KKES + Yettwaf: + Yettwakkes + Ur izmir ara ad yekkes + N/A + Arussin + + Talqayt n tiliɣri/takarḍa SIM + Takarḍa n tsekwa s umedwel + Askan n taffa n isefka + Qebleɣ + Ugiɣ + + S useqdec n AIMSICD ad tegzuḍ udiɣ ad tqebleḍ d akken AIMSICD d asnas asermitan i telɣut kan, yezmer ad yecceḍ di tifin n tɛessast ɣef kra n sabbat. Ad tegzuḍ daɣen d akken asnas yezzmer ad yettwasekkey, ad yetttwazgel neɣ ad yewḥel s useqdacen n n wallalen ur ssinen ara yakan i neflayen. Ɣef aya ara tqebleḍ d akken tikebbaniyin akked ineflayen icudden ar ufaris-agi n baṭel, ur zmiren ara ad ilin d imasayen ɣef igmaḍ neɣ ayenara d-yeglu useqdec n usnas-agi. ADDAD N TNEFLIT: ALPHA ! + + Tifin n uẓdam + Sfeḍ/Ales awennez n taffa n isefka + Akk isefka ad ttwakksen. +\nAd tkemmleḍ? + Senned tikelt nniḍen akken ad teffɣeḍ. + Talqayt ɣef tebniqt tamirant + Ur izmir ara ad d-isider isefka OpenCellID s war tuqqna Internet, red tuqqna n isefka! + + Sider isefka BTS + + Kter isefka BTS + + Talɣut ɣef yibenk + Talɣut ɣef uẓeṭṭa + Tibniqin iqerben + Tibniqin iqerben + Anamal n uwgelhen + Asulay ID n unamad: + Isem n unamad: + IMSI: + Uṭṭun n umazrar: + IMEI: + Tanglat n unamad: + LAC: + CID: + Roaming: + TA (LTE): + Ldi umuɣ + Mdel umuɣ + PSC: + + Sali isefka BTS + + Ɣef AIMSICD + "Uṭṭun n lqem: %s" + Adsil SHA n Git: %s + Asenfaṛ yebna ɣef Android, yettwafṣel i tifin d uzgel n tiɣsar tizadurin (IMSI-Catchers) deg iẓedwa GSM/UMTS. + AIMSICD di GitHub + ILEQMAN + AƔMIS N IBEDDILEN + Deg usteɛfu / Asali. + Adfaṛ urmid iqerben ɣur-k! + Yal taɣawsa tetteddu. + Ad k-ṭṭafaṛen! + Tamnaḍt n umeẓlu tamihawt. Ffeɣ seg-s! + Azzel! Ibenk-ik yettwaṭṭef! + Senned ɣef tignitin n waddad ddaw-a i ugar n tenlɣut: + + Asulay Id n teɣsert tazadurt: + + Ameẓlu n usideg yensa + Ur tezmireḍ ara ad tefreḍ isefka GPS war ma tremdeḍ imeẓla n usideg. Rmed-iten tura? + + Rmed GPS i usideg n tibniqin + Asenker awurman + Senker s wudem awurman ameẓlu di tnekra n yibenk + Ameẓlu yezgan + Ameẓlu ad ikemmel ad yeddu seld tuffɣa seg usnas (kkes ṛṛcem akken ad teffɣeḍ meṛṛa seg umeẓlu) + Iɣewwaṛen n ummesten + Iɣewwaṛen n yilɣa + Rmed aḍfaṛ awurman n tibniqin + Tifin n Femtocell + (Akka tura ala tiliɣriyin CDMA) + Ammesten mgal Femtocell + Rmed askar n usafag ticki yettwaf Femtocell (tulsa n urmad n uẓeṭṭa s ufus) + Iɣewwaṛen n ugrudem + Tignit n waddad + Afran n tignit + Asenqed n tesnigert n uleqqem n isefka +\nAfran amiran: %s + Iɣewwaṛen OpenCellID + Tasarut API OpenCellID + Sekcem tasarut API OpenCellID + Asefrek n tibniqin + Rmed asefrek awurman n tibniqin + Suter tasarut API OpenCellID + Suter tasarut akken ad tkecmeḍ ar isefka OpenCellID + + Ismenyifen n tkarḍa + Sken anawen nniḍen n tkarḍa + + CID: + LAC: + MCC: + MNC: + PC: + Imedyaten: + Isefka OpenCellID + Fren tafelwit + Agrudem n tladna AT + Ibenk n umazrar amiran: + Fren ibenk n umazrar + Ibenkan yettwafen: + Afran n tenzagt + Sekcem taladna AT dagi. + + SMS asusam yettwaf + SMS asusam yettwaf! +\nTalqayt: Wali taffa n isefka. + Tafelwit ur tegbir ara isefka. + + Tasarut API OpenCellID + Senned ɣef IH akken ad tsutreḍ tasarut API si OpenCellID.org.Wagi ad k-yeǧǧ ad tsidreḍ isefka-nsen sakin ad ten-id-sekneḍ di tkarḍa. Ayagi ad k-yeǧǧ daɣen ad tazneḍ isefka n tibniqin. Ẓer d akken ma yella ur tuzneḍ ara isefka di 20 n wussan, tasarut-ik tezmer ad tens. + Tuccḍa deg awway n tsarut: + Tasarut API tamaynut tettwasekles. + + Aɣmis n temseɣtayt + Iɣmisen ttwaneɣlen ɣef afus. + ASEGZI LEQQAYEN + Asnas yensa neɣ yettali-d. Ulac ammesten neɣ tifin yettwafen. Ma ulac aɣilif, rmed tifin n uẓdam! + Rmed anhaz + Senhez ticki alɣu ibeddel + Senhez ticki yella wayen ur yelhin ara + Idle + Amihaw + + 2 n tasinin + 5 n tasinin + 10 n tasinin + 20 n tasinin + 45 n tasinin + 2 n tasinin + 5 n tasinin + 10 n tasinin + 20 n tasinin + 30 n tasinin + Asulay ID n tebniqt ulac-itt di taffa n isefka OpenCellID! + Ɣur-k: Tuqqna FemtoCell tettwaf! + Ɣur-k: SMS asusam yettwaf! + AIMSICD yezmer kan ad yaf tuqqniwin FemtoCell deg ibenkan CDMA. + : iseḥbes tuddniwin FemtoCell yeṭṭafaren. + "Ɣur-k: Aḍfaṛ FemtoCell yettwaf!" + Tuccḍa n usider: + isefka BTS ulin akken iwata ar OpenCellID. + Ur izmir ara ad yeddu s UẒAR ɣef yibenl-ik. +\nAsekcem n tladna AT tesra anekcum AẒAR. +\nMa ulac aɣilif, wali ma yella ibenk-ik i teddu s uẓar sakin ɛreḍ. + Ur izmir ara ad yaf Busybox ɣef yibenk-ik. +\nTaladna AT tesra isuddisen Busybox akken ad teddu akken iwata. +\nMa ulac aɣilif, wali mayella Busybox yebded ɣef yibenk-ik sakin ɛreḍ. + Awway n tsarut API OpenCellID… + Ur izmir ara ad yernu takarḍa! + Idle + Amihaw + Kkes SMS yettwafen + + Iɣewwaren n useqdac leqqayen + Izriren n tifin + Kkes SMS yettwafen + + Rmed tifin n SMS + Izriren n tifin + ƔUR-k! + ƔUR-k! + MWI yettwaf + Ad d-isider taffa n isefka n OpenCellID. + Ad isali BTS-ik ar taffa n isefka OpenCellID. + Ffeɣ seg usnas-agi. + Yettraǧu adi… + Yesra adig + Aktili n BTS + Adig MCC amezwer + *** Anadi n n yibenkan n umazrar AT… +\n + *** Asebded yemmed*** +\n + + BTS yeqqnen tura + BTS arussin neɣ araɣelsan + BTS amaynut neɣ aneggaru yettwarnan + + Awway n tsarut API OpenCellID... + + Ulac ayen n dir yettwafen, Asnas-nneɣ yessenqad yal tikelt aẓeṭṭa-ik s kra n walleln n ummesten i tesbaduḍ deg umuq akked ismenyifen. + Ulac ayen n dir yettwafen, Asnas-nneɣ yessenqad yal tikelt aẓeṭṭa-ik s kra n wallalen n ummesten i tesbaduḍ deg umuɣ akked ismenyifen. + diff --git a/AIMSICD/src/main/res/values-lt/translatable_strings.xml b/AIMSICD/src/main/res/values-lt/translatable_strings.xml index df540f30d..6d22c57c8 100644 --- a/AIMSICD/src/main/res/values-lt/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-lt/translatable_strings.xml @@ -1,4 +1,4 @@ - + Išeiti Gerai Atšaukti @@ -9,8 +9,8 @@ "Naudodamasis AIMSICD suprantu ir sutinku, kad AIMSICD yra ekspermentinė Android aplikacija, kuri gali ir neaptikti visų bandymų mane sekti. Suprantu, kad ši programa gali būti apgauta būdais, iki šiol nežinomiems jos kūrėjams. Taigi, sutinku ir suprantu, kad kūrėjai bei įmonės susijusios su šiuo nemokamu produktu negali būti laikomi atsakingais dėl rezultatų bei pasekmių kylančių dėl šios programos naudojimo. " Duombazės peržiūra - Įjungti atakų aptikimą - Įjungti radijo bokšto sekimą + Atakų aptikimas + Radijo bokšto sekimas Išvalyti duombazę Duomenys bus ištrinti.\nTęsti? Nustatymai diff --git a/AIMSICD/src/main/res/values-nb/translatable_strings.xml b/AIMSICD/src/main/res/values-nb/translatable_strings.xml index 210291850..11ecaddaa 100644 --- a/AIMSICD/src/main/res/values-nb/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-nb/translatable_strings.xml @@ -1,44 +1,50 @@ Sporing - Telefon/SIM Detaljer - Antenne Kart - Databasefremviser + Telefon-/SIM -detaljer + Antennekart + Databaseviser Avslutt OK Avbryt Jeg er enig Jeg er uenig - VIKTIG - "Ved å bruke AIMSICD har du forstått og godtatt at AIMSICD er en experimentell og informativ Android applikasjon som kan feile i å oppdage sporing og overvåkning av flere årsaker. Du er også klar over at den kan bli lurt og slått av årsaker ukjent for utviklerne. Du forstår og at utviklerne og selskap tilknyttet denne gratisappen ikke kan holdes ansvarlig for resultater og konsekvenser vedrørende bruken av denne applikasjonen. UTVIKLINGS-STADIE: ALPHA! " - - Styr Angrepsoppdaging - Styr Cellesporing - Nullstill Database + ANSVARSFRASKRIVNING + "Ved å bruke AIMSICD har du forstått og godtatt at AIMSICD er et eksperimentelt +\nog informativt Android-program som kan mislykkes i å oppdage sporing og +\novervåkning av flere årsaker. Du er også klar over at det kan bli lurt eller +\ngi tapt av årsaker ukjent for utviklerne. Du forstår også at utviklerne og selskap +\ntilknyttet dette gratisprogrammet ikke kan holdes ansvarlig for resultater og konsekvenser +\nvedrørende bruken av dette programmet. UTVIKLINGS-STADIE: ALPHA! +\n " + + bytt_angreps_oppdagelse + bytt_angreps_oppdagelse + Nullstill database Alle data vil slettes.\nEr du sikker? - Trykk på nytt for å Avslutte. - Alle Nåværende Celledetaljer + Trykk igjen for å avslutte. + Alle nåværende celledetaljer Feilsøking - Ingen Internettforbindelse - Klarte ikke laste ned OpenCellID data uten Internettilkobling, vennligst slå på datatilgang! + Ingen internettforbindelse + Klarte ikke laste ned OpenCellID-data uten internettilkobling, slå på datatilgang! - Last ned BTS Data + Last ned BTS-data - Telefoninformasjon - SIM Informasjon + Enhetsinformasjon + SIM-informasjon Nettverksinformasjon - NaboCeller - Naboceller - Krypterings Indikator + Celler i nærheten av deg + Celler i nærheten av deg + Krypteringsindikator Total: Land: - Operatør ID: + Operatør-ID: Operatørnavn: - Simkortnummer: + IMSI: Serienummer: Telefontype: - TelefonSerienummer: - Radio Version: + IMEI: + Radioversion: Operatørnavn: Operatørkode: Type: @@ -46,15 +52,15 @@ CelleID: Dataaktivitet: Datastatus: - Søker: + Gjesting: TA (LTE): Oppdater - Åpne Navigasjons Skuffe + Åpne navigasjonsskuff Innstillinger - Lukk Navigasjons Skuffe + Lukk navigasjonsskuff PSC: - Last Opp BTS Data + Last opp BTS-data Om AIMSICD Versjon: %s @@ -65,105 +71,107 @@ UTGAVER ENDRINGSLOGG LISENS - CREDITS + BIDRAGSYTERE Venter / Laster. Aktiv sporing nær deg! - Allt OK. + Alt OK. Du blir sporet! Utrygt Område. Forlat det! - "SPRING! Håndsettet er manipulert!" - Trykk Status Ikonet under for detaljert informasjon: + SPRING! Håndsettet er manipulert! + Trykk status-ikonet under for detaljert informasjon: - Nettverks ID: - System ID: - Base Stasjon ID: + Nettverks-ID: + System-ID: + Basestasjons-ID: GPS avslått - Du kan ikke spore GPS data uten GPS. Slå på GPS nå? - - System Oppsett - Start Automatisk - Start tjenesten Automatisk ved oppstart - Kjørende Tjenester - Tjenester vil fortsette å kjøre etter du avslutter appen (hak av for å totalt avslutte) - Beskyttelses Innstillinger + Du kan ikke spore GPS-data uten GPS. Slå på GPS nå? + + Systemoppsett + Start automatisk + Start tjenesten automatisk ved oppstart + Kjørende tjenester + Tjenester vil fortsette å kjøre etter du avslutter programmet (huk av for å avslutte helt) + Beskyttelsesinnstillinger Meldingsoppsett Cellesporing - Slå på Automatisk Cellesporing - Femtocell Oppdaging - (foreløpig KUN CDMA telefoner) - Femtocell Beskyttelse - Fremtving Fly Modus når Femtocell oppdages (slå på igjen nettverk manuellt) + Slå på automatisk cellesporing + Femtocell-oppdagning + (foreløpig kun for CDMA-telefoner) + Femtocell-beskyttelse + Påtving flymodus når femtocell oppdages (slå på nettverk igjen manuelt) Grensesnittoppsett Status-ikoner - Icon Utseende Utvalg + Ikondraktvalg Oppfriskningsrate - Kontroler intervall av enhetsoppdateringer\nNåværende intervall:%s - OpenCellID Innstillinger - OpenCellID API Nøkkel - Skriv inn din OpenCellID API Nøkkel hær - Celle Overvåkning - Slå på Automatisk Celle Overvåkning - Be om OpenCellID API Nøkkel - Be om API nøkkel for OpenCellID Datatilgang - - Kart Innstillinger + Kontroler intervall for enhetsoppdateringer +\nNåværende intervall:%s + OpenCellID-innstillinger + OpenCellID- API-nøkkel + Skriv inn din OpenCellID- API-nøkkel her + Celleovervåkning + Slå på automatisk celleovervåkning + Be om OpenCellID- API-nøkkel + Be om API-nøkkel for OpenCellID-datatilgang + + Kartinnstillinger Karttype - Vis Kart i flere utgaver + Vis kart i flere stiler - "CelleID: " + "CID: " "OmrådeCelle: " "Landskode: " "Nettverkskode: " "PC: " - "Eksempler: " - OpenCellID Data + Eksempler: + OpenCellID-data "Breddegrad: " "Lengdegrad: " - Velg Liste + Velg liste - AT kommando Linje + AT-kommandolinje Tilbakemelding: Utfør - Nåværende Seriell Enhet: - Velg Seriell Enhet - Oppdagede Enheter: + Nåværende seriell enhet: + Velg seriell enhet + Oppdagede enheter: Tidsavbrudd: - Velg Tidsavbrudd - Skriv inn AT kommando hær. + Velg tidsavbrudd + Skriv inn AT-kommando her. - Stille SMS Oppdaget - Stille SMS Oppdaget\nDetaljer: Se databasefremviser. + Stille SMS oppdaget + Stille SMS oppdaget! +\nDetaljer: Se databasefremviser. Listen inneholder ingen data å vise. - OpenCellID API Nøkkel - Trykk OK for å be om API nøkkel fra OpenCellID.org. Dette vil gjøre det mulig å laste ned deres data og se dette i kartet. Det vil og gi deg mulighet til å laste opp celle data. Bemerk at du må laste opp data innen 20 dager for å ha API nøkkelen aktiv. - "Fikk ikke Nøkkel: " + OpenCellID- API-nøkkel + Trykk OK for å be om API-nøkkel fra OpenCellID.org. Dette vil gjøre det mulig å laste ned deres data og se dette i kartet. Det vil og gi deg mulighet til å laste opp celledata. Bemerk at du må laste opp data innen 20 dager for å ha API-nøkkelen aktiv. + Fikk ikke hentet nøkkel: Lagret ny API-nøkkel. Feilsøkingslogger Rensk Kopier - Logger kopiert til clipboard. + Logger kopiert til utklippstavle. Stopp Start DETALJERT FORKLARING - Appen pauser eller laster. Ingen beskyttelse eller oppdaging er påslått. Vennligsts slå på Angrepsoppdaging! - Ingen trusler oppdaget. Ditt nettverk sjekkes konstant basert på det du har påslått i Oppdagelses-Innstillinger. - "Usikkert Område: Minst 1 ny eller ukjent basestasjon i området, eller med brutt eller usikker kryptering lavere enn A5/3. Alle samtaler eller SMS som utføres hær kan bli avlyttet og lagret. Forlat området Fort." - Aktive Fientlige Tjenester Oppdaget: En IMSI-Catcher (IMSIC) eller falsk BTS (basestasjon) sporer aktivt brukere. Aktiv sporing foregår i dette området. Du bør helst unngå dette stedet, spesiellt ved Masseansamlinger og uro. Ta ut batteriet og SIM kortet! - Aktive Fientlige Tjenester Oppdaget: En FBTS eller IMSIC sporer DEG og forhindrer din telefon tilkobling gjennom din vanlige krypterte tilkobling. Hvis du er i fare for straffeforfølgelser, ødelegg telefonen og SIM kortet, og rapporter den som nylig stjålet. - Fientlig Manipulering: Noen forsøker å manipulere telefonen. Knus (eller selg) telefonen og skaff en ny langt borte dærfra. Ikke ta med telefonen til dær du kjøper ny! Bruk et nytt uregistrert SIM kort bestillt gjennom TOR-Nettleser. Bytt ringemønster og varsle dine venner om mulig sporing ved å snakke med dem, IKKE ved å ringe dem! + Programmet venter eller starter, Ingen beskyttelse eller oppdagelse er påslått. Vennligst slå på oppdagelser. + Ingen trusler oppdaget. Ditt nettverk sjekkes konstant basert på det du har påslått i Oppdagelsesinnstillinger. + Usikkert område: Minst én ny eller ukjent basestasjon i området, eller med brutt eller usikker kryptering lavere enn A5/3. Alle samtaler eller SMS som utføres her kan bli avlyttet og lagret. Forlat området fort. + Aktive fiendtlige tjenester Oppdaget: En IMSI-fangststasjon (IMSIC) eller falsk BTS (basestasjon) som aktivt sporer brukere. Aktiv sporing foregår i dette området. Du bør helst unngå dette stedet, spesielt ved masseansamlinger og uro. Ta ut batteriet og SIM-kortet! + Aktive fiendtlige tjenester oppdaget: En FBTS eller IMSIC sporer DEG og forhindrer din telefontilkobling gjennom din vanlige krypterte tilkobling. Hvis du kan være gjenstand for straffeforfølgelser, ødelegg telefonen og SIM-kortet, og rapporter den som nylig stjålet. + Fiendtlig manipulering: Noen forsøker å manipulere telefonen. Knus (eller selg) telefonen og skaff en ny langt borte derfra. Ikke ta med telefonen til der du kjøper ny! Bruk et nytt uregistrert SIM-kort bestilt gjennom Tor-nettleser. Bytt ringemønster og varsle dine venner om mulig sporing ved å snakke med dem, IKKE ved å ringe dem! Avbryt OK Aktiver vibrering Vibrer når varsler endres Vibrer på trusselnivå - Velg minimum trusselnivå å vibrere på - Pause + Velg minste trusselnivå å vibrere på + Lediggang OK Middels Fare @@ -175,155 +183,190 @@ Normal Manuell Automatisk - 2 sek - 5 sek - 10 sek + To sek + Fem sek + Ti sek 25 sek 45 sek - 1 min - 5 min - 2 sek - 5 sek - 10 sek + Ett min + Fem min + To sek + Fem sek + Ti sek 20 sek 30 sek - 10 min + Ti min Hoved Innstillinger - Applikasjon - Overvåker Celle Informasjon. + Program + Overvåker celleinformasjon. VIKTIG - Stoppet å Overvåker Celle Informasjon. - Sporer Celle Informasjon. - Stoppet sporing av Celle Information. - Kun 1 API nøkkel forespøsel pr 24 timer\nPrøv igjen senere. - Celle Informasjon ikke i OpenCellID Database! - Fientlig Område: Endrende celle Informasjon Oppdaget! - FemtoCell Oppdaging Aktiv. - Cellesporing Aktiv. - Celleovervåking Aktiv. - Telefon Type - Status: Pause. - Status: God. Ingen Trusler oppdaget. - ALARM: Noen Trusler Oppdaget! - ALARM: FemtoCell Tilkobling Oppdaget! + Stoppet overvåkning av celleinformasjon. + Sporer celleinformasjon. + Stoppet sporing av celleinformation. + Kun én API-nøkkelforespøsel per 24 timer +\nPrøv igjen senere. + Celleinformasjon finnes ikke i OpenCellID-database! + Fientlig område: Endrende celleinformasjon oppdaget! + FemtoCell-oppdagning aktiv. + Cellesporing aktiv. + Celleovervåking aktiv. + Telefontype + Status: Lediggang. + Status: God. Ingen trusler oppdaget. + ALARM: Noen trusler oppdaget! + ALARM: FemtoCell-tilkobling oppdaget! ALARM: Stille SMS oppdaget! - ALARM: Melding Venter indikator oppdaget! - ALARM: WAP Push SMS oppdaget! - AIMSICD kan kun oppdage FemtoCell tilkobling på CDMA enheter. - Service Status endret! - :Stoppet sporing av FemtoCell forbindelser. - ALARM: FemtoCell Sporing oppdaget! + ALARM: Melding venter -indikator oppdaget! + ALARM: WAP Push-SMS oppdaget! + AIMSICD kan kun oppdage FemtoCell-tilkobling på CDMA-enheter. + Tjenestestatus endret! + :Stoppet sporing av FemtoCell-forbindelser. + ALARM: FemtoCell-sporing oppdaget! Oppdaterer alle Oppdaterer nå… sekunder. - Kontakter OpenCellID for data...\nDette kan ta opptil ett minutt. + Kontakter OpenCellID for data… +\nDette kan ta opptil ett minutt. Kan ikke bestemme din siste posisjon.\nSlå på GPS og prøv igjen. - Ingen sporet posisjon funnet til å vise på kartet. + Ingen sporede plasseringer å vise på kartet. Ingen data for publisering tilgjengelig. - Nedlastningsfeil: - OpenCellID data vellykket mottatt. - Feil i Nedlasting av OpenCellID data.\nSjekk Nettforbindelsen! - OpenCellID data vellykket mottatt.\nKart Markører oppdatert. - "Opplasting av BTD data til OpenCellID vellykket." - Feil under opplasting av OpenCellID data til serverne! - Ingen OpenCellID API nøkkel oppdaget!\nVennligst skriv inn din nøkkel under innstillinger først. - Oppdaterer Skjerm - Klarte ikke å få ROOT tilgang på din enhet.\nAT kommando injection krever ROOT Terminal tilgang.\nVennligst undersøk om din enhet er ROOTET og prøv igjen. - Kunne ikke oppdage BusyBox på din enhet.\nAT kommando Injection krever BusyBoks komponenter for å virke korrekt.\nVennligst undersøk om din enhet har BusyBoks installert og prøv igen. - En ukjent feil har oppstått under forsøk på å nå serielenheten.\nVennligst undersøk din logcat for feil og post dem på vår Github. - En ukjent feil har oppstått under forsøk på å nullstille AT Commado Injector.\nVennligst undersøk din logcat for feil og post dem på vår Github. - Henter OpenCellID API Nøkkel… + Nedlastingsfeil: + OpenCellID-data mottatt. + Feil i nedlasting av OpenCellID-data. +\nSjekk nettforbindelsen! + OpenCellID-data mottatt. +\nKartmarkører oppdatert. + Opplasting av BTD-data til OpenCellID vellykket. + Feil under opplasting av OpenCellID-data til tjenerne! + Ingen OpenCellID- API-nøkkel oppdaget! +\nSkriv inn din nøkkel i Innstillinger først. + Frisket opp CellId-info + Klarte ikke å få ROOT tilgang på din enhet. +\nAT-kommandoinjeksjon krever ROOT-terminaltilgang. +\nUndersøk om du har superbrukerrettigheter på din enhet og prøv igjen. + Kunne ikke oppdage BusyBox på din enhet. +\nAT-kommandoinjeksjon krever BusyBox sine komponenter for å virke korrekt. +\nUndersøk om din enhet har BusyBoks installert og prøv igjen. + En ukjent feil har oppstått under forsøk på å nå seriellenheten. +\nUndersøk din logcat for feil og send dem til vår GitHub. + En ukjent feil har oppstått under forsøk på å nullstille AT-kommadoinnsenderen. +\nUndersøk din logcat for feil og send dem til vår GitHub. + Henter OpenCellID- API-nøkkel… Kunne ikke opprette kart! - VIKTIG! Vennligst beskriv problemet du hadde, før du sender loggene. INGEN HJELP UTEN BESKRIVELSE!\n - Status: + VIKTIG! Beskriv problemet du opplevde, før du sender loggene. INGEN HJELP UTEN BESKRIVELSE! +\n + Tilstand: PAUSE OK - MEDIUM - HØY + MIDDELS + HØYT FARE SPRING! - Denne menyen er kun for spesialister!\n\nVennligst ikke sett inn vilkårlige strenger fordi det vil få overvåkingen ut av kontroll.\n\nFor å legge til streng velg SMS type fra menyen, sriv inn strengen og trykk Legg til.\n\nFor å slette fra databasen trykk lenge på listevisning. + Denne menyen er kun for spesialister! +\n +\nIkke sett inn vilkårlige strenger fordi det vil få overvåkingen ut av kontroll. +\n +\nFor å legge til en streng, velg SMS-type fra menyen, skriv inn strengen og trykk Legg til. +\n +\nFor å slette fra databasen trykk lenge på Listevisning. - Denne menyen er kun for spesialister!\nFor å slette en oppdaget SMS trykk lenge på listevisning. - Slett Oppdaget SMS + Denne menyen er kun for spesialister! +\nFor å slette en oppdaget SMS trykk lenge på Listevisning. + Slett oppdaget SMS - Spesialist Innstillinger - "Oppdagelses Strenger" + Spesialistinnstillinger + Oppdagelsesstrenger Slett SMS - Legg til og slett oppdagelses strenger - Slett Oppdaget SMS + Legg til og slett oppdagelsesstrenger + Slett oppdaget SMS - Slå på SMS Oppdagelse - Root er påkrevet for å aktivere SMS oppdagelse + Slå på SMS-oppdagelse + Root trengs for å aktivere SMS-oppdagelse - Oppdagelses Strenger + Oppdagelsesstrenger VIKTIG! - Stille SMS Oppdaget - Type-0 SMS Oppdaget!\nDetaljer: Se Database Viser. + Stille SMS oppdaget + Type-0 SMS oppdaget! +\nDetaljer: Se databaseviser. VIKTIG! - MWI Oppdaget - Beskjed venter indikator oppdaget!\nDetaljer: Se Database Viser. - WAP Push Oppdaget - WAP Push SMS oppdaget!\nDetaljer: Se Database Viser. + MWI oppdaget + Oppdaget indikator for ventende beskjed! +\nDetaljer: Se databasefremviser. + WAP push oppdaget + WAP push-SMS oppdaget! +\nDetaljer: Se databaseviser. - Viser NaboCeller. - SIM Leverandør detaljer, IMEI, TMSI. + Viser celler i nærheten. + SIM-nettverksoperatørdetaljer, IMEI, TMSI. Vis detaljert sammenligning av nåværende tilknyttet celle, med data (hvis noen) funnet i OpenCellID og merk forskjellen. - Se de forskjellige DB listene vi har. + Vis de forskjellige DB-listene vi har. Kart med fargekodede antenner i nærheten. - Kommandolinje som tillater sending av AT kommandoer til Baseband Prosessor (krever ROOT). + Kommandolinje som tillater sending av AT-kommandoer til basebandprosessor (krever ROOT). - Start/stop angrepsoppdagelse og samle celledetaljer inn i interne database lister. - Versjon Nummer: %s - Git SHA-Signering: %s - Start å søke celler for å vise i Antenne Kartet og muligens laste dem opp senere til OpenCellID. + Start/stop angrepsoppdagelse og samle celledetaljer i interne databaselister. + Versjonsnummer: %s + Git SHA-sjekksum: %s + Start å søke celler for å vise i antennekartet for muligens senere å laste dem opp til OpenCellID. - AIMSICD innstillinger som beskyttelsesregler, hyppighet og service oppførsel. - Nullstill alle eller spesifiserte DB liste(r). + AIMSICD-innstillinger som beskyttelsesregler, hyppighet og tjenesteoppførsel. + Blank ut og tilbakestill alle eller spesifisert(e) DB-tabell(er). - Motta API nøkkel for å bruke OpenCellID database til å opplaste og nedlaste data… - Status Icon og Project forklaring. - Last ned OpenCellID Database. - Last opp Basestasjoner til OpenCellID Database. - Avslutt denne Appen. + Motta API-nøkkel for å bruke OpenCellID-database til å laste opp og ned data… + Statusikon og prosjektforklaring. + Last ned OpenCellID-database. + Last opp basestasjoner til OpenCellID-database. + Avslutt dette programmet. Venter på posisjon… - Spesifikk Basestasjon Data - Basestasjon Målinger - Importert OpenCellID Data - Standard Landskode Plassering + Unik basestasjonsdata + Basestasjonsmålinger + Importert OpenCellID-data + Forvalgt landskodeplassering Stille SMS Hendelseslogg - Målte Signalstyrker + Målte signalstyrker - ***Søker etter AT serielle enheter...\n - "Funnet: " - ***Innstillinger Fullført***\n + ***Søker etter serielle AT-enheter... +\n + Funnet: + ***Oppsett fullført*** +\n - Nåværende tilnyttet Basestasjon - Godt kjent kryptert Basestasjon - Ukjent eller usikker Basestasjon - Ny eller nylig tillagt Baserstasjon + Nåværende tilknyttet basestasjon + Velkjent kryptert basestasjon + Ukjent eller usikker basestasjon + Ny eller nylig tillagt basestasjon - Database slettet og gjenopprettet vellykket.\nVennligst start Appen på nytt for å renske gamle verdier fra minnet. + Lyktes med å slette og gjenopprette database. +\nStart programmet på nytt for å renske gamle verdier fra minnet. - "Invalid OpenCellId nøkkel, prøv igjen senere." - Mottar OpenCellId API Nøkkel... + Ugyldig OpenCellId-nøkkel, prøv igjen senere. + Mottar OpenCellId- API-nøkkel… Slettet Feil under sletting - "Setning ikke lagt til\n\"dobbel apostrof vil skape databasefeil " + "Strengen ble ikke lagt til +\n \" dobbel apostrof vil skape databasefeil " Setningen ble lagt til i databasen Fikk ikke lagt til setningen i databasen Samle og send feilmeldingslogger. - GPS Innstillinger - Slå på GPS for Cellesporing - Ikke Tilgjengelig + GPS-innstillinger + Slå på GPS for cellesporing + Ikke tilgjengelig Ukjent Database - OpenCellID API forespørsel tidsavbrudd Prøv igjen senere? + Tidsavbrudd for OpenCellID- API-forespørsel. Prøv igjen senere!? + Bakkestasjonen støtter ikke celler i nærheten! + Importer CellTowers-data + + Importerer CellTowers-data… +\nDette kan ta litt tid. + Import av CellTowers-data vellykket. + Import av CellTowers-data mislyktes. + Importerer CellTowers-database. + Trenger plassering diff --git a/AIMSICD/src/main/res/values-ne-rNP/translatable_strings.xml b/AIMSICD/src/main/res/values-ne-rNP/translatable_strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/AIMSICD/src/main/res/values-ne-rNP/translatable_strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/AIMSICD/src/main/res/values-ne/translatable_strings.xml b/AIMSICD/src/main/res/values-ne/translatable_strings.xml new file mode 100644 index 000000000..5b145a079 --- /dev/null +++ b/AIMSICD/src/main/res/values-ne/translatable_strings.xml @@ -0,0 +1,13 @@ + +पछ्याउनु + फोन/सिम विवरण + "antenna नक्सा निरिक्षक" + database निरिक्षक + छोड्नु + हुन्छ + रद्द गर्नु + म सहमत छु + म असहमत छु + + अधिकार त्याग गर्ने + diff --git a/AIMSICD/src/main/res/values-nl/translatable_strings.xml b/AIMSICD/src/main/res/values-nl/translatable_strings.xml index 03bf90ae6..c577547ba 100644 --- a/AIMSICD/src/main/res/values-nl/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-nl/translatable_strings.xml @@ -1,50 +1,51 @@ - + Volgen - Telefoon/SIM details - Antennekaart scherm - Database scherm + Telefoon-/simkaartgegevens + Antennekaartscherm + Databasescherm Stoppen - OK + Oké Annuleren Ik ga akkoord Ik ga niet akkoord DISCLAIMER - Aanvalsdetectie aan/uit - Celtracking aan/uit + Aanvalsdetectie + Celtracking Database leegmaken - Alle gegevens worden verwijderd\nWeet u het zeker? + Alle gegevens worden verwijderd. +\nWeet je het zeker? Voorkeuren Druk opnieuw om af te sluiten. Alle gegevens van huidige cel Foutopsporing - Geen internet verbinding - Kan geen OpenCellID data laden zonder dataverbinding, zet de dataverbinding a.u.b. aan! + Geen internetverbinding + Kan geen OpenCellID-gegevens laden zonder internetverbinding, schakel deze in! - Download BTS gegevens + BTS-gegevens downloaden Apparaatgegevens - SIM gegevens + Simkaartgegevens Netwerkgegevens - Huidig gevarenniveau + Nabije masten Buurcellen - Encryptie indicator + Versleutelingsindicator Totaal: Land: - Operator ID: - Operator naam: + Operators-ID: + Operatorsnaam: IMSI: Serienummer: - Toesteltype: + Telefoontype: IMEI: - RIL versie: - Provider naam: - Provider code: + RIL-versie: + Providernaam: + Leverancierscode: Type: LAC: CID: - Data activiteit: - Data status: + Gegevensactiviteit: + Gegevensstatus: Roaming: TA (LTE): Verversen @@ -52,11 +53,11 @@ Sluit navigatiemenu PSC: - Upload BTS gegevens + BTS-gegevens uploaden Over AIMSICD Versie: %s - Android project om valse basisstations (IMSI-catchers) te vinden in GSM/UMTS netwerken. + Android-project om valse basisstations (IMSI-catchers) te vinden in GSM-/UMTS-netwerken. AIMSICD op GitHub DOCUMENTATIE BIJDRAGEN @@ -66,23 +67,30 @@ LICENTIE MET DANK AAN Actieve tracking dichtbij! - Alles OK. - U wordt gevolgd! - Onveilig service gebied. Ga weg! - RENNEN! Telefoon wordt gemanipuleerd! - Druk op de statusiconen hieronder voor meer informatie: + Alles oké. + Je wordt gevolgd! + Onveilige omgeving. Ga hier weg! + RENNEN! Je telefoon wordt gemanipuleerd! + Druk op de statuspictogrammen hieronder voor meer informatie: - Netwerk ID: - Systeem ID: - Basisstation ID: + Netwerk-ID: + Systeem-ID: + Basisstations-ID: Locatiediensten uitgeschakeld - Kan geen GPS gegevens gebruiken zonder locatiediensten. Nu aanzetten? + Kan geen GPS gegevens-gebruiken zonder locatiediensten. Nu aanzetten? Systeeminstellingen Automatisch starten Service automatisch starten bij opstarten telefoon - "Door het gebruik van AIMSICD begrijpt u en gaat u er mee akkoord dat AIMSICD een experimenteel en informatieve Android applicatie is dat door verschillende redenen mogelijk niet in staat is om volgsystemen te detecteren. U begrijpt ook dat het omzeild of verslagen kan worden door methodes die de ontwikkelaars momenteel nog niet begrijpen. U begrijpt en gaat er tevens mee akkoord dat dit de ontwikkelaars van dit gratis project in geen geval verantwoordelijk te houden zijn voor elk resultaat en gebruik van dit programma. " + "Door het gebruik van AIMSICD begrijp je en ga je ermee akkoord dat AIMSICD +\neen experimentele en informatieve Android-applicatie is die om verschillende redenen +\nmogelijk niet in staat is om volgsystemen te detecteren. Je begrijpt ook dat het omzeild +\nof verslagen kan worden door methodes die de ontwikkelaars momenteel nog niet begrijpen. +\nJe begrijpt en gaat er tevens mee akkoord dat de ontwikkelaars van dit gratis project +\nin geen geval verantwoordelijk te houden zijn voor elk resultaat en gebruik van dit +\nprogramma. ONTWIKKELINGSSTATUS: ALFA! +\n " Inactief / aan het laden. Permanente service @@ -90,24 +98,25 @@ Beveiligingsinstellingen Cel volgen Zet automatisch cel volgen aan - Femtocel detectie - (momenteel ALLEEN CDMA telefoons) - Femtocel bescherming - Forceel vliegtuigmode indien femtocel waargenomen (heractiveer netwerk handmatig) - Interface instellingen - Statusiconen - Thema selectie iconen + Femtoceldetectie + (momenteel ALLEEN CDMA-telefoons) + Femtocelbescherming + Forceer vliegtuigmode indien femtocel waargenomen (heractiveer netwerk handmatig) + Interfaceinstellingen + Statuspictogrammen + Pictogramthemaselectie Verversingsfrequentie - Stel de frequentie van apparaat updates in\nHuidige instelling: %s - OpenCellID instellingen - OpenCellID API sleutel - Geef hier uw OpenCellID sleutel in + Stel de frequentie van apparaatupdates in +\nHuidige instelling: %s + OpenCellID-instellingen + OpenCellID API-sleutel + Geef hier uw OpenCellID-sleutel in Celmonitoring Zet automatische celmonitoring aan - Verzoek OpenCellID API sleutel - Verzoek API sleutel voor OpenCellID data toegang + Verzoek OpenCellID API-sleutel + Verzoek API-sleutel voor OpenCellID-gegevenstoegang - Kaartscherm instellingen + Kaartscherminstellingen Kaarttype Geeft kaart weer in verschillende stijlen @@ -116,48 +125,49 @@ "MMC: " "MNC: " "PC: " - "Monsters: " - OpenCellID gegevens - "Lat: " - "Lon: " + "Voorbeelden: " + OpenCellID-gegevens + "Breedtegraad: " + "Lengtegraad: " Selecteer tabel - AT commandointerface + AT-opdrachtregel Antwoord: Uitvoeren Huidig serieel apparaat: Selecteer serieel apparaat Gevonden apparaten: - Timeout: - Selecteer timeout - Geef AT commando in. + Time-out: + Selecteer time-out + Geef AT-opdracht in. - Stil SMS bericht gedetecteerd - Stil SMS bericht gedetecteerd!\nDetails: zie database scherm. - Tabel bevat geen te tonen gevenens. + Stille sms gedetecteerd + Stille sms gedetecteerd! +\nDetails: zie databasescherm. + Tabel bevat geen te tonen gegevens. - OpenCellID API sleutel - Druk op OK om een API sleutel van OpenCellID.org aan te vragen. Dit stelt u in staat hun gegevens te downloaden en op de kaart te bekijken. Dit stelt u tevens in staat om celgegevens te uploaden. Let op: als u geen celgegevens upload binnen 20 dagen kan de sleutel inactief worden. + OpenCellID-API-sleutel + Druk op oké om een API-sleutel van OpenCellID.org aan te vragen. Dit stelt je in staat hun gegevens te downloaden en op de kaart te bekijken. Dit stelt je tevens in staat om celgegevens te uploaden. Let op: als je geen celgegevens uploadt binnen 20 dagen kan de sleutel inactief worden. "Fout bij aanvragen sleutel: " - Nieuwe API sleutel opgeslagen. + Nieuwe API-sleutel opgeslagen. - Debug logboeken + Debuglogboeken Leegmaken - Copieren - Logs gecopieerd naar het klembord. + Kopiëren + Logs gekopieerd naar het klembord. Stop Start GEDETAILLEERDE UITLEG - App is inactief of ladend. Er zijn geen beschermingsmaatregelen actief. Open het navigatie menu en zet ze aan in sectie VOLGEN! - Geen bedreigingen gevonden. Onze app controleert continue het netwerk aan de hand van de beveiligingsinstellingen die u in het navigatie menu en in voorkeuren aangegeven hebt. - Onveilig gebied: minstens 1 nieuwe of onbekende BTS is actief in deze omgeving of gebruikt een onveilige versleutelingsmethode, lager dan A5/3 [detectie is WIP]. Elke gesprek en SMS die in dit gebied gemaakt worden kunnen onderschept en opgeslagen worden. U kunt hier beter vertrekken. - Vijandige dienstenacties gedetecteerd: een IMSI-Catcher (IMSIC) of valse BTS (FBTS) is actief gebruikers aan het volgen. In dit gebied wordt actief gescand. Ga van deze plaats weg, zeker als er politieke onrus heerst. Haal de accu uit uw telefoon of verniel het toestel! - Vijandig volgen gedetecteerd: een FBTS of IMSIC is U actief aan het volgen en voorkomt dat uw telefoon met uw gebruikelijke beveiligde mobioele provider verbindt. Als u reden heeft om vervolging te vrezen kunt u het beste uw telefoon vernielen en hem als gestolen opgeven. - Vijandige manipulatie: iemand probeert vanaf een afstand uw telefoon te beinvloeden. Verniel (of verkoop) uw telefoon en haal ergens anders een nieuwe (breng uw huidige toestel niet naar de plaats waar u de nieuwe koopt). Gebruik een nieuwe, anonieme SIM kaart, verander uw belgedrag en waarschuw uw contacten om niet over de telefoon met u te spreken maar direct! + App is inactief of aan het laden. Beschermings- en detectiemaatregelen zijn uitgeschakeld. Schakel aanvalsdetectie in! + Geen bedreigingen gevonden. Je netwerk wordt continu gecontroleerd aan de hand van de ingeschakelde opsporingsinstellingen. + Onveilig gebied: minstens 1 nieuwe of onbekende BTS is actief in deze omgeving of gebruikt een onveilige versleutelingsmethode, lager dan A5/3. Elke oproep en sms die in dit gebied gemaakt worden kunnen onderschept en opgeslagen worden. Vertrek hier zo snel mogelijk. + Vijandige dienstenacties gedetecteerd: een IMSI-Catcher (IMSIC) of valse BTS (FBTS) is actief gebruikers aan het volgen. In dit gebied wordt actief gescand. Vermijd deze plaats ten allen koste, zeker als er politieke onrust heerst. Haal de accu en simkaart uit je telefoon! + Vijandig volgen gedetecteerd: een FBTS of IMSIC is JOU actief aan het volgen en voorkomt dat je telefoon met je gebruikelijke beveiligde mobiele leverancier verbindt. Als je reden hebt om vervolging te vrezen, vernietig dan je telefoon en simkaart, en geef hem als gestolen op. + Vijandige manipulatie: iemand probeert vanaf een afstand je telefoon te beinvloeden. Verniel (of verkoop) je telefoon en haal ergens anders een nieuwe (breng je huidige toestel niet naar de plaats waar je de nieuwe koopt). Gebruik een nieuwe, anonieme simkaart, verander je belgedrag en waarschuw je contacten om niet over de telefoon met je te spreken maar in persoon! Annuleren - OK + Oké Plat Gevoeligheid @@ -184,110 +194,134 @@ Applicatie Celinformatie monitoren. Gestopt met monitoren celinformatie. - Volgen celinformatie. + Celinformatie volgen. Gestopt met volgen celinformatie. - Slechts een nieuwe API key per 24 uur!\nProbeer het later nog eens. - Cell ID bestaat niet in OpenCellID database! + Slechts één nieuwe API key per 24 uur! +\nProbeer het later nog eens. + Cell-ID bestaat niet in OpenCellID database! Vijandig gebied: veranderende LAC waargenomen! - FemtoCell detectie actief. - Telefoon type + FemtoCell-detectie actief. + Telefoontype Status: inactief. - Status: goed. Geen risico\'s gedetecteerd.. + Status: goed. Geen risico\'s gedetecteerd. ALARM: risico\'s waargenomen! - ALARM: FemtoCell verbinding gedetecteerd! - ALARM: stil SMS bericht waargenomen! + ALARM: FemtoCell-verbinding gedetecteerd! + ALARM: stille sms waargenomen! Celvolgen actief. - Colmonitoring actief. + Celmonitoring actief. ALARM: indicatie voor wachtend bericht gedetecteerd! - ALARM: WAP pushbericht gedetecteerd! - AIMSICD kan femtocellen alleen op CDMA toestellen detecteren. + ALARM: WAP-pushbericht gedetecteerd! + AIMSICD kan femtocellen alleen op CDMA-toestellen detecteren. seconden. Fout bij downloaden: Diensttoestand is veranderd! - Gestopt met het bijhouden van Femtocal verbindingen. - ALARM: Femtocel volgen gedetecteerd! + Gestopt met het bijhouden van Femtocelverbindingen. + ALARM: Femtocel-volgen gedetecteerd! Ververs alles Verversen… - Verbinding maken met OpenCellID voor gegevens...\nDit kan een minuut duren. - Niet in staat om uw laatste positie vast te stellen.\nZet locatiediensten aan en probeer het opnieuw. + Verbinding maken met OpenCellID voor gegevens… +\nDit kan een minuut duren. + Niet in staat om je laatste positie vast te stellen. +\nZet locatiediensten aan en probeer het opnieuw. Geen gevolgde locaties gevonden om te tonen op de kaart. - Geen data beschikbaar om te publiceren. - OpenCellID gegevens succesvol ververst. - Fout bij het ophalen van OpenCellID gegevens.\nControleer uw netwerk! - OpenCellID gegevens succesvol ontvangen.\nKaartmarkeringen vernieuwd. - BTS gegevens succesvol verstuurd naar OpenCellID. - Fout bij het opsturen van BTS gegevens naar OpenCellID servers! - Geen OpenCellID API sleutel gevonden!\nStel uw sleutel eerst in de instellingen in. - Scherm verversen - Kan geen ROOT toegang op uw toestel krijgen.\nVersturen van AT commando\'s vereist ROOT terminal toegang.\nControleer of uw apparaat ROOT toegang heeft en probeer opnieuw. - Kan busybox niet vinden op uw apparaat.\nHet versturen van AT commando\'s vereist busybox componenten.\nControleer of busybox geïnstalleerd is en probeer opnieuw. - Er is een onbekende fout opgetreden met het serieel apparaat.\nCheck uw logcat voor foutmeldingen en post ze op onze Github. - Een onbekende fout is opgetreden bij het uitvoeren van AT commando\'s.\nCheck uw logcat voor foutmeldingen en post ze op onze Github. - Verkrijgen OpenCellID API sleutel… + Geen gegevens beschikbaar om te publiceren. + OpenCellID-gegevens succesvol ververst. + Fout bij het ophalen van OpenCellID-gegevens. +\nControleer je netwerk! + OpenCellID-gegevens ontvangen. +\nKaartmarkeringen vernieuwd. + BTS-gegevens verstuurd naar OpenCellID. + Fout bij het opsturen van BTS-gegevens naar OpenCellID-servers! + Geen OpenCellID-API-sleutel gevonden! +\nStel je sleutel eerst in de instellingen in. + CellID-informatie vernieuwd + Kan geen ROOT-toegang op je apparaat krijgen. +\nVersturen van AT-opdrachten vereist ROOT-terminaltoegang. +\nControleer of je apparaat ROOT-toegang heeft en probeer het opnieuw. + Kan busybox niet vinden op je apparaat. +\nHet versturen van AT-opdrachten vereist busybox-onderdelen. +\nControleer of busybox geïnstalleerd is en probeer het opnieuw. + Er is een onbekende fout opgetreden met het serieel apparaat. +\nControleer je logcat voor foutmeldingen en post ze op onze GitHub. + Er is een onbekende fout opgetreden bij het uitvoeren van AT-opdrachten. +\nControleer je logcat voor foutmeldingen en post ze op onze GitHub. + OpenCellID-API-sleutel verkrijgen… Kan geen kaart aanmaken! - INACTIEF - OK - GEMIDDELD - HOOG - GEVAAR - RENNEN! - - Dit menu is alleen bedoeld voor ervaren gebruikers.\n\nGeef a.u.b. geen willekeurige karakterreeksen in, dit kan er voor zorgen dat detectie raar gaat doen.\n\nKies het SMS type van het menu om een reeks toe te voegen, type een karakterreeks en druk op invoegen.\n\nOm een karakterreeks te verwijderen uit de database druk lang op de lijstweergave. + Inactief + Oké + Gemiddeld + Hoog + Gevaar + Loop weg! + + Dit menu is alleen bedoeld voor ervaren gebruikers. +\n +\nGeef geen willekeurige karakterreeksen in, dit kan ervoor zorgen dat detectie raar gaat doen. +\n +\nKies het sms-type in het menu om een reeks toe te voegen, typ een karakterreeks en druk op invoegen. +\n +\nDruk lang op de lijstweergave om een karakterreeks te verwijderen uit de database. - Dit menu is alleen bedoeld voor ervaren gebruikers!\nOm een gedetecteerde SMS te verwijderen druk er lang op in de lijstweergave. - Verwijder gedetecteerde SMS + Dit menu is alleen bedoeld voor ervaren gebruikers! +\nDruk lang op een gedetecteerde sms in de lijstweergave om deze te verwijderen. + Gedetecteerde sms verwijderen Geavanceerde instellingen Detectiereeksen - Verwijder SMS + Sms verwijderen Reeksen invoegen en verwijderen - Verwijder gedetecteerde SMS + Gedetecteerde sms verwijderen - Zet SMS detectie aan - Root is nodig om SMS detectie aan te zetten + Sms-detectie inschakelen + Root is nodig om sms-detectie in te schakelen Detectiereeksen - ATTENTIE! - Stille SMS gedetecteerd - Type-0 bericht gedetecteerd!\nVoor details zie het database scherm. - ATTENTIE! + OPGELET! + Stille sms gedetecteerd + Type-0-bericht gedetecteerd! +\nZie het databasescherm voor details. + OPGELET! MWI gedetecteerd - Wacht voor bericht indicatie (MWI) gedetecteerd!\nDetails: See Database scherm. - WAP pushbericht gedetecteerd - ATTENTIE! Beschrijf a.u.b. het probleem voordat u logs opstuurt. GEEN HULP ZONDER BESCHRIJVINGEN!\n + Wacht voor berichtindicatie (MWI) gedetecteerd! +\nDetails: zie databasescherm. + WAP-pushbericht gedetecteerd + OPGELET! Beschrijf het probleem voordat je logs opstuurt. GEEN HULP ZONDER BESCHRIJVINGEN! +\n Status: - WAP pushbericht gedetecteerd!\nVoor details zie het database scherm. + WAP-pushbericht gedetecteerd! +\nZie het databasescherm voor details. - - SIM netwerk provider details, IMEI, TMSI. - "Toont een gedetailleerde vergelijking van de cel waarmee u nu verbonden bent en de gegevens uit OpenCellID en toont de verschillen." - Toon de verschillende DB tabellen. - Kleurcode kaart van in de buurt zijnde antennes. - Interface dat het mogelijk maakt AT commando\'s te sturen naar de baseband processor (Root nodig). + Toont naburige cellen. + SIM-netwerkleverancierdetails, IMEI, TMSI. + "Toont een gedetailleerde vergelijking van de cel waarmee je nu verbonden bent en de gegevens uit OpenCellID en toont de verschillen." + Toon de verschillende DB-tabellen. + Kleurcodekaart van in de buurt zijnde antennes. + Interface die het mogelijk maakt AT-opdrachten te sturen naar de basebandprocessor (root nodig). - Start/stop aanvalsdetectie en verzamel mastgegevens in de interne database tabellen. + Start/stop aanvalsdetectie en verzamel mastgegevens in de interne databasetabellen. Start het volgen van cellen om ze op de antennekaart te tonen en ze later te versturen naar OpenCellID. - AIMSICD instellingen zoals beschermingsregels, contactfrequentie en service gedrag. + AIMSICD-instellingen zoals beschermingsregels, contactfrequentie en dienstgedrag. Alle of gespecificeerde tabellen leegmaken. - Verkrijg een API sleutel voor de OpenCellID database om gegevens te up- en downloaden… - Status iconen en uitleg over het project. - Download de OpenCellID database. - Upload de BTS naar de OpenCellID database. + Verkrijg een API-sleutel voor de OpenCellID-database voor uploaden en downloaden van gegevens… + Statuspictogrammen en uitleg over het project. + Download de OpenCellID-database. + Uploadt je BTS naar de OpenCellID-database. Verzamel en verstuur foutberichten. Deze app afsluiten. Wachten op locatie… - Unieke BTS gegevens - BTS metingen - OpenCellID gegevens geïmporteerd - Standaard MCC locaties - Stille SMS - Gebeurtenissenlog + Unieke BTS-gegevens + BTS-metingen + OpenCellID-gegevens geïmporteerd + Standaard MCC-locaties + Stille sms + Gebeurtenissenlogboek Gemeten signaalsterktes - *** Zoeken naar AT serieel apparaat…\n + *** Zoeken naar seriële AT-apparaten… +\n "Gevonden: " *** Setup klaar ***\n @@ -296,12 +330,13 @@ Onbekende of onveilige BTS Nieuwe of recent toegevoegde BTS - Ongeldige OpenCellID sleutel, probeer het later nog eens. - Verkrijgen OpenCellID API sleutel... + Ongeldige OpenCellID-sleutel, probeer het later nog eens. + OpenCellID-API-sleutel verkrijgen… - De database is succesvol verwijderd en opnieuw aangemaakt.\nHerstart de app om oude gegevens uit het geheugen te verwijderen. + De database is verwijderd en opnieuw aangemaakt. +\nHerstart de app om oude gegevens uit het geheugen te verwijderen. - OK + Oké Gemiddeld Gevaar @@ -312,15 +347,28 @@ Vibreren bij gevarenniveau Selecteer het minimum gevarenniveau voor de trilfunctie Inactief - String toevoegen aan de database mislukt + Toevoegen van de string aan de database is mislukt Instellingen voor meldingen - Build nummer: %s + Versienummer: %s Git SHA-Hash: %s Trillen als notificatie verandert - "String niet toegevoegd\n\" dubbele aanhalingstekens veroorzaken een db fout " - GPS instellingen - GPS inschakelen voor Cell tracking + "String niet toegevoegd +\" dubbele apostroffen veroorzaken databasefout " + GPS-instellingen + GPS inschakelen voor cell tracking Onbekend + Database + OpenCellID-API-verzoek is verlopen. Later opnieuw proberen? + Gsm-mast verstrekt geen naburige cellen! + N.v.t. + Zendmastgegevens importeren + + Locatie vereist + Zendmastgegevens importeren… +\nDit kan even duren. + Zendmastgegevens geïmporteerd. + Fout bij importeren van zendmastgegevens. + Importeert de zendmastendatabase. diff --git a/AIMSICD/src/main/res/values-pl/translatable_strings.xml b/AIMSICD/src/main/res/values-pl/translatable_strings.xml index 6f1739669..9c50e14ae 100644 --- a/AIMSICD/src/main/res/values-pl/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-pl/translatable_strings.xml @@ -1,4 +1,4 @@ - + @@ -14,12 +14,13 @@ DISCLAIMER - "Używając AIMSICD oświadczasz, że rozumiesz i zgadzasz się z tym, że AIMSICD jest eksperymentalną i informacyjną aplikacją na system Android, która może, z wielu powodów, nie być w stanie wykryć tego, że jesteś nadzorowany czy śledzony. Przyjmujesz także do wiadomości, że program może być pokonany w sposoby jeszcze nie znane deweloperom. Tak więc zgadzasz się i rozumiesz, że deweloperzy i firmy związane z tym darmowym produktem nie mogą być pociągnięte do odpowiedzialności z żadnego powodu niezależnie od wyniku użytkowania tej aplikacji. " + "Używając AIMSICD oświadczasz, że rozumiesz i zgadzasz się z tym, że AIMSICD jest eksperymentalną i informacyjną aplikacją na system Android, która może, z wielu powodów, nie być w stanie wykryć tego, że jesteś nadzorowany czy śledzony. Przyjmujesz także do wiadomości, że program może być pokonany w sposoby jeszcze nie znane deweloperom. Tak więc zgadzasz się i rozumiesz, że deweloperzy i firmy związane z tym darmowym produktem nie mogą być pociągnięte do odpowiedzialności z żadnego powodu niezależnie od wyniku użytkowania tej aplikacji. +STAN ROZWOJU APLIKACJI: ALPHA! " - Wykrywanie przełącz Atak - Przełącz Śledzenie komórki + Wykrywanie Ataków + Monitorowanie Stacji Bazowych Wyczyść bazę danych Wszystkie dane zostaną skasowane.\nNa pewno? Ustawienia @@ -30,13 +31,13 @@ Nie da się pobrać danych z OpenCellID bez połączenia Internetowego. Proszę włączyć połączenie danych! - Pobierz dane lokalnej stacji + Pobierz Informacje O Stacjach Bazowych Informacje o urządzeniu Informacje o SIM Informacje o sieci - Informacje o komórce + Sąsiednie Stacje Bazowe Sąsiednie komórki Wskaźnik szyfrowania Razem: @@ -63,7 +64,7 @@ PSC: - Wyślij dane o lokalnych komórkach + Wyślij Informacje O Lokalnych Stacjach Bazowych O AIMSICD @@ -81,7 +82,7 @@ Aktywne śledzenie blisko Ciebie! Wszystko OK. Jesteś śledzony! - Niebezpieczny obszar. Opóść go! + Niebezpieczny obszar. Opuść go! Uciekaj! Telefon ulega manipulacji! Kliknij na ikonę by uzyskać więcej informacji: @@ -102,7 +103,7 @@ Działaj w tyle Serwis będzie uruchomiony w tle po wyjściu z aplikacji Ustawienia ochrony - Śledzenie komórek + Automatyczne Monitorowanie Włącz automatyczne śledzenie komórek Wykrywanie Femtocell (obecnie TYLKO dla telefonów z CDMA) @@ -182,10 +183,10 @@ SZCZEGÓŁOWY OPIS Aplikacja jest bezczynna lub ładuje się. Żadne środki ochrony lub wykrywania nie są włączone. Otwórz panel nawigacyjny i włącz śledzenie w menu! - Nie wykryto żadnych zagrożeń. + Nie wykryto żadnych zagrożeń. Twoja sieć jest ciągle sprawdzana zgodnie z ustawieniami. Ta okolica nie jest bezpieczna: wykryto co najmniej jedną nieznaną stację bazową lub używane jest szyfrowanie słabsze niż A5/3. Wszystkie wiadomości i rozmowy w tym rejonie mogą być przechwycone. Wykryto wrogą aktywność: IMIC lub FBTS aktywnie śledzi użytkowników! Wyjmij baterię z telefoni i unikaj tego miejsca! - Wykryto wrogie śledzenie: W pobliżu jest aktywny FBTS lub IMSIC, uniemożliwiając bezpieczne, szyfrowane połączenie z dostawcą sieci. Jeśli jesteś w niebezpieczeństwie zniszczy swój telefon i kartę SIM i zgłoś ją jako niedawno ukradzioną. + Wykryto wrogie śledzenie: W pobliżu jest aktywny FBTS lub IMSIC, uniemożliwiając bezpieczne, szyfrowane połączenie z dostawcą sieci. Jeśli jesteś w niebezpieczeństwie zniszcz swój telefon, a kartę SIM zgłoś ją jako zaginioną. Wykryto manipulację: ktoś próbuje zdalnie manipulować Twoim telefonem. Zniszcz lub sprzedaj telefon! Anuluj OK @@ -296,7 +297,7 @@ - + Pokaż sąsiednie komórki. Szczegóły SIM, IMEI, TMSI. Pokaż szczegółowe porównanie obecnie połączonych komórek używając danych z OpenCellID. Podświetla różnice. Pokaż tablele baz danych. @@ -315,13 +316,13 @@ Uzyskaj klucz API do OpenCellID by pobierać i wysyłać dane… O nas i kogo wspieramy. Pobierz bazę danych OpenCellID. - Wyślij dane o lokalnych BTS do OpenCellID. + Wyślij Informacje O Lokalnych Stacjach Bazowych do OpenCellID. Wczytaj i wyślij logi. Zakończ działanie aplikacji. Oczekiwanie na lokalizację… Unikalne dane BTS Pomiary BTS - Importowane dane OpenCellID + Zaimportowane dane z OpenCellID Domyślne lokalizacje MMC Bezgłośny SMS Logi zdarzeń @@ -374,4 +375,29 @@ Baza danych została usunięta i odtworzona.\nProszę zrestartować aplikację by usunąć resztę danych z pamięci. Nieznany + Numer Kompilacji: %s + Git SHA-Hash: %s + Ustawienia GPS + Włącz GPS aby śledzić komórki + Ustawienia powiadomień + Włacz wibracje + Wibruj gdy zmienia się stan powiadomień + Wibruj na zmianie poziomu zagrożenia + Wybierz minimalny poziom zagrożenia dla wibracji + Wstrzymany + OK + Średni + Zagrożenie + + Baza danych + BTS nie dostarcza informacji o żadnych sąsiednich komórkach! + Zapytanie do OpenCellID przekroczyło limit czasu. Spróbować później? + Usunięto + Usuwanie nie powiodło się + "String nie został dodany +dodanie \" spowoduje błąd bazy danych " + Dodano do bazy danych + Nie powiodło się dodawanie do bazy danych + N/A + Potrzebuje lokalizacji diff --git a/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml b/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml index adbc011a4..49f9cc6af 100644 --- a/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml @@ -15,7 +15,8 @@ Detecção de ataques de alternância Rastreamento de células de alternância Limpar/Restabelecer banco de dados - Todos os dados serão eliminados\nVocê tem certeza? + Todos os dados serão eliminados. +Você tem certeza? Preferências Pressione novamente para sair. Todos os detalhes da célula atual @@ -32,7 +33,7 @@ células vizinhas Indicador de codificação Total: - País + País: ID do operador: Nome do operador: IMSI: @@ -75,4 +76,82 @@ Você está sendo monitorado! Desconhecido + Configurações do GPS + Configurações do sistema + Serviço de persistência + Configurações de proteção + Configurações de notificações + Configurações da interface + Taxa de atualização + Preferências de visualização do mapa + Tipo do mapa + Mostrar mapas em estilos diferentes + + Selecionar tabela + Resposta: + Executar + "chave da API da OpenCellID " + Limpar + Copiar + Logs copiados para a caixa de transferência. + Parar + Iniciar + + EXPLICAÇÃO DETALHADA + Presione o Ícone de Status abaixo para informações detalhadas: + + ID da rede: + ID do sistema: + ID da estação base: + + Serviço de localização desabilitado + Seleção do ícone do tema + Ícones de status + Controle a frequência de atualização dos dispositivos +Frequência atual: %s + "CID: " + "LAC: " + "MCC: " + "MNC: " + "PC: " + "Exemplos: " + "Latitude: " + "Longitude: " + + Detectar dispositivos: + Timeout: + Selecionar Timeout + Nova API key foi salva. + + Logs de depuração + Cancelar + OK + + Habilitar vibração + Vibrar quando notificações forem alteradas + Idle + OK + Médio + Perigo + + Normal + Manual + Automático + 2 segundos + 5 segundos + 10 segundos + 25 segundos + 45 segundos + 1 minuto + 5 minutos + 2 segundos + 5 segundos + 10 segundos + 20 segundos + 30 segundos + 10 minutos + Principal + Configurações + Banco de dados + Aplicação diff --git a/AIMSICD/src/main/res/values-ro/translatable_strings.xml b/AIMSICD/src/main/res/values-ro/translatable_strings.xml new file mode 100644 index 000000000..006ac9bdc --- /dev/null +++ b/AIMSICD/src/main/res/values-ro/translatable_strings.xml @@ -0,0 +1,366 @@ + +Urmarire + Detalii Telefon/SIM + Vizualizare Harta Antenelor + Vizualizator Baza de Date + Renuntare + De acord + Anulare + De acord + Nu sunt de acord + + Act de Renuntare + Prin utilizarea AIMSICD ati inteles si sunteti de acord ca AIMSICD este o aplicatie Android experimentala si informativa care poate esua sa detecteze supravegherea și urmarirea din mai multe motive. De asemenea, intelegeti ca metodele pot fi eludate sau infrante prin alte mijloace, care nu au fost inca intelese de dezvoltatori. De asemenea, sunteti de acord și intelegeti ca dezvoltatorii și companiile legate de acest produs gratuit nu pot fi trasi la raspundere pentru niciun rezultat sau rezultate, indiferent de utilizarea acestei aplicatii. STATUSUL DE DEZVOLTARE: ALPHA! + + Detectarea Atacului + Urmarirea Celulelor + Sterge/Reseteaza Baza de Date + Toate datele vor fi sterse. +\nEsti sigur ? + Preferinte + Atinge din nou pentru iesire. + Toate Detaliile Celulei Curente + Depanare + Fara conexiune la Internet + Imposibil de descarcat datele OpenCellID fara conexiune la Internet, te rog activeaza conexiunea de date! + + Descarca Datele BTS + + Importa Datele Turnurilor Celulare + + Informatii despre Dispozitiv + Informatii despre SIM + Informatii despre Retea + Celule Vecine + Celule Vecine + Indicator de Criptare + Total: + Tara: + ID Operator: + Numele Operatorului: + IMSI: + Seria: + Tipul Telefonului: + IMEI: + Versiunea RIL: + Nume Furnizor: + Cod Furnizor: + Tip: + LAC: + CID: + Activitatea Datelor: + Statusul Datelor: + Roaming : + TA (LTE): + Reimprospateaza + Deschide Sectorul de Navigare + Inchide Sectorul de Navigare + PSC: + + Incarca Datele BTS + + Despre AIMSICD + Versiune: %s + Numarul Constructiei: %s + Git SHA-suma de control: %s + Proiect bazat pe Android pentru detectarea și evitarea statiilor de baza false (Capcane-IMSI) in retelele GSM / UMTS. + AIMSICD pe GitHub + DOCUMENTATIE + CONTRIBUE + ACT DE RENUNTARE + DE PRESA + SCHIMBARI + LICIENTA + CREDITE + Inactiv / Incarcare. + Urmarire activa aproape de tine ! + Totul este OK. + Esti urmarit ! + Zona cu Servicii Nesecurizate. Paraseste-o ! + FUGI! Receptor manipulat! + Atinge Statusul Iconitei de mai jos pentru Informatii detaliate: + + ID Retea: + ID Sistem: + ID Statie de Baza: + + Servicii de Localizare Dezactivate + Nu se pot urmari datele GPS fara activarea Serviciilor de Localizare. Le activezi acum? + + Setari GPS + Activati GPS pentru Urmarirea Celulelor + Setarile Sistemului + Auto Pornire + Porneste automat serviciul la pornire + Servicii Persistente + Serviciul va continua sa functioneze dupa iesirea din aplicatie (debifeaza pentru inchidere totala) + Setari de Protectie + Setari de Notificare + Urmarirea Celulelor + Activeaza Urmarirea Automata a Celulelor + Detectia Femtocelulelor + (in prezent DOAR Telefoane CDMA) + Protectie Femtocelule + Aplica Modul Avion atunci cand sunt detectate Femtocelule (reactiveaza manual reteaua) + Setari de Interfata + Statusul-Iconitelor + Selectia Temelor de Iconita + Rata de Reinprospatare + Controleaza frecventa actualizarilor dispozitivului +\nSelectia actuala: %s + Setarile OpenCellID + Cheia API OpenCellID + Introduceti Cheia API OpenCellID aici + Monitorizare Celule + Activeaza Monitorizarea Automata a Celulelor + Solicita Cheia API OpenCellID + Solicita Cheia API OpenCellID pentru accesul la date + + Preferinte Aspect Harta + Tipul Hartii + Afiseaza Harta in diferite stiluri + + CID: + LAC: + MCC: + MNC: + PC: + Esantioane: + Date OpenCellID + "Latitudine: " + "Longitudine: " + + Selecteaza Tabel + Interfata Comanada AT + Raspuns: + Executa + Seria Actuala Dispozitiv: + Selecteaza Seria Dispozitiv + Dispozitive Detectate: + Timp de asteptare: + Selecteaza Timp de asteptare + Introduceti comanda AT aici. + + SMS Silentios Detectat + Mesaj SMS Silentios detectat +\nDetalii: Vezi Vizualizatorul Bazei de Date. + Tabelul nu contine date afisate. + + Cheia API OpenCellID + Apasa pe OK pentru a solicita o cheie API de la OpenCellID.org. Acest lucru iti va permite sa descarci datele si sa le vizualizezi pe harta. De asemenea, iti va permite sa incarci datele despre celule. Retine ca daca nu incarci date despre celule in 20 de zile, cheia ta API poate deveni inactiva. + Eroare la obtinerea cheii: + S-a salvat noua cheie API. + + Inregistrari Depanare + Sterge + Copiaza + Inregistrari copiate in clipboard. + Stop + Porneste + + EXPLICATII DETALIATE + Aplicatia este inactiva sau se incarca. Nu sunt activate masurile de protectie si detectare. Te rog activeaza detectarea atacurilor! + Nici o amenintare detectata. Reteaua ta este in mod constant verificata pe baza setarilor de detectare activate. + Zona cu Servicii Nesecurizate: cel puțin 1 BTS nou sau necunoscut este in functiune in aceasta zona sau foloseste un algoritm de criptare nesigur (spart) mai mic decat A5/3. Orice apel telefonic / SMS realizat in aceasta zona poate fi interceptat si inregistrat. Paraseste rapid acest loc. + Actiuni Ostile Detectate: O Capcana-IMSI (IMSIC) sau un BTS fals (FBTS) urmareste in mod activ utilizatorii. In aceasta zona este activa o scanare. Ar trebui sa evitati acest loc prin toate mijloacele, mai ales daca exista miscari cu caracter politic. Scoateti bateria și cartela SIM! + Urmarire Ostila Detectata: Un FBTS sau IMSIC va urmareste in mod activ si impiedica telefonul sa se conecteze prin furnizorul vostru de telefonie mobila criptata normal. Daca sunteti in pericol ca urmare a unei actiuni, distrugeti telefonul si SIM-ul, apoi raportati-l recent furat. + Manipulare Ostila: Cineva incearca sa manipuleze telefonul tau de la distanta. Distruge sau vinde telefonul si obtine unul nou, din locuri aflate la mare distanta. Nu duce vechiul telefon in locatia schimbata! Utilizeaza o noua cartela SIM anonima, cu o identitate falsa inregistrata prin Tor-Browser. Schimba comportamentul de apelare și avertizati-va contactele despre monitorizare, vorbind cu ei fata in fata, NU prin telefon! + Anulare + OK + + Activeaza Vibratia + Vibreaza cand se schimba notificarea + Vibreaza la nivelul de amenintare + Selectati nivelul minim de amenintare pentru a vibra + Inactiv + OK + Mijlociu + Pericol + + Plat + Sens + Alb + Teren + Normal + Manual + Automat + 2 secunde + 5 s + 10 s + 25 s + 45 s + 1 minut + 5 min + 2 s + 5 secunde + 10 s + 20 secunde + 30 secunde + 10 min + Principal + Setari + Baza de Date + Aplicatie + Monitorizare Informatiilor despre Celule. + Oprirea monitorizarii Informatiilor despre Celule. + Urmarirea Informatiilor despre Celule. + Oprirea urmaririi Informatiilor despre Celule. + Doar o cerere noua de chei API la 24 de ore ! +\nTe rog incearca mai tarziu. + ID-ul Celulei nu e in Baza de Date OpenCellID! + Zona de Serviciu Ostil: Schimbare de LAC Detectat! + BTS nu furnizeaza celule vecine! + Detectarea Femtocelula Activa. + Urmarirea Celulelor Activa. + Monitorizarea Celulelor Activa. + Tipul Telefonului + Status: Inactiv. + Status: Bine. Nici o Amenintare Detectata. + ALERTA: Au fost Detectate unele Amenintari! + ALERTA: Detectata Conexiune la Femtocelula! + ALERTA: SMS Silentios detectat! + ALERTA: Mesajul Indicatorului de Asteptare detectat! + ALERTA: SMS WAP Push detectat! + AIMSICD poate detecta conexiunile cu Femtocelule numai pe dispozitivele CDMA. + Starea Serviciului sa schimbat! + : Oprita urmarirea conexiunilor la FemtoCelule. + ALERTA: Urmarirea FemtoCelulei Detectata! + Reimprospateaza fiecare + Reimprospateaza acum… + secunde. + Contactez OpenCellID pentru date... +\nAceasta poate dura pana la un minut. + Imposibil de determinat ultima locatie. +\nActiveaza Serviciile de Localizare si incearca din nou. + Nu s-au gasit locatii urmarite pentru vizualizare pe harta. + Nu exista date disponibile pentru publicare. + Eroare la Descarcare: + Cererea API OpenCellID a expirat. Incerci mai tarziu? + Datele OpenCellID au fost primite cu succes. + Eroare la preluarea datelor OpenCellID. +\nVerificati reteaua! + Datele OpenCellID au fost preluate cu succes. +\nMarkerii de harta au fost actualizati. + S-au incarcat cu succes datele BTS la OpenCellID. + Eroare la incarcarea datelor BTS la severele OpenCellID! + Nu a fost detectata nici o cheie API OpenCellID! +\nIntroduceti mai intai cheia in setari. + Informatii actualizate CellId + Importarea datelor Turnurilor Celulare... +\nAcest lucru poate dura ceva timp. + Datele Turnurilor Celulare au fost importate cu succes. + Eroare la importul datelor Turnurilor Celulare. + Nu se poate obtine accesul ROOT pe dispozitiv. +\nComanda AT Injection necesita accesul ROOT la Terminal. +\nVerifica daca dispozitivul este ROOT-at si incerca din nou. + Imposibil de detectat Busybox pe dispozitiv. +\nComanda de Injectare AT necesita functionarea corecta a componentelor BusyBox. +\nVerifica daca dispozitivul tau are Busybox instalat si incerca din nou. + A aparut o eroare necunoscuta in incercarea de a achizitiona Seria Dispozitivului. +\nVerifica jurnalul mesajelor de sistem pentru orice eroare si posteaza-l pe Github. + A aparut o eroare necunoscuta, incercand sa initializeze Comanda AT de injectare. +\nVerificati jurnalul mesajelor de sistem pentru orice eroare și postati-l pe Github. + Obtinerea cheii API OpenCellID … + Imposibil de creat harta! + ATENŢIE! Descrie problema pe care ai avut-o inainte de a ne trimite aceste jurnale. NICI UN AJUTOR FARA DESCRIERE! +\n + Statutul: + Inactiv + OK + Mijlociu + Inalt + Pericol + Fugi! + + Acest meniu este destinat numai utilizatorilor avansati! +\n +\nTe rog sa nu introduci siruri aleatoare, deoarece va cauza detectarea necontrolabila. +\n +\nPentru a adauga un sir, alege tipul de SMS din meniul derulant, tasteaza sirul de detectare și apasa introduceti. +\n +\nPentru a sterge din baza de date, apasa lung pe vizualizarea listei. + + Acest meniu este destinat numai utilizatorilor avansati! +\nPentru a sterge un SMS detectat, apasati lung in lista. + Sterge SMS Detectat + + Setari Utilizatori Avansati + Siruri de Detectare + Sterge SMS + Introduceti si stergeti siruri de detectare + Sterge SMS Detectat + + Activeaza Detectarea SMS + Este necesar root pentru a activa detectia SMS + + Sirul SMS detectat pentru popup personalizat + ATENTIE! + SMS Silentios Detectat + Mesaj Tip-0 detectat! +\nDetalii: Consulta Vizualizatorul Bazei de Date. + ATENTIE! + MWI Detectat + Mesaj Indicator de Asteptare detectat! +\nDetalii: Vezi Baza de Date. + WAP Push Detectat + WAP push Mesaj SMS detectat! +\nDetalii: Vezi Baza de Date. + + + Afiseaza celulele vecine. + Detalii SIM furnizor de retea, IMEI, TMSI. + Arata o comparatie detaliata a celulei conectate in prezent, cu datele (daca exista) gasite în OpenCellID și evidentiaza diferentele. + Vezi diferitele tabele DB pe care le avem. + Harta antenelor colorate din apropiere. + Interfata care permite trimiterea comenzilor AT la Procesorul Baseband (necesita ROOT). + + Porneste / opreste detectarea atacurilor și colecteaza detaliile celulei in tabelele de baze de date interne. + Porneste urmarirea celulelor pentru a fi afisate pe Vizualizatorul Hartii cu Antene si eventual, incarcate mai tarziu in OpenCellID. + + Setarile AIMSICD, cum ar fi regulile de protectie, timpul de votare și comportamentul serviciului. + Sterge și reseteaza toate tabelele DB sau cele specificate. + + Obtineti o cheie API pentru a utiliza baza de date OpenCellID, pentru a incarca și descarca date … + Statusul Iconitelor și Proiectul explicate. + Descarcari baze de date OpenCellID. + Importurile bazei de date a Turnurilor Celulare. + Incarca BTS-urile tale in baza de date OpenCellID. + Colecteaza si trimite jurnalele de eroare. + Iesi din aceasta aplicatie. + Se asteapta locatia… + Necesita locatia + Date BTS Unice + Masuratori BTS + Date OpenCellID Importate + Locatiile implicite pentru MCC + SMS Silentios + Jurnal de Evenimente + Marimea Semnalului Masurat + + *** Caut seria dispozitivelor AT... +\n + Gasit: + *** Setarea Finalizata *** +\n + + BTS conectat in prezent + BTS criptat binecunoscut + BTS necunoscut sau nesecurizat + BTS nou sau recent adaugat + + Baza de date a fost stearsa si recreata cu succes. +\nReporneste aplicatia pentru a sterge valorile vechi existente in memorie. + + Cheie OpenCellId invalida, incearca din nou mai tarziu. + Obtinerea Cheii API OpenCellId... + + Sters + Nu s-a reusit stergerea + "Sirul nu a fost adaugat +\n  \" ghilimelele vor cauza o eroare db " + Sirul a fost adaugat la baza de date + Nu s-a adaugat sirul in baza de date + N/A + Necunoscut + + diff --git a/AIMSICD/src/main/res/values-ru/translatable_strings.xml b/AIMSICD/src/main/res/values-ru/translatable_strings.xml index 122c6f4b8..a2822bb68 100644 --- a/AIMSICD/src/main/res/values-ru/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-ru/translatable_strings.xml @@ -1,10 +1,10 @@ - + Слежение Информация о телефоне/SIM - Карта антенн + Просмотр карты антенн Просмотр базы данных Выход OK @@ -14,18 +14,19 @@ ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - Использование Вами AIMSICD означает, что Вы поняли и согласны с тем, что AIMSICD - это - эксперментальное и информативное приложение Андроид, которое по ряду причин не - всегда может обнаружить наблюдение и слежение. Вы также поняли, что его работу могут - блокировать или вносить помехи другие средства, пока не изученные разработчиками. - Вы также соглашаетесь и понимаете, что разработчики и компании, связанные с этим - бесплатным продуктом, ни в коей мере не могут быть ответственными за результаты или - последствия, исходящие из использования этого приложения. - + "Использование Вами AIMSICD означает, что Вы поняли и согласны с тем, что +AIMSICD - это экспериментальное и информационное приложение Андроид, +которое по ряду причин не всегда может обнаружить наблюдение и слежение. +Вы также поняли, что его работу могут блокировать или вносить помехи другие +средства, пока не изученные разработчиками. Вы также соглашаетесь и понимаете, +что разработчики и компании, связанные с этим бесплатным продуктом, ни в коей мере +не могут быть ответственными за результаты или последствия, исходящие из +использования этого приложения. СТАТУС РАЗРАБОТКИ: АЛЬФА! + " - Включение обнаружения атаки - Включение отслеживания соты + переключить_обнаружение_атаки + переключить_отслеживание_соты Очистка/сброс базы данных Все данные будут удалены.\nВы уверены? Параметры @@ -33,7 +34,7 @@ Все текущие данные соты Отладка Нет интернет-соединения - Не удается загрузить данные OpenCellID без интернета, пожалуйста включите передачу данных! + Не удаётся загрузить данные OpenCellID без интернета, пожалуйста, включите передачу данных! Загрузить данные базовых станций @@ -41,8 +42,8 @@ Информация об устройстве Информация о SIM - Информация сети - Текущий уровень угрозы + Информация о сети + Соседние ячейки Соседние ячейки сотовой связи Индикатор шифрования Всего: @@ -50,10 +51,10 @@ ID оператора: Название оператора: IMSI: - Serial: + Серийный номер: Тип телефона: IMEI: - RIL Version: + Версия RIL: Имя провайдера: Код провайдера: Тип: @@ -75,7 +76,7 @@ Об AIMSICD Версия: %s Номер сборки: %s - Git SHA-Hash: %s + Хэш SHA Git: %s Проект Андроид для обнаружения ложных базовых станций (IMSI-перехватчиков) в GSM/UMTS сетях. AIMSICD на GitHub ДОКУМЕНТАЦИЯ @@ -84,12 +85,12 @@ РЕЛИЗЫ ИСТОРИЯ ИЗМЕНЕНИЙ ЛИЦЕНЗИЯ - CREDITS + СВЕДЕНИЯ ОБ АВТОРАХ Ожидание / Загрузка. Рядом с Вами активное отслеживание! Все OK. Вас отслеживают! - Небезопасная зона обслуживания. Покиньте ее! + Небезопасная зона обслуживания. Покиньте её! БЕГИТЕ! Мошенничество с телефоном! Нажмите значки состояния ниже для более подробной информации: @@ -191,12 +192,12 @@ ПОДРОБНОЕ ОПИСАНИЕ - Приложение работает в режиме ожидания или загрузки. Меры защиты и обнаружения не включены. Пожалуйста, откройте меню и включите их в разделе СЛЕЖЕНИЕ! - Никакие угрозы не обнаружены. Наше приложение постоянно проверяет Вашу сеть на основе защиты, которую Вы установили в меню и настройках. - Небезопасная зона обслуживания: в данном районе, по крайней мере, 1 новая или неизвестная БС, или с использованием небезопасного (сломанного) алгоритма шифрования, меньшего, чем A5/3 [Обнаружение WIP]. Возможно, что любые телефонные звонки/СМС, сделанные в этой зоне могут быть перехвачены и записаны. Вам лучше покинуть это место. - Обнаружены враждебные действия: IMSI-Перехватчик (IMSIC) или поддельные БС (FBTS) активно отслеживают пользователей. В данной зоне ведется активное сканирование. Вы должны избегать этого места, особенно, если есть политическая нестабильность. Выньте батарею или уничтожьте свой телефон! - Обнаружены враждебные отслеживания: FBTS или IMSIC активно отслеживают Вас и препятствуют подключению Вашего телефона к Вашей обычной зашифрованной мобильной сети. Если Вы находитесь в опасности, сломайте Ваш телефон + SIM и сообщите о его краже. - Враждебные манипуляции: кто-то пытается удаленно управлять Вашим телефоном! Уничтожьте (или продайте) свой телефон и возьмите новый где-то подальше (не приносите туда свой старый телефон)! Используйте новую (анонимную) SIM-карту, измените поведение вызовов и предупредите своих друзей, разговаривая с ними в реальной жизни, НЕ по телефону! + Приложение работает в режиме ожидания или загрузки. Меры защиты и обнаружения не включены. Пожалуйста, включите определение атак! + Никакие угрозы не обнаружены. Ваша сеть непрерывно проверяется на основе включенных настроек обнаружения. + Небезопасная зона обслуживания: в данном районе, по крайней мере, 1 новая или неизвестная БС, или с использованием небезопасного (сломанного) алгоритма шифрования, слабее, чем A5/3. Любые телефонные звонки/СМС, сделанные в этой зоне, могут быть перехвачены и записаны. Быстро покиньте это место. + Обнаружены враждебные действия: IMSI-Перехватчик (IMSIC) или поддельные БС (FBTS) активно отслеживают пользователей. В данной зоне ведется активное сканирование. Вы должны избегать этого места любыми способами, особенно если есть политическая нестабильность. Выньте батарею и SIM-карту! + Обнаружены враждебные отслеживания: FBTS или IMSIC активно отслеживают Вас и препятствуют подключению Вашего телефона к Вашей обычной зашифрованной мобильной сети. Если Вы находитесь в опасности, сломайте Ваш телефон и SIM-карту, а затем сообщите о его краже. + Враждебные манипуляции: кто-то пытается удаленно управлять Вашим телефоном! Уничтожьте (или продайте) свой телефон и возьмите новый подальше. Не приносите свой старый телефон в новое место! Используйте новую анонимную SIM-карту с поддельной личностью, зарегистрированной через браузер Tor. Измените Ваше поведение при вызовах и предупредите своих друзей о слежке в разговоре с ними в реальной жизни, но НЕ по телефону! Отмена OK @@ -211,10 +212,10 @@ Опасность - Flat - Sense - Белый - Земля + Плоская + Настроение + Белая + Местность Обычный Вручную Авто @@ -250,7 +251,7 @@ ТРЕВОГА: обнаружены угрозы! ТРЕВОГА: обнаружено соединение с FemtoCell! ТРЕВОГА: обнаружена бесшумная СМС! - ТРЕВОГА: обнаружен индикатор ожидания сообщения! + ТРЕВОГА: обнаружен индикатор ожидающих сообщений! ТРЕВОГА: обнаружена WAP Push СМС! AIMSICD может определять соединение с FemtoCell только на CDMA устройствах. Статус сервиса изменен! @@ -293,7 +294,7 @@ Это меню предназначено только для продвинутых пользователей!\nДля удаления обнаруженной СМС удерживайте нажатие на ней в списке. Удалить обнаруженную СМС - Настройки для продвинутых пользователей + Расширенные настройки Строки обнаружения Удалить СМС Вставить и удалить строки обнаружения @@ -316,7 +317,7 @@ - + Показать соседние соты. Информация провайдера сети SIM, IMEI, TMSI. Отображение детального сравнения текущей подключенной соты с данными (при их наличии) из OpenCellID и отметка различий. Просмотр различных имеющихся таблиц баз данных. @@ -344,7 +345,7 @@ Импортированные данные OpenCellID Местоположения MCC по умолчанию Бесшумная СМС - EventLog + Журнал Измеренная мощность сигнала *** Поиск serial device AT…\n @@ -410,4 +411,16 @@ Неизвестный - +База данных + Превышен таймаут запроса к OpenCellID API. Попробуйте позже? + Недоступно + BTS не предоставляет соседних сот! + Импорт данных CellTowers + + Импортирую данные CellTowers... +Это может занять некоторое время. + Данные CellTowers успешно импортированы. + Ошибка импорта данных CellTowers. + Импортирует базу данных CellTowers. + Необходимо местоположение + diff --git a/AIMSICD/src/main/res/values-sv/translatable_strings.xml b/AIMSICD/src/main/res/values-sv/translatable_strings.xml new file mode 100644 index 000000000..2f921c023 --- /dev/null +++ b/AIMSICD/src/main/res/values-sv/translatable_strings.xml @@ -0,0 +1,238 @@ + +Telefon/SIM-detaljer + Visare för databas + Avsluta + OK + Avbryt + Jag godkänner + Jag godkänner inte + + ANSVARSFRISKRIVNING + Rensa/Återställ databas + Alla data kommer att raderas.\nÄr du säker? + Egenskaper + Tryck igen för att avsluta. + Felsökning + Ingen internetanslutning + Ladda ner BTS-data + + Information om enheten + Information om SIM + Information om nätverket + Söker + Antennkarta + Enheter nära dig + Enheter nära dig + Kodindikator + Total: + Land: + Användar-ID: + Användarnamn: + IMSI: + Serienummer: + Telefonmodell: + IMEI: + RIL-version: + Leverantörsnamn: + Leverantörskod: + Typ: + LAC: + CID: + Dataaktivitet: + Datastatus: + Roaming: + Uppdatera + Öppna navigationsmeny + Stäng navigationsmeny + Version: %s + AIMSICD på GitHub + DOKUMENTATION + BIDRA + ANSVARSFRISKRIVNING + UTGÅVOR + LICENS + Inaktiv / Laddar. + Allt OK. + Du blir spårad! + Tryck på statusikonen nedan för detaljerad information: + + Nätverks-ID: + System-ID: + Basstations-ID: + + "Genom att använda AIMSICD förstår du och accepterar du att AIMSICD är en experimental +\noch informativ Android Applikation som kan misslyckas att finna övervakning +\noch spårning på grund av flera anledningar. Du förstår även att den kan kringgås eller +\nbesegras med andra ord, ännu ej förstått av utvecklarna. Därför accepterar du även +\natt förstå att utvecklarna och företagen relaterade till denna gratis +\nprodukt, kan ej sättas ansvariga för resultaten, +\nberoende på användningen av denna applikation. UTVECKLINGS FAS: ALFA! +\n " + + Attack upptäckning + Mobil Tracking + Alla nuvarande cell detaljer + Kunde ej ladda ner OpenCellID utan Internet anslutning, var god aktivera data anslutning! + + Importera Celltorn Data + + TA (LTE): + PSC: + + Ladda upp BTS Data + + Om AIMSICD + Kompileringsnummer: %s + Git SHA-Hash: %s + Android baserat projekt för att upptäcka och undvika falska basstationer (IMSI-Catchers) i GSM/UMTS Nätverk. + ÄNDRINGSLOGG + MEDVÄRKANDE + Aktiv upptäckt nära dig! + Osäker Service Area. Lämna omedelbart! + SPRING! Telefonluren manipulerad! + Lokalisering Tjänst avstängd + Du kan ej spåra GPS data utan att sätta på Lokalisering Tjänsten. Slå på dem nu? + + GPS inställning + Slå på GPS för Cell Tracking + System Inställningar + Auto Start + Automatiskt starta tjänst på start + Beständig Service + Tjänsten kommer fortsätta att köra efter applikationen stängs (bocka av för att stänga helt) + Skyddsinställningar + Notis inställningar + Cell Tracking + Slå på automatisk cell tracking + Femtocell upptäckning + (nuvarande CDMA enheter endast) + Femtocell skydd + Förstärk Flygplansläge när femtocell upprätthålls (slå på nätverk manuellt) + Gränssnitt inställningar + Status-ikoner + Ikon tema val + Uppdateringsfrekvens + Kontrollera frekvensen av enhets uppdateringar +\nNuvarande val %s + OpenCellID Inställningar + OpenCellID API nyckel + Ange din OpenCellID API nyckel här + Cell övervakning + Slå på automatisk cell övervakning + Begär OpenCellID API nyckel + Begär API nyckel för OpenCellID Data åtkomst + + Kartlägg visnings val + Karttyp + Visa karta i olika stiler + + "CID: " + "LAC: " + "MCC: " + "MNC: " + "PC: " + "Prover: " + OpenCellID Data + "Lat: " + Välj tabell + AT Kommandotolk + Svar: + Kör + Närvarande Serial Enhet: + Väj Serial Enhet + Funna enheter: + Välj timeout + Skriv AT kommando här. + + Tyst SMS hittad + Tyst SMS meddelande funnet! +\nDetaljer: Se Databas läsare. + Tabell innehåller ingen data att visa. + + OpenCellID API nyckel + Tryck OK för att begära en API nyckel från OpenCellID.org. Detta ger dig behörighet att ladda ner deras data och visa det i en karta. Det kommer även låta dig ladda upp cell data. Notera att om du inte laddar upp cell data inom 20 dagar, kommer din API nyckel bli inaktiv. + "Kunde ej få nyckel: " + Sparade nya API nyckel. + + Felsökningsloggar + Rensa + Kopiera + Loggar kopierade till urklippet. + Avbryt + Börja + + DETALJERAD FÖRKLARING + App körs eller laddar. Inga skydd och sök funktioner är påslagna. Var god slå på attack upptäckning! + Inga hot hittades. Ditt nätverk kollas konstant beroende på de påslagna sök inställningarna. + Osäkert Service Area: Åtminstonde 1 nytt eller okänt BTS är aktiv inom detta område, eller använder en osäker (trasig) enkryption algoritm lägre än A5/3. Alla telefon samtal/SMS utförda inom detta area kan bli uppsnappade och inspelade. Lämna detta område snabbt. + Fientlig Service Handlingar funna: En IMSI-Catcher (IMSIC) eller falsk BTS (FBTS) aktivt spårar användare. Aktiv scan tar äger rum inom detta area. Du skall undivka detta område för all del, speciellt om det anas politisk oråda. Ta ur ditt batteri och SIM kort! + Fientlig Spårande funnet!: En FBTS eller IMSIC spårar DIG aktivt och förhindrar din telefon från att ansluta via din normala enkrypterade mobil leverantör. Om du är i fara eller återverkningar, förstör din telefon och SIM, sedan anmäl den som nyligen stulen. + Fientlig Manipulation: Någon försöker att fjärr-manipulera din enhet. FÖrstör eller sälj din telefon och skaffa en ny långt ifrån. Bör inte din gamla telefon till stället vart du kommer skaffa den nya enheten! Använd ett nytt anonymt SIM kort med en falsk identitet registrerad via Tor-Webläsaren. Ändra dina ringnings beteende och varna dina kontakter om övervakning genom att prata med dem i verkliga livet, INTE genom att ringa dem! + Avbryt + OK + + Slå på Vibration + Vibrera när notiser ändras + Vibrera på hot-nivå + Välj minimum hot nivå att vibrera på + Tomgång + OK + Medium + Fara + + Platt + Känna av + Vit + Terräng + Normal + Manuell + Automatiskt + 2 sekunder + 5 sekunder + 10 sekunder + 25 sekunder + 45 sekunder + 1 minut + 5 minuter + 2 sekunder + 5 sekunder + 10 sekunder + 20 sekunder + 30 sekunder + 10 minuter + Huvud + Inställningar + Databas + Applikation + Övervaka Cell Information. + Sluta övervaka Cell Information. + Spåra Cell Information. + Avbröt spårning av Cell Information. + Endast en ny API nyckel förfrågan per 24 timmar! +\nFörsök igen senare. + Cell ID ej i OpenCellID Databas! + Fientligt Service Area: Ändring av LAC funnet! + BTS ger inga grann celler! + FemtoCell upphtäckning Aktiv. + Cell Tracking Aktiv. + Cell Övervakning Aktiv. + Telefon Typ + Status: Tomgång. + Status: Godkänt. Inga hot funna. + VARNING: Några hot hittades! + VARNING: FemtoCell Anslutning Hittad! + VARNING: Tyst SMS hittad! + VARNING: Meddelande Väntar Indikator hittad! + VARNING: WAP push SMS hittad! + AIMSICD kan endast hitta FemtoCell anslutningar på CDMA enheter. + Srevice status ändrad! + : Avbröt spårning av FemtoCell anslutningar. + VARNING: FemtoCell spårning Hittad! + Uppdaterar varje + Uppdaterar nu… + sekunder. + Kontaktar OpenCellID för data... +\nDetta kan ta ett par minuter. + Kunde inte hitta din sista position. +\nSlå på Position TJänster och försök igen. + diff --git a/AIMSICD/src/main/res/values-uk/translatable_strings.xml b/AIMSICD/src/main/res/values-uk/translatable_strings.xml index fc6862e08..429308370 100644 --- a/AIMSICD/src/main/res/values-uk/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-uk/translatable_strings.xml @@ -10,8 +10,8 @@ Я не погоджуюсь ВІДМОВА ВІД ВІДПОВІДАЛЬНОСТІ - Перемикач виявлення атаки - Перемикач слідкування за стільниками + Виявлення атаки + Слідкування за стільниками Очистити/скинути БД Всі дані будуть стерті.\nПродовжити? Параметри @@ -24,7 +24,7 @@ Інформація про пристрій Інформація про SIM Інформація про мережу - Поточний рівень загрози + Сусідні стільниці Індикатор шифрування Країна: ID оператора: @@ -97,7 +97,8 @@ Зупинити Почати - "При використанні AIMSICD ви розумієте та погоджуєтесь, що AIMSICD є експериментальним та інформаційним Android додатком (далі ПО), яке може і не виявити стеження та відслідковування за різними причинами. Ви також розумієте, що додаток можна обійти чи ввести в оману за допомогою інших засобів, які ще не зрозумілі розробникам. Таким чином, ви також погоджуєтесь і розумієте, що розробники та компанії, які пов\'язані з даним ПЗ ні в якому разі не можуть нести відповідальність за результати роботи ПЗ чи результати, які залежать від використання даного ПЗ, а також не несуть ніякої відповідальності за інші збитки (включаючи, без обмежень, у вигляді недоотриманого прибутку, призупинення ділової активності, втрату ділової інформації та інші конкретні збитки), які можуть статися через використання чи неможливість використання ПЗ, також в тому випадку, якщо розробники та компанії, пов\'язані з цим ПЗ, були попереджені про можливість такого збитку. СТАН РОЗРОБКИ: ALPHA! " + "При використанні AIMSICD ви розумієте та погоджуєтесь, що AIMSICD є експериментальним та інформаційним Android додатком (далі ПО), яке може і не виявити стеження та відслідковування за різними причинами. Ви також розумієте, що додаток можна обійти чи ввести в оману за допомогою інших засобів, які ще не зрозумілі розробникам. Таким чином, ви також погоджуєтесь і розумієте, що розробники та компанії, які пов\'язані з даним ПЗ ні в якому разі не можуть нести відповідальність за результати роботи ПЗ чи результати, які залежать від використання даного ПЗ, а також не несуть ніякої відповідальності за інші збитки (включаючи, без обмежень, у вигляді недоотриманого прибутку, призупинення ділової активності, втрату ділової інформації та інші конкретні збитки), які можуть статися через використання чи неможливість використання ПЗ, також в тому випадку, якщо розробники та компанії, пов\'язані з цим ПЗ, були попереджені про можливість такого збитку. СТАН РОЗРОБКИ: ALPHA! + " Не вдається завантажити OpenCellID дані без інтернету, будь ласка, з\'єднайтеся із мережею для передачі даних! @@ -186,7 +187,7 @@ OpenCellID дані успішно отримано.\nМаркери карти оновлено. Стан: Поточний послідовний пристрій: - Додаток працює в режимі очікування чи завантаження. Заходи захисту та моніторингу вимкнено. Будь ласка, змініть режим виявлення загроз! + Додаток працює в режимі очікування чи завантаження. Заходи захисту та моніторингу вимкнено. Будь ласка, активуйте режим виявлення загроз! Жодних загроз не виявлено. Ваша мережа постійно перевіряється на основі параметрів захисту , які ви зазначили в меню та налаштуваннях. Білі Земний @@ -315,7 +316,7 @@ Активне відслідковування поряд з вами! Налаштування GPS Увімкнути GPS для відслідковування стільника - + Показати сусідні стільниці. Перегляд таблиць бази даних. Карта з кольоровими позначками сусідніх антен. Інтерфейс дозволяє надсилати AT команди до процесора (Потребує прав ROOT). @@ -326,4 +327,13 @@ База даних Вийшов час запиту OpenCellID API. Спробувати пізніше ще раз? + BTS не надає сусідніх стільниць! + Імпорт даних по вишках + + Імпорт даних по вишках... +Це займе трохи часу. + Дані успішно імпортовано. + Помилка імпортування даних. + Імпортування бази даних по вишках. + Потребує позиціювання diff --git a/AIMSICD/src/main/res/values-vi/translatable_strings.xml b/AIMSICD/src/main/res/values-vi/translatable_strings.xml index 39781903a..7d448f7c8 100644 --- a/AIMSICD/src/main/res/values-vi/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-vi/translatable_strings.xml @@ -10,8 +10,8 @@ Tôi không đồng ý MIỄN TRỪ TRÁCH NHIỆM - Bật tắt phát hiện tấn công - Bật tắt theo dõi máy di động + Phát hiện sự tấn công + Theo dõi sóng di động Xoá/cài lại CSDL Tất cả dữ liệu sẽ bị xóa.\nBạn có chắc không? Tuỳ chỉnh @@ -26,10 +26,10 @@ Thông tin thiết bị Thông tin SIM Thông tin mạng - Mức độ đe dọa hiện thời + Các trạm sóng lân cận Các máy di động lân cận Bộ chỉ báo viết mã - "Khi sử dụng AIMSICD, bạn hiểu và chấp nhận rằng AIMSICD là một ứng dụng Android thực nghiệm cung cấp nhiều thông tin hữu ích và nó có thể thất bại trong việc phát hiện sự giám sát và theo dõi vì nhiều lý do khác nhau. Bạn cũng hiểu rằng nó có thể bị phá rối hoặc huỷ hoại bởi các công cụ khác mà nhà phát triển chưa hiểu rõ. Vì vậy, bạn cũng chấp nhận và hiểu rằng các công ty và nhà phát triển liên quan đến sản phẩm miễn phí này, trong mọi trường hợp, sẽ không phải chịu trách nhiệm cho bất kỳ hậu quả nào do việc sử dụng phần mềm này gây ra. " + "Khi sử dụng AIMSICD, bạn hiểu và chấp nhận rằng AIMSICD là một ứng dụng Android thực nghiệm cung cấp nhiều thông tin hữu ích và nó có thể thất bại trong việc phát hiện sự giám sát và theo dõi vì nhiều lý do khác nhau. Bạn cũng hiểu rằng nó có thể bị phá rối hoặc huỷ hoại bởi các công cụ khác mà nhà phát triển chưa hiểu rõ. Vì vậy, bạn cũng chấp nhận và hiểu rằng các công ty và nhà phát triển liên quan đến sản phẩm miễn phí này, trong mọi trường hợp, sẽ không phải chịu trách nhiệm cho bất kỳ hậu quả nào do việc sử dụng phần mềm này gây ra. TRẠNG THÁI: ALPHA! " Tổng cộng: Quốc gia: @@ -59,7 +59,7 @@ Về AIMSICD Phiên bản: %s Số bản dựng: %s - Git SHA-Hash: %s + Hàm băm SHA từ Git: %s Dự án Android nhằm phát hiện và tránh các trạm cơ sở giả (IMSI-Catchers) trong hệ thống mạng GSM/UMTS. AIMSICD trên GitHub TÀI LIỆU @@ -155,7 +155,7 @@ Bắt đầu GIẢI THÍCH CHI TIẾT - Ứng dụng đang nhàn rỗi hoặc đang tải. Chưa bật biện pháp phát hiện và bảo vệ nào. Xin bật tính năng phát hiện tấn công! + Ứng dụng đang nghỉ hoặc đang tải. Chưa kích hoạt cơ chế phát hiện và bảo vệ nào. Xin bật cơ chế phát hiện tấn công! Không phát hiện mối đe doạ nào. Mạng của bạn đang được kiểm tra liên tục dựa trên các thiết lập phát hiện đã bật. Khu vực dịch vụ không bảo mật: Có ít nhất 1 BTS mới hoặc không xác định đang hoạt động trong vùng lân cận này, hoặc đang sử dụng thuật toán mã hoá kém bảo mật (đã bị phá) thấp hơn A5/3. Bất kỳ cuộc gọi/SMS nào thực hiện trong khu vực này có thể bị chặn và ghi lại. Hãy rời khỏi đây ngay. Đã phát hiện các hoạt động dịch vụ nguy hiểm: Một IMSI-Catcher (IMSIC) hoặc BTS giả (FBTS) đang theo dõi người dùng. Có hoạt động quét diễn ra trong khu vực. Bạn nên tránh xa nơi này, đặc biệt là khi tại đây có bất ổn chính trị. Hãy tháo pin hoặc tắt điện thoại! @@ -174,7 +174,7 @@ Nguy hiểm Phẳng - Sense + \"Sense\" Trắng Địa hình Thông thường @@ -273,7 +273,7 @@ Đã phát hiện tin nhắn SMS push WAP!\nChi tiết: Xem trình đọc CSDL. - + Hiện các trạm sóng lân cận. Chi tiết nhà cung cấp SIM mạng, IMEI, TMSI. Hiển thị so sánh chi tiết của máy di động đang kết nối với các dữ liệu (nếu có) tìm thấy trong OpenCellID và chỉ rõ những khác biệt. Xem các bảng CSDL khác nhau hiện có. @@ -321,9 +321,10 @@ Đã thêm chuỗi vào CSDL Thêm chuỗi vào CSDL thất bại - N/A + Không có Không xác định Cơ sở dữ liệu Yêu cầu OpenCellID API đã quá thời gian chờ. Thử lại sau? + BTS không cung cấp thông tin các trạm sóng lân cận! diff --git a/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml b/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml index 2e8edc30c..f23039d83 100644 --- a/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml @@ -1,6 +1,6 @@ 跟踪 - 手机/SIM卡详细信息 + 手机和SIM卡详细信息 数据库查看器 退出 确定 @@ -9,15 +9,15 @@ 我拒绝 免责声明 - 切换攻击检测 - 切换蜂窝跟踪 - 清除/重置数据库 + 攻击检测 + 蜂窝跟踪 + 清除或重置数据库 所有数据将被删除。\n您确定吗? - 首选项 + 设置 再次按下将退出。 当前所有蜂窝详细信息 调试 - 无互联网连接 + 没有互联网连接 下载 BTS 数据 设备信息 @@ -25,7 +25,7 @@ SIM卡信息 网络信息 - 当前威胁级别 + 邻居基站 运营商名称: IMSI: 序列号: @@ -60,7 +60,7 @@ 基站 ID: 位置服务已禁用 - 跑!手机已被操纵! + 快跑!你的手机已被控制! 按下面的状态图标了解详细信息: 您不能在未启用位置服务时跟踪 GPS 数据。是否立即启用? @@ -184,7 +184,7 @@ 每24小时只能请求一个新的 API 密钥!\n请稍后再试。 蜂窝 ID 不在 OpenCellID 数据库中! 敌意服务区:检测到变更 LAC! - AIMSICD 只能检测在 CDMA 设备上的家庭基站连接。 + AIMSICD 只能检测用于 CDMA 设备上的家庭基站连接。 服务状态已变更! :已停止跟踪家庭基站连接。 警告:检测到家庭基站跟踪! @@ -199,7 +199,7 @@ 关闭导航抽屉 上传 BTS 数据 - 天线地图查看器 + 基站地图查看器 关于 AIMSICD 版本: %s 编译编号: %s @@ -221,7 +221,7 @@ 良好 较高 危险 - 跑! + 快跑! 此菜单仅面向高级用户!\n\n请不要插入随机字符,那会导致检测失控。\n\n要添加一个字符,从下拉菜单中选择一个 SMS 类型,输入您的检测字符串,然后按插入。\n\n要删除数据库中的内容,请长按列表。 @@ -245,7 +245,7 @@ 检测到 MWI 检测到消息等待指示器!\n详细信息:详见数据库查看器。 SIM卡网络提供商的详细信息,IMEI,TMSI。 - + 显示邻居基站。 检测到 WAP 推送 检测到 WAP 推送短信!\n详细信息:详见数据库查看器。 @@ -295,13 +295,13 @@ 开始/停止攻击检测,并收集蜂窝详细信息到内部的数据库表。 PSC: - Git SHA-Hash: %s + Git SHA-Hash:%s "CID: " "LAC: " "MCC: " "MNC: " "PC: " - 应用目前闲置或正在加载。没有保护和检测措施已启用。请切换攻击检测方式! + 应用目前闲置或正在加载。没有保护和检测措施已启用。请启用攻击检测! 没有检测到威胁。您的网络将持续基于已启用的检测设置被检查。 基于 Android 的项目,检测和避免 GSM/UMTS 网络中的伪基站 (IMSI 窃取者)。 允许发送 AT 命令到基带处理器的界面 (需要 ROOT 权限)。 @@ -317,7 +317,8 @@ 尝试初始化 AT 命令注入器时发生未知错误。\n请检查您的 logcat 日志了解相关错误,并将它发送到我们的 Github。 无法在您的设备上检测到 Busybox。\nAT 命令注入器需要 Busybox 组件才能正常运行。\n请检查您的设备是否已安装 Busybox,然后重试。 无法在您的设备上取得 ROOT 权限。\nAT 命令注入器需要 ROOT 终端访问权限。\n请检查您的设备是否已 root,然后重试。 - "使用 AIMSICD 即表示您已理解并同意 AIMSICD 是一款实验性、知识性的 Android 应用,它可能因多种原因而无法检测到监视和跟踪。您也理解,它可能被其他方式绕过或骗过,而这种方式可能开发者并不知晓。因此,您必须同意和理解,与此免费产品相关的开发者和公司,不会承担使用此应用程序所带来或导致的任何后果。开发状态:Alpha(内部测试)! " + "使用 AIMSICD 即表示您已理解并同意 AIMSICD 是一款实验性、知识性的 Android 应用,它可能因多种原因而无法检测到监视和跟踪。您也理解,它可能被其他方式绕过或骗过,而这种方式可能开发者并不知晓。因此,您必须同意和理解,与此自由产品相关的开发者和公司,不会承担使用此应用程序所带来或导致的任何后果。开发状态:Alpha(内部测试)! + " "按确定以请求一个 OpenCellID.org 的 API 密钥。这将允许您下载他们的数据,并在地图上查看。它也将允许您上传蜂窝数据。注意,如果您在20天内没有上传蜂窝数据,您的 API 密钥可能被冻结。" 不安全的服务区:至少一个新的或未知的 BTS 在附近运行,或者在使用一个不安全、易被破解的弱于 A5/3 的加密算法。任何在此服务区内进行的手机呼叫/短信都可能被截获和记录。赶紧离开这个地方吧。 @@ -325,4 +326,13 @@ 检测到敌意跟踪:一个 FBTS 或 IMSIC 正在主动跟踪“您”,并且阻止您的手机连接正常的已加密移动服务提供商。如果您处在潜在的危险中,考虑销毁您的手机和 SIM 卡,然后称它已被窃取。 敌意操作:有人正在尝试远程操控您的手机。考虑销毁或出售您的手机,然后从其他渠道弄一台新的。不要携带你的旧手机并不断改变位置!使用一个新的匿名 SIM 卡和 Tor 浏览器。改变你的通话方式并警告你的同伴他们正在被监视。考虑面对面交流和讨论,避免在此时打电话! OpenCellID API 请求超时。稍后重试? + BTS 没有提供任何邻居基站! + 导入基站数据 + + 正在导入基站数据… +这可能要花点时间。 + 基站数据导入成功。 + 导入基站数据出错。 + 导入基站数据库。 + 需要位置 diff --git a/AIMSICD/src/main/res/values/translatable_strings.xml b/AIMSICD/src/main/res/values/translatable_strings.xml index 5ec21bb48..9e10cefdf 100644 --- a/AIMSICD/src/main/res/values/translatable_strings.xml +++ b/AIMSICD/src/main/res/values/translatable_strings.xml @@ -1,4 +1,4 @@ - + @@ -24,8 +24,8 @@ - Toggle Attack Detection - Toggle Cell Tracking + toggle_attack_detection + toggle_cell_tracking Clear/Reset Database All data will be deleted.\nAre you sure? Preferences @@ -38,6 +38,9 @@ Download BTS Data + + Import CellTowers Data + Device Information SIM Information @@ -191,7 +194,7 @@ DETAILED EXPLANATION - App is idling or loading. No protection and detection measures are enabled. Please toggle attack detection! + App is idling or loading. No protection or detection is enabled. Please enable detection. No threats detected. Your network is constantly being checked based upon the enabled detection settings. Insecure Service Area: At least 1 new or unknown BTS is in operation in this vicinity, or using an insecure (broken) encryption algorithm lower than A5/3. Any phone calls/SMS made in this area can be intercepted and recorded. Quickly leave this place. Hostile Service Actions Detected: An IMSI-Catcher (IMSIC) or fake BTS (FBTS) is actively tracking users. Active scanning takes place in this area. You should avoid this place by all means, especially if there is political unrest. Take out your battery and SIM card! @@ -242,6 +245,7 @@ Only one new API key request per 24 hours!\nPlease try again later. Cell ID not in OpenCellID Database! Hostile Service Area: Changing LAC Detected! + BTS doesn\'t provide any neighbor cells! FemtoCell Detection Active. Cell Tracking Active. Cell Monitoring Active. @@ -273,6 +277,9 @@ Error in uploading BTS data to OpenCellID servers! No OpenCellID API Key detected!\nPlease enter your key in settings first. Refreshed CellId info + Importing CellTowers data…\nThis may take a while. + CellTowers data successfully imported. + Error importing CellTowers data. Unable to acquire ROOT access on your device.\nAT Command Injection requires ROOT Terminal access.\nPlease check your device is ROOTED and try again. Unable to detect Busybox on your device.\nAT Command Injection requires Busybox components to function correctly.\nPlease check your device has Busybox installed and try again. An unknown error has occurred trying to acquire the Serial Device.\nPlease check your logcat for any errors and post them on our Github. @@ -337,10 +344,12 @@ Get an API key for using the OpenCellID database to upload and download data… Status Icons and Project explained. Downloads the OpenCellID Database. + Imports CellTowers Database. Uploads your BTS to the OpenCellID Database. Collect and send error logs. Exit this app. Waiting for location… + Needs location Unique BTS Data BTS Measurements Imported OpenCellID Data diff --git a/README.md b/README.md index fce894aeb..63d18a930 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,15 @@ + Gitter

--- +

+

This Project will have a revival soon.
+We are working on a light version of AIMSICD.

+more information + +--- `AIMSICD` is an Android app to detect [IMSI-Catchers](https://en.wikipedia.org/wiki/IMSI-catcher). These devices are false mobile towers (base stations) acting between the target mobile phone(s) and the real towers of service providers. As such they are considered a Man-In-The-Middle (MITM) attack. This surveillance technology is also known as "[StingRay](https://en.wikipedia.org/wiki/Stingray_phone_tracker)", "Cellular Interception" and alike. Find out more in our [Wiki on GitHub](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki). diff --git a/build.gradle b/build.gradle index af6a929f8..8df77d119 100644 --- a/build.gradle +++ b/build.gradle @@ -4,12 +4,13 @@ import org.codehaus.groovy.runtime.IOGroovyMethods buildscript { repositories { jcenter() - maven { url "https://jitpack.io" } + maven { url "https://plugins.gradle.org/m2/" } } dependencies { - classpath 'com.android.tools.build:gradle:2.0.0' - classpath 'io.freefair:gradle-plugins:2.0.0-beta5' - classpath "io.realm:realm-gradle-plugin:0.88.3" + classpath 'com.android.tools.build:gradle:2.3.1' + classpath "io.freefair.gradle:android-gradle-plugins:2.3.1" + classpath "io.freefair.gradle:gradle-plugins:0.10.1" + classpath "io.realm:realm-gradle-plugin:3.1.1" } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c6137b87..867b09c3a 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3634ddf3f..01871a9ee 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Mar 18 22:01:32 CET 2016 +#Tue Apr 18 23:10:55 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip diff --git a/gradlew b/gradlew index 9d82f7891..4453ccea3 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,12 +6,30 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -150,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 72d362daf..e95643d6a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -49,7 +49,6 @@ goto fail @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line