-
Notifications
You must be signed in to change notification settings - Fork 949
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Maps Viewer #13
Comments
@xLaMbChOpSx, instead of showing the signal strength, I'd rather prefer a map of where attacks happened. Although the main function of AIMSICD (showing if network encryption is disabled) is not implemented yet, but maybe AIMSICD can also upload the plotted map data and compare it with other results to trace down fake cell towers? Just my two little cents. I don't need a map with signal strengths. |
First of all, don't spend too much time on the map function. We need the other AT stuff resolved first. (Also, I'd prefer to stay with Google maps, since that's what most people have, by stock/default, unless you have a better solution, with alternative maps, that are easy to implement.) I'm thinking that there are 3 essential things to consider here: So it's hard to see what's going on with this, without pictures... |
Yeah the maps stuff is already written I was just trying to get the database helper to play nicely with it but didn't want to waste my time if it was not something that was important at the moment. The tracking all works well and currently captures signal strength, cell information and location into individual tables which of course can be modified but the code is there to support SQLite database actions for whatever purposes are needed. |
@xLaMbChOpSx, I go with the suggestion of @E3V3A. Having an overview of these would be great. Maybe, in a later point of time, the map could automatically display identified real and fake cell towers.. |
No3 of @E3V3A is a very interesting point.
So if we get a high signal from a BTS which is far away, this can be a "flag yellow" or red (to tell it in the words of catcher catcher) But in reality i am not sure if it always works. The BTS is changing the signal power and so is the phone, too. There is a ETSI Spec. about how to regulate the sending power (for power saving). This could be a much stronger indicator. We could compare the measured distance to the geo-positions we get from the map. But this 2. option is hard to develop i guess. But i can do more research, if you think you can realize it somehow. |
@He3556 ...Which is why we eventually need the raw diagnostic radio stream, so that we can also measure Timing Advance (TA) among other things... |
The MapViewer class has been totally rewritten and is functioning correctly now including overlaying signal strength information, it has been upgraded to Google Maps API v2 whilst still maintaining compatibility with our minimum SDK level. I will push the commit shortly. |
@xLaMbChOpSx, version 0.1.6 crashes instantly when clicking "Show Map" - probably because I have to Google Maps installed? Just to let you know: I HATE Google. No, I really do! Why in the world let Google get more data about me than it really should have? I get your point that you had to change to Google Maps API v2 to enable new features and gain an API Key, but can't we use something more open and free like stuff from the NoGAPPS-Project? Would be EXTREMELY thankfuk for an implementation of that. I'm sure @mar-v-in is willing to help making the switch, too. |
@SecUpwN Uhm, good idea eventually..., but not right now, everyone "has" Gmaps and as little I like to share my data with Google, at least it works very good. WHy do you have 2 Gmaps installed!? That is not really the App problem I think. EDIT: Dammit, I keep on getting the auto-filled tag names wrong... |
@E3V3A, was this question meant for me? I am using AOKP for HTC One - Generic GSM and it naturally comes without GMaps. To be able to use things like my beloved Öffi (a public transport companion showing connections even with dealays) I utilize the App NetworkLocation for KitKat and Maps API 1 v0.5 Beta 3, both from the NoGAPPS-Project. I really see the potential of making AIMSICD become an awesome privacy-tool, yet we should try to at least not make it dependent on proprietary code by privacy-invading monsters like Google. Hence my question: Is a switch to a free and Open Source alternative like provided by @mar-v-in possible in the long run? Not sure if I ask for too much if the Maps stuff can be built into AIMSICD. What do YOU think of this, @xLaMbChOpSx? |
There is something else we need to think about, when we switch to another map service sometime. The A-GPS is communication with Google Server, too. The assisted part sends out the Base Stations (Cell-ID's) to supl.google.com to get back information about the satellites in the area. This is usually a feature of the provider network. I didn't know, that Google delivers this feature in Android phones. If disabled, it will take a few minutes to get the right GPS coordinates. It seems that this is a problem in some custom ROM's. I am wondering if this service is also blocked in China? I will look for more info's about all that, (alternative services) when the time is right. Just want to inform you about it. |
@He3556 We'll the other thing is, that soon people will not know the IPs of other DNS servers, than those of google, so the question is how far we should stretch our paranoia? Of course if google provides ping times of a few ms versus a few hundreds ms's for other servers, that will impact GPS lock-on times when moving around in uncommon areas. But is this something WE should worry about here? I don't think so, I think we should just have the option to disable/block (or change gps.conf) A-GPS and keep a pre-downloaded local map in device. (Assuming this is still possible.) |
yes, a option to disable the assisted part of the A-GPS it would be great. |
Maybe I'm totally wrong, but I thought there is an option in the System to disable A-GPS. Settings -> Locations Services -> Use wireless networks (.. use Google's location service to estimate your location faster ..) I created Issue #50 just today. It should be merged into this issue somehow I think. The Maps API recreation of NoGapps can now be found in the MicroG project. Generally I don't see the Map View as a high priority at the moment. For now it would be no problem if it would just not work on devices without Google Services. |
@mjowe See my response in other issue (#50). Yes, I now also think A-GPS is part of AOS. But there are some other funky and hidden behavior on Qualcomm modems, that kind of always keep the GPS on, even if never forwarded to AOS, user space. I found that out when investigating MSM modems in devices claimed not to have a GPS, and amazingly actually had a full GPS HW implementation installed and pushing GPS info into the big blue... And we simply do not know where this is going, without being able to monitor the radio interface. |
@SecUpwN @xLaMbChOpSx In addition (and eventually) it would be very useful if we could have a spider web view of the local towers. For example, something similar to that shown in these apps/pictures. Field Test-SignalSitemap, this is probably the most useful, as you would clearly see how your phone changes towers with location and time. and also some more Cell Info when touching cell tower on the map, perhaps something like in G-NetTrack: One of the most awesome features of that app is the inclusion of the cell tower sector info. |
👍 |
@E3V3A I think that is an awesome idea and looks pretty cool as well, I can create a custom Info Window layout for the cell markers and we can also select a custom icon to use for them as well so they look a bit better than the default marker and also provide extended details as suggested. The current release does include a number of extra details but in a very plain fashion using the default info window. I would need to look into the spider web view but it would definitely be a worthy feature, I will look at that once I have the OEM_HOOK_RAW incorporated and also finish the fragment for the advanced cell details featuring neighbouring cell data. |
@xLaMbChOpSx, I absolutely support the previous comment of @E3V3A. Rock it! ;-) |
@xLaMbChOpSx CC: @SecUpwN @He3556 The advantage of Google API is that it gives a very precise geo location of the cell towers, given normal LAC/CID/MCC/MNC data. This data is probably (?) way more reliable than that provided by OpenCellID, whose measurements are mostly based on passer-by's, and occasional users uploads. For example in my city there were essentially no cell towers recorded until I started to use OpenCellID mapping, whereas Google would know all of them. The shit part of using Google is that they require an API key, which requires you to sign up for a verified gmail account and a connected and verified credit card, even if it is never used. The "test" service is free for:
On the other hand, you can Google for API keys, and eventually you will find some you can "borrow" from either other Android Apps or other online services. We can use some of these to test with so we don't have to sing up for anything, until we can get our own... But there are still other options. You can read all about this HERE and HERE You can then just provide a JSON file with the appropriate data to get a fairly good result.
Then run the query with:
...and so on. Using Mozilla! |
@E3V3A, great proposal! My 2 cents: Although I really love my Android device, I have the mindset that Google IS EVIL. And before we get into a deeper discussion on this, let me make my point: I would LOVE to stay away from everything Google as much as possible. PLEASE USE THE FREE MOZILLA APIs! Yeah, Google might make great tools, they provide better APIs - but you see what price we'd have to pay. Signing up to Gmail, creating a "verified account" (which of course only gets verified with a valid phone number, and THEN linking a credit card to it? Gosh, even a fool can see the pattern here! Or, maybe not.. otherwise people would use their BRAIN and throw away their Gmail Accounts, then start using secure alternatives while at the same time switching to better and non-tracking search engines like DuckDuckGo. Other than that, I'd also like to stay away from "borrowing" keys - if we can avoid legal trouble, I'm by all means voting to do so from the very beginning. Trust me, enough people watch our project - and maybe not everyone thinks that positive about it. So please, let's use real Open Source @xLaMbChOpSx. 👍 |
@SecUpwN Yes, I see your point. But we have to find a way to get reliable and highly accurate cell tower locations. This cannot be done without access to relevant debug GSM variables and/or excessive programming of new data collection and triangulation algorithms. So how do you propose to collect and obtain this info? |
@E3V3A, I really don't know. What keeps us from using the Moziall APIs? I can't imagine that Google really is our only option for obtaining these accurate cell tower locations! Maybe we should ask the N$A? I'm sure they have the most accurate info and are glad to help us. 👅 Joke aside - I'll keep researching for a better method for obtaining accurate cell tower info. In the mean time, just keep this Issue open. |
I've discovered some strange things while looking into this issue:
|
Yeah, I don't think it was ever implemented like that, I simply don't know. I think the past implementation was just showing all the cells from OPENCELLID_TABLE. For reference, here's a picture of our current DB tables: Another possibility is that the currently connected BTS data is kept in memory (because of frequent updates). This would make sense, since searching and comparing that with what's in the DB would probably be easier that way. But I doubt it was implemented in that way. Only @xLaMbChOpSx could answer that. So @tobykurien you propose a new/different color for Neighboring Cells? Yes, sounds good to me. |
Hi guys Just wanted to introduce myself as a newbie and I'm excited of the work you guys are doing. Came across AIMSICD while searching through the web for protection against fake cell towers as I seem to have mysterious events on my phone when online or talking with a friend. I have downloaded the app onto my phone a Samsung Galaxy S5 which as I've notice while reading about your supported devices S5 is not amongst the listed devices. Downloaded AIMSICD yesterday followed the instruction on how to install the app onto my phone and I now have a sweet app that gives me accurate location of cell towers around me. So far so good, as of this moment nothing seemed off and everything seems smooth except for the map which seems to take few minutes to load up, but once loaded I seem to get accurate location on towers. I also want to mention that I went to your website looking for a way to contribute to the discusion but it took me to XDA discussion thread that is closed, so I had no choice but to join Github just to post this comment, haha.. anyway keep up the good work guys and please, please DO NOT GIVE UP on this project as this is a very good project that will become very useful in the near future, I should also add that while doing my resarch yesterday on fake cell towers there was a Cesna plane flying above my area for close to six hours, now I'm not sure if this is coincidence but just makes one wonder. Will be checking to see if I get any response from you guys as I notice the last time someone posted here was in October of this year. |
@NghtWachman, welcome to our project! How cool you joined GitHub just to post this, rest assured you won't regret it. One more person who will (hopefully) contribute pull requests! 😸 As for the the discussion thingy: I will change that ASAP since you are the second guy pointing this out. Our discussion thread is currently closed due to the fact that peeps join in and tend to ask all sorts of irrelevant questions although that thread was primarily meant for highly technical talk. We might reopen it one day. As for now, we are happy to see you joining our brave movement and hope you will spread the word. And hey, we have not "vanished", we are merely working off our asses in so many different places since we lack developers and it seems people rather like to just star us, instead of contributing code. You can change that. Feel warmly welcomed on behalf of our whole team, looking forward to your contributions! |
A very friend and encouraging email from the author of the Antennas app:
So now you may wonder why this is important, since he's using Google maps, and we're using OSM. Well mostly because of the way he presents the various BTS as clearly labelled dots. (See image above.)
Of course we'd have to tune this to our own purposes... But perhaps gives us good ideas on how to best present BTS info, and what to present, and so on... |
Any ideas how to change the pins in OSM? |
What exactly has to be changed? I'm in brainstorming mode right now! :) |
The pins are set up in the Map Viewer, e.g. here is where the blue "currently connected" pin is set up: https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/blob/master/app/src/main/java/com/SecUpwN/AIMSICD/activities/MapViewerOsmDroid.java#L404 |
@tobykurien Yes, I know it has something to do with the "overlay" item, but I simply don't understand where the colors and "icons" are defined. There's no comments there, so how do I know it's blue or red or whatever. And how can we change those silly "drop" shaped pins into a circles? Also, what and why has that code following that line, been commented out? It doesn't work or something else? |
The icons are in the various drawable folders, named: ic_map_pin_XXXX (where XXXX is the colour). |
Great, ok so they are here in the following sub-directories:
What is a good tool to use to change all these with out having to do it individually for each DPI? |
Don't know yet. Wait. Found: Android Asset Studio. You should work on your google-foo, @E3V3A. ^^ Otherwise I'm a huge fan of GIMP, with which I crafted all the other Icons for our project so far. |
So here's the code from Antennas that fixes the pins, these are not images as I thought but something else.. Here's the relevant code of SitesOverlay.java: package com.technolatry.antennas;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
// Referenced classes of package com.technolatry.antennas:
// SitesOverlayItem, Geo
public class SitesOverlay extends ItemizedOverlay
{
private GeoPoint center;
private List items;
private Drawable marker;
public SitesOverlay(Drawable drawable)
{
super(drawable);
items = new ArrayList();
marker = null;
center = null;
marker = drawable;
}
...
public void draw(Canvas canvas, MapView mapview, boolean flag)
{
ArrayList arraylist;
Iterator iterator;
String s;
GeoPoint geopoint;
Projection projection;
Point point;
Paint paint;
double d;
Iterator iterator1;
boolean flag1;
String s1;
String s2;
Projection projection1;
Point point2;
Paint paint1;
int i;
boolean flag2;
try
{
arraylist = new ArrayList(items);
Collections.sort(arraylist);
}
catch (Exception exception)
{
return;
}
if (flag || arraylist == null) goto _L2; else goto _L1
_L1:
if (arraylist.size() <= 0) goto _L2; else goto _L3
_L3:
iterator = arraylist.iterator();
_L8:
if (iterator.hasNext()) goto _L5; else goto _L4
_L4:
iterator1 = arraylist.iterator();
_L13:
flag1 = iterator1.hasNext();
if (flag1) goto _L6; else goto _L2
_L2:
return;
_L5:
OverlayItem overlayitem = (OverlayItem)iterator.next();
s = overlayitem.getSnippet();
geopoint = overlayitem.getPoint();
projection = mapview.getProjection();
point = new Point();
projection.toPixels(geopoint, point);
paint = getCPaint(s);
if (center == null || s.equals("C")) goto _L8; else goto _L7
_L7:
d = Geo.distance(geopoint, center);
if (d > 10D && d < 40000D)
{
try
{
Point point1 = new Point();
projection.toPixels(center, point1);
canvas.drawLine(point1.x, point1.y, point.x, point.y, paint);
}
catch (Exception exception1) { }
}
goto _L8
_L6:
OverlayItem overlayitem1 = (OverlayItem)iterator1.next();
s1 = overlayitem1.getTitle();
s2 = overlayitem1.getSnippet();
GeoPoint geopoint1 = overlayitem1.getPoint();
projection1 = mapview.getProjection();
point2 = new Point();
projection1.toPixels(geopoint1, point2);
paint1 = new Paint();
paint1.setARGB(255, 10, 10, 10);
paint1.setAntiAlias(true);
paint1.setFakeBoldText(true);
if (!s2.equals("M")) goto _L10; else goto _L9
_L9:
if (!s1.equalsIgnoreCase("G")) goto _L12; else goto _L11
_L11:
i = (new Float(projection1.metersToEquatorPixels(200F))).intValue();
_L14:
paint1.setARGB(255, 10, 10, 255);
_L15:
Paint paint2 = getBPaint(s2);
Paint paint3 = getCPaint(s2);
RectF rectf = new RectF(point2.x - i, point2.y - i, i + point2.x, i + point2.y);
canvas.drawOval(rectf, paint3);
rectf.inset(1.0F, 1.0F);
canvas.drawOval(rectf, paint2);
if (s2.equals("M"))
{
paint3.setAlpha(255);
RectF rectf1 = new RectF(point2.x - 13, point2.y - 13, 13 + point2.x, 13 + point2.y);
canvas.drawOval(rectf1, paint3);
RectF rectf2 = new RectF(point2.x, point2.y, point2.x, point2.y);
canvas.drawOval(rectf2, paint3);
}
float f = paint3.measureText(s1);
float f1 = paint3.getTextSize();
canvas.drawText(s1, (float)point2.x - f / 2.0F, (float)(point2.y - 1) + f1 / 2.0F, paint1);
goto _L13
_L12:
i = (new Float(projection1.metersToEquatorPixels(2000F))).intValue();
goto _L14
_L10:
if (!s2.equals("N"))
{
break MISSING_BLOCK_LABEL_687;
}
i = 14;
goto _L15
if (!s2.equals("A"))
{
break MISSING_BLOCK_LABEL_704;
}
i = 11;
goto _L15
flag2 = s2.equals("C");
if (flag2)
{
i = 5;
} else
{
i = 11;
}
goto _L15
Exception exception2;
exception2;
goto _L13
}
public Paint getBPaint(String s)
{
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFakeBoldText(true);
if (s.equals("M"))
{
paint.setARGB(80, 180, 180, 240);
return paint;
}
if (s.equals("N"))
{
paint.setARGB(128, 60, 60, 80);
return paint;
}
if (s.equals("A"))
{
paint.setARGB(224, 200, 80, 80);
return paint;
}
if (s.equals("H") || s.equals("C"))
{
paint.setARGB(224, 255, 196, 40);
return paint;
} else
{
paint.setARGB(255, 0, 0, 0);
return paint;
}
}
public Paint getCPaint(String s)
{
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFakeBoldText(true);
paint.setStyle(android.graphics.Paint.Style.STROKE);
paint.setStrokeWidth(1.0F);
if (s.equals("M"))
{
paint.setARGB(128, 10, 10, 255);
paint.setStrokeWidth(1.0F);
return paint;
}
if (s.equals("N"))
{
paint.setARGB(128, 10, 10, 10);
paint.setStrokeWidth(3F);
return paint;
}
if (s.equals("A"))
{
paint.setARGB(224, 200, 10, 10);
paint.setStrokeWidth(3F);
return paint;
}
if (s.equals("H") || s.equals("C"))
{
paint.setARGB(224, 128, 98, 20);
if (s.equals("H"))
{
paint.setStrokeWidth(3F);
return paint;
} else
{
paint.setStrokeWidth(2.0F);
return paint;
}
} else
{
paint.setARGB(255, 0, 0, 0);
return paint;
}
}
... and from SitesOverlayItems.java: package com.technolatry.antennas;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.OverlayItem;
public class SitesOverlayItem extends OverlayItem
implements Comparable
{
private String description;
public SitesOverlayItem(GeoPoint geopoint, String s, String s1)
{
super(geopoint, s, s1);
}
public SitesOverlayItem(GeoPoint geopoint, String s, String s1, String s2)
{
this(geopoint, s, s1);
description = s2;
}
private Integer parse(OverlayItem overlayitem)
{
if (overlayitem.getSnippet().equals("A")) { return Integer.valueOf(900); }
if (overlayitem.getSnippet().equals("C")) { return Integer.valueOf(-30); }
if (overlayitem.getSnippet().equals("M")) { return Integer.valueOf(-20); }
if (overlayitem.getSnippet().equals("N")) { return Integer.valueOf(-10); }
if (overlayitem.getTitle().equals("?")) { return Integer.valueOf(0); }
else { return Integer.valueOf(Integer.parseInt(overlayitem.getTitle())); }
}
public int compareTo(OverlayItem overlayitem)
{
int i;
try
{
i = parse(this).compareTo(parse(overlayitem));
}
catch (Exception exception)
{
return 0;
}
return i;
}
public volatile int compareTo(Object obj)
{
return compareTo((OverlayItem)obj);
}
public String getDescrtiption()
{
return description;
}
} I'm not sure this can be applied to the OSM in the same way... |
@E3V3A, what is the current state of this Issue? Is the Map Viewer perfect now? |
I am confused as to how to interpret the antenna map viewer data. So the green circles are known, real cells, the blue ones are... i don't know? And the green arrow that appears and sometimes moves? What does that indicate? |
Hello darkerego |
Thanks for the reply. I just updated from an older version to the newest and whenever I at home I get the yellow icon warning. What do the blue ring circles that appear on the map represent? |
@He3556, I am strongly voting for adding a legend for the circles to the map. New Issue for this? |
@SecUpwN I second that! That would be a great feature. I've gotten some of my friends to use AIMSICD and they are intrigued, and a map legend would be very helpful for new users to interpret the data they are seeing. One other question, is there documentation somewhere explaining what exactly the AT Command Processor can be used for? Forgive me if I overlooked it, but the wiki pages I could find provided limited information. Btw, I love this project and would like to thank all of the developers for their efforts. |
Why do I get multiple cells in one location and they move and they have different cid they are not anywhere near a real cell site and their lat and lon coordinates are all just a few numbers off and what are the red lines on map than span out away from each major city into nowhere |
Please help asap on my question I think we are being watched for a long time there are lots of different signs and issues that come up often thanks |
@bmcycles, sorry to hear you're having Issues. Please file a fresh Issue with this and add screenshots. |
The View Map feature originally from RawPhone was used to display a map with signal strength overlays showing tracked data about signal strength information captured through the app.
I have rewritten a portion of this but wanted to ask if this is what we want to display on the map or show something else as signal strength is not really a main objective of the project.
Any thoughts or suggestions would be great so I don't waste time on writing something we don't really want. :)
The text was updated successfully, but these errors were encountered: