seemoo-lab / airguard Goto Github PK
View Code? Open in Web Editor NEWProtect yourself from being tracked 🌍 by AirTags 🏷 and Find My accessories 📍
License: Apache License 2.0
Protect yourself from being tracked 🌍 by AirTags 🏷 and Find My accessories 📍
License: Apache License 2.0
After turning off "use location" in the AirGuard settings and reopening the app or making a manual scan, the setting gets automatically turned back on.
Here's a screen recording: https://cloud.hakimy.tk/s/x7Aondq6qXSJyDw
I've read your research paper (via this blogpost), which mentions that Airtags emit a status byte, which "might indicate battery life".
I was wondering if you could tell me more about this byte. Does it indeed represent battery life? If so, wouldn't that make it possible to circumvent the peridic mac address randomisation? E.g.
If it's battery life indicator, is it a 0-255 representation of a 100% range?
Or does this status byte also convey other status information?
Just tried this app and it isn't detecting my AirTag. It is paired with my iPhone and should be taking part in the find my network. I did some digging and saw that you are only listing for devices with the byte prefix (0x12, 0x19) but my AirTag is sending (0x07, 0x19) in the manufacture data. Here are some information about the manufacture data I could find https://adamcatley.com/AirTag#advertising-data.
It looks like my AirTag isn't paired correctly (I did try to do that multiple times) or there are some other differences as it is sending the payload for unregistered devices.
Any idea what it could be?
I very appreciate your app, thanks for the possibility to get notified about possible tracking devices.
What I don't understand is the 'last scan' section on the status screen, what does that mean? My 'last scan' is often some hours ago, in worst cases some days.
I did exclude the app from battery saving and use a phone without google services (microG installed, but only partly activated).
Allowing users to manually toggle the light/dark theme in the app's settings would be a good enhancement.
IIRC, the app will automatically pick the light/dark UI theme based on the system theme. However, this does not account for the case in which some users may want to pick the opposite light/dark theme in the app, compared to the system theme, since the light/dark theme isn't user accessible in the settings right now.
When viewing Tracker-lists there is no way to get back to dashboard using the UI (hardware back-key works tho).
Steps to reproduce:
AirGuard version: 1.2 (f-droid) on Android 12
Hallo,
was sind genau Find my Tracker außer Air Tags ?
Sind das Air Tags von Android Geräten zb Samsung etc . ?
What exactly are Find my Tracker other than Air Tags?
Are these Air Tags from Android devices, e.g. Samsung etc. ?
[Bug] The number of last scans does not match the overview
Can you add an option to change how frequently the app scans for devices in the background?
Hi I’ve version 1.0.4 installed and It found two air tags the other day but I never got a notification they were detected. Is there something I’m missing or do notifications trigger under certain situations?
I’m running it on a Pixel 2XL running CalyxOS (android 11).
Please let me know if any additional information would be helpful.
Hi there,
First of all, I think this is an absolutely incredible project in terms of personal safety. I do have one suggestion from a UX perspective:
I think that sorting should be added to the Dashboard / Devices page (e.g. sort by beacon count, first / last seen, serial number or assigned name).
This can make it easier to find particular FindMy devices.
Thank you
It would be cool if we could see a list (sorted by date) of beacons with their stored information.
I've restarted the app countless times trying to nail down the exact same steps one needs to take to reproduce this, and the procedure above I think is where this happens the most ... but also not every time. Once I was stuck right away by choosing "Ask everytime" at the same screen. Frequently, the introduction starts over at the first screen when choosing "Ask everytime" at the third one.
Either way, something's not quite right.
OS: LineageOS 18.1 for microG
Phone: OnePlus 3
App version: 1.1.1 (also happened with 1.1.0)
This app was able to find and alert me of one of the DIY AirTags I made with OpenHaystack when a regular iPhone couldn't. Really cool stuff!
That being said, I had to add the device to my ignored devices list. The mac address really helped to confirm it was really my DIY AirTag, but I thought it might be super helpful to be able to rename the AirTags you add to your ignore list, or just rename them in general. For example I don't necessarily need to add my friend's real AirTags to the ignore list, but if I was able to rename them and I got an alert, it would help me figure out if I should be worried or not.
Keep up the great work!
Hi,
I have a question regarding the low power scan option if you don't mind me asking.
Recently, the label text for the option was changed from If enabled bluetooth low power scan will be used to discover nearby AirTags!<b>WARNING</b>: This could cause that some devices won\'t be discovered!
to If enabled, Bluetooth Low Energy scanning will be used to discover nearby AirTags!<b>WARNING</b>: Without this option, some devices might not be discovered!
.
However, according to the code, Bluetooth Low Energy is used regardless of this option, and the low power scanning mode is used when this option is enabled.
So, it seems to me that the label should say If enabled, low power scanning mode will be used to discover nearby AirTags! <b>WARNING</b>: When this option is enabled, some devices might not be discovered!
. Can someone please confirm if this is correct? Also, please let me know if you want me to open a PR to make the change.
Hi there, This application is not available on google play and Releases has no content. Could you please provide the apk file to download and use?
I would like to suggest creating some method for the user to remove a device from the Ignored Devices list.
This is because I've personally accidentally put a detected device onto the Ignored Devices list by accident. Luckily, I was only testing the app out when this happened, so I could reset the app's storage and lost no important app data. However, this would not be a good choice for app users with an extensive and/or long device detection histories.
The text defined in
Having both AirTag and Tile Tracker detection in one app would be useful, likely reuse significant portions of the code base, and provide energy efficiency vs having another app price anti-tracking for Tiles and do its own BLE scans.
The current version from F-Droid is missing a copyright notice from OpenStreetMap. OsmDroid does not seem to display it by default, so a custom one needs to be added.
Here's one option which might work:
//Copyright overlay mCopyrightOverlay = new CopyrightOverlay(context); mMapView.getOverlays().add(this.mCopyrightOverlay);
https://stackoverflow.com/a/50968755/32043
The text "© OpenStreetMap contributors" is required by the license.
See https://openstreetmap.org/copyright
https://mobile.twitter.com/OSM_Pontarlier/status/1444744213330022403
I'm trying to inform users of my open source smart home project when an actually new Airtag appears, but it's quite hard to do, since stationary Airtags rotate the mac every 15 minutes.
What I'd be interested in (thinking of implementing it in my project) is a way to detect when Airtags change their mac addresses, so that I can ignore the Airtags that the user was already alerted to.
They seem to change their mac address at regular interval (15 minutes), so if the Airtag count isn't too high it should be possible to do this. And if there is a way to extract other more stable values (such as battery level) it would become even easier?
I'd be curious if you think this approach is useful and possible. Perhaps it could be a feature of Airguard too?
P.S. How does Apple do this? I suspect they can only inform you if a devices is travelling with you because they can check the location of the Airtag and the phone and see if they move together for a while? That would imply Apple's protection app would also have a harder time informing people about malicious trackers if they are stationary too? After all, it migh just be your upstairs neighbour's Airtag.
Some devices move with me but are known. Examples may include a tag owned by myself or a known trusted associate. I would rather label those devices instead of just ignoring them, so I can remember why they are ignored.
Great software by the way, thanks for all your hard work.
Neither in the app itself nor on the website I found any instructions regarding the bluetooth settings for the device.
I see two possibilities:
Which on is it?
Hello, the app finds devices with different mac addresses every 15 minutes on the map and in the manual scan, but in the same place. Possibly mac books. What devices could that be? If there are no trackers, can you exclude them from the search?
If the location usage is enabled and you open the settings twice, the location usage will be disabled the second time you open the settings. (Android 12)
Hello. I believe that you should add a tutorial on how to remove the battery from a airtag. This would be beneficial to those who do not understand how to do so.
If you cannot do that, try linking to a article that will explain how to deactivate the airtag.
Thanks,
SteadyStatus21
You should be able to whitelist devices, so that the app will not warn you every time you enter it. For example, I own a tile, and I keep it in my wallet, and even though I've muted it, the app shows that I am unsafe.
Thanks,
SteadyStatus21
It would be good to have an "About" section in the settings, with some general information such as:
Hello,
I have found if you are fast enough or you double or triple click a menu item, the entire app panics and crashes.
Attached is a screen recording from my Samsung Galaxy S20+ 5G running Android 12, OneUI 4.0.
Hope this helps :)
-SteadyStatus21
Opening the "Ignored" Tab and tapping the "Ignored" Button again will result in the Title of that tab changing from "Devices" to "IgnoredDevicesFragment".
OS: Android 11
Device: OnePlus 8 Pro
App Version: 1.3.4
Device Language: English
Wrong behaviour
Title of "Ignored" tab changing to "IgnoredDevicesFragment" (see Screenshot)
Expected behaviour
Title not changing, displaying "Devices"
Steps to reproduce
The AirTag that I bound before can play sound. After I rebind it, the sound will be invalid.
Hi,
I love this app, but it's icon is quite striking, and not in a good way. I understand the want to not be too much like Apple's icon, but I'd definitely appreciate a more visually standard one for my homescreen. Thank you for making this app!
Despite having the app excempted from battery optimization, the background scan is not working. Every time when opening it the "Last scan" field is from I have last opened the app.
I use LineageOS 18.1 (Android 11) and would be happy to provide any debugging information (adb logcat, whatnot) as needed
The latest version of AirGuard is showing the primary Material 3 color in the status bar- which is often light and has low contrast with the white foreground.
Make the status bar the same color as the background of the main app UI.
The latest version of AirGuard shows SVGs that don't align with Material 3 dynamic color.
After upgrading to 1.1.0 the history of found devices is lost, but also it does not find devices 1.0.6 (still) does find.
FP3 with LineageOS 18.1.
What else is helpful for you?
Klaus
I had an AirTag detected a few days ago which followed me in public transport (but it was just someone else).
I just wanted to check out which options are available for "Feedback" / "provide some insights" to see if I can tell the app that it was a false-positive. When I noticed there were only options for true findings I closed the menu but noticed that the button was gone.
Did I accidentally flag this AirTag as a real finding?
In case it's really that simple to make an UNRECOVERABLE report which even CONTRIBUTES TO A RESEARCH you should implement some sort of final "send report" button to let the user know they are making this decision now. At least that's what I did expect when opening this menu.
AirGuard version: 1.2 (f-droid)
I left home today at 10:15. I got notified of several trackers today, and when I look at the timestamps and the locations of the pings, there are pings at my home at 11:00, 11:05, 11:20 mixed in with pings at my actual location (not home) at 11:15, 11:32. I don't own any trackers, but I'm probably near some in town right now. I've been in the same spot for the last two hours.
Is this a bug with location services on Android? If my phone gave AirGuard locations in different places while I sat near the same air tag, I can easily imagine it generating false positives as if that tracker was following me. Is this a known issue on Pixel phones, or maybe just me? Is there any way for AirGuard to know when it's getting a "stale" location from the system, or is that not really a thing?
In settings, AirGuard has location permission "all the time" and "use precise location" is enabled. The global "Google Location Accuracy" (aka "Improve Location Accuracy") is also enabled, but I wonder if this can actually introduce errors? I just dug into the developer options to see if a mock location app is configured, and no, there isn't one.
The "Use Low Energy Scan" setting is described differently in German and English
EN: This option is required to detect all devices
DE: If this option is enabled, some devices may not be detected
"This may result in some devices not being recognized."
Translation by DeepL.com
F-Droid:
1.2
(I could not install versions 1.1.0 and 1.1.0 due to an unknown error)
Play Store:
Downloaded on 17.3.2022 17:15
So, I have this airtag on an item at home for which I frequently get false alarms for tracking, despite it not moving with me. It seems to me like it is using for location also points reported by android which have a very high uncertainty, mainly those only used via triangulation of cell towers. Since those have a very high uncertainty (often >500m), it does not really make sense to use this as a location, and instead rely more on a gps fix or thelike (<20m uncertainty? <50m? dunno). That way most if not all of my false positives could be avoided
Using version 1.3.4, it seems like ignored airtags are also used for risk evaluation. This makes that feature kinda useless, if you usually carry an airtag with you
Hi!
I recently got an AirTag warning on a 3 hour trip on a long distance train, I traveled almost 500km with.
For me that was great, as I had a real world example for the app working. Also, because I got no further warnings after the train ride, I am quite sure, that this was not a malicious tracking attack on me, but a fellow traveler sitting nearby probably had an active airtag for her or his own purposes.
As an alarm warning can be a little bit intimidating in the moment when I receive it, making the connection, that it was during a train journey together with strangers, took a few moments. Maybe a hint to this idea could be incorporated into the alarm message or the guidelines regarding "false alarms"?
Although we are after two years of pandemic only getting used to it, but I guess long distance travel on busses, trains and maybe planes would be a usual reason for triggering false alarms?
I'm using Android AirGuard 1.0.4 installed by F-Droid.
Thank you for an interesting app, already more beacons than I expected.
When I choose a beacon, it shows a map, but instead of showing the location at the time the beacon was identified, it shows my current location.
Hi,
Where can I get an Android 7.0 version, the releases all appear to be for 8.0?
TIA.
Currently, it seems the app only scan every 15 minutes or so?
I know Android limits the minimum PeriodicWork interval to be 15 minutes. But is it possible to add a button to manually trigger a scan?
Currently, the status bar shows no icons in light mode & the navigation bar is not colored which looks something like this:
The app is much better than what Apple provide for iOS.
Is it possible to create an iOS version or cross platform version of this app?
First of all, I just wanted to say thanks for developing this app and making it open source. It serves it's purpose well and looks great.
After using it for a while I've found a couple of issues with the dialog that appears when you deny or dismiss a permission prompt.
2021-12-23 22:45:09.624 1439-1439/de.seemoo.at_tracking_detection.debug E/WindowManager: android.view.WindowLeaked: Activity de.seemoo.at_tracking_detection.ui.OnboardingActivity has leaked window DecorView@e09f6c8[OnboardingActivity] that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:1107)
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:1082)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:469)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:133)
at android.app.Dialog.show(Dialog.java:506)
at de.seemoo.at_tracking_detection.ui.OnboardingActivity.handleRequiredPermission(OnboardingActivity.kt:223)
at de.seemoo.at_tracking_detection.ui.OnboardingActivity.onUserDisabledPermission(OnboardingActivity.kt:89)
at com.github.appintro.AppIntroBase.handleDeniedPermission(AppIntroBase.kt:673)
at com.github.appintro.AppIntroBase.onRequestPermissionsResult(AppIntroBase.kt:647)
at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8825)
at android.app.Activity.dispatchActivityResult(Activity.java:8655)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5841)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5887)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2425)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8582)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:563)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.