├── .gitattributes ├── .gitignore ├── App4 ├── About.cs ├── Alert.cs ├── App4.csproj.bak ├── Assets │ └── AboutAssets.txt ├── GettingStarted.Xamarin ├── MainActivity.cs ├── MildAlert.cs ├── OKAlert.cs ├── Properties │ ├── AndroidManifest.xml │ └── AssemblyInfo.cs ├── Resources │ ├── AboutResources.txt │ ├── drawable │ │ ├── SparkX.png │ │ ├── Twitter.png │ │ ├── sfechip.png │ │ ├── skimmercard.png │ │ ├── skimmerlogo.png │ │ ├── warninggreen.png │ │ ├── warningred.png │ │ └── warningyellow.png │ ├── layout │ │ ├── About.axml │ │ ├── Green.axml │ │ ├── Main.axml │ │ ├── Red.axml │ │ └── Yellow.axml │ └── values │ │ └── Strings.xml ├── SkimmerScanner.csproj └── SkimmerScanner.csproj.user ├── LICENSE.md ├── README.md └── SkimmerScammer.sln /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Xamarin build output 9 | bin/ 10 | obj/ 11 | 12 | # Regenerated by Xamarin (when packages are restored) 13 | *.designer.cs 14 | packages/ 15 | Tools/ 16 | 17 | # Specific to user session 18 | *.userprefs 19 | .vs/ 20 | 21 | # Recycle Bin used on file shares 22 | $RECYCLE.BIN/ 23 | 24 | # Windows Installer files 25 | *.cab 26 | *.msi 27 | *.msm 28 | *.msp 29 | 30 | # Windows shortcuts 31 | *.lnk 32 | 33 | # ========================= 34 | # Operating System Files 35 | # ========================= 36 | 37 | # OSX 38 | # ========================= 39 | 40 | .DS_Store 41 | .AppleDouble 42 | .LSOverride 43 | 44 | # Thumbnails 45 | ._* 46 | 47 | # Files that might appear in the root of a volume 48 | .DocumentRevisions-V100 49 | .fseventsd 50 | .Spotlight-V100 51 | .TemporaryItems 52 | .Trashes 53 | .VolumeIcon.icns 54 | 55 | # Directories potentially created on remote AFP share 56 | .AppleDB 57 | .AppleDesktop 58 | Network Trash Folder 59 | Temporary Items 60 | .apdisk 61 | -------------------------------------------------------------------------------- /App4/About.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Android.App; 7 | using Android.Content; 8 | using Android.OS; 9 | using Android.Runtime; 10 | using Android.Views; 11 | using Android.Widget; 12 | 13 | namespace SkimmerScanner 14 | { 15 | [Activity(Label = "About")] 16 | public class About : Activity 17 | { 18 | protected override void OnCreate(Bundle savedInstanceState) 19 | { 20 | base.OnCreate(savedInstanceState); 21 | 22 | SetContentView(Resource.Layout.About); 23 | 24 | var link = FindViewById(Resource.Id.textView3); 25 | link.Click += (sender, e) => 26 | { 27 | var uri = Android.Net.Uri.Parse("https://learn.sparkfun.com/tutorials/gas-pump-skimmers"); 28 | var intent = new Intent(Intent.ActionView, uri); 29 | StartActivity(intent); 30 | }; 31 | 32 | 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /App4/Alert.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Android.App; 7 | using Android.Content; 8 | using Android.OS; 9 | using Android.Runtime; 10 | using Android.Views; 11 | using Android.Widget; 12 | 13 | namespace SkimmerScanner 14 | { 15 | [Activity(Label = "Alert")] 16 | public class Alert : Activity 17 | { 18 | protected override void OnCreate(Bundle savedInstanceState) 19 | { 20 | base.OnCreate(savedInstanceState); 21 | 22 | SetContentView(Resource.Layout.Red); 23 | 24 | FindViewById(Resource.Id.imageView2).Click += delegate { 25 | var uri = Android.Net.Uri.Parse("https://twitter.com/intent/tweet?text=I%20just%20found%20a%20credit%20card%20skimmer%20using%20the%20%23SkimmerScanner%20app%20from%20%40sparkfun%21"); 26 | var intent = new Intent(Intent.ActionView, uri); 27 | StartActivity(intent); 28 | }; 29 | 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /App4/App4.csproj.bak: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 8.0.30703 7 | 2.0 8 | {4B19E3A9-B0DA-4B66-B515-6AD7B796CEA3} 9 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10 | Library 11 | Properties 12 | App4 13 | App4 14 | 512 15 | True 16 | Resources\Resource.Designer.cs 17 | Resource 18 | Off 19 | True 20 | v6.0 21 | Properties\AndroidManifest.xml 22 | Resources 23 | Assets 24 | 25 | 26 | True 27 | Full 28 | False 29 | bin\Debug\ 30 | DEBUG;TRACE 31 | prompt 32 | 4 33 | True 34 | None 35 | False 36 | 37 | 38 | True 39 | PdbOnly 40 | True 41 | bin\Release\ 42 | TRACE 43 | prompt 44 | 4 45 | true 46 | False 47 | SdkOnly 48 | True 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | Designer 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 89 | -------------------------------------------------------------------------------- /App4/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with you package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); -------------------------------------------------------------------------------- /App4/GettingStarted.Xamarin: -------------------------------------------------------------------------------- 1 | 2 | GS\Android\CS\AndroidApp\GettingStarted.html 3 | false 4 | -------------------------------------------------------------------------------- /App4/MainActivity.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Widget; 3 | using Android.OS; 4 | using Android.Bluetooth; 5 | using Android.Content; 6 | using System; 7 | using System.IO; 8 | 9 | namespace SkimmerScanner 10 | { 11 | [Activity(Label = "Skimmer Scanner", MainLauncher = true)] 12 | public class MainActivity : Activity 13 | { 14 | private BluetoothAdapter btAdapter; 15 | private Receiver receiver; 16 | 17 | protected override void OnCreate(Bundle savedInstanceState) 18 | { 19 | base.OnCreate(savedInstanceState); 20 | 21 | // Set our view from the "main" layout resource 22 | SetContentView(Resource.Layout.Main); 23 | 24 | BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.DefaultAdapter; 25 | if (mBluetoothAdapter == null) 26 | { 27 | // Device does not support Bluetooth 28 | } 29 | 30 | if (!mBluetoothAdapter.IsEnabled) 31 | { 32 | Intent enableBtIntent = new Intent(BluetoothAdapter.ActionRequestEnable); 33 | int REQUEST_ENABLE_BT = 0; 34 | StartActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 35 | } 36 | 37 | // Register for broadcasts when a device is discovered 38 | receiver = new Receiver(this); 39 | var filter = new IntentFilter(BluetoothDevice.ActionFound); 40 | RegisterReceiver(receiver, filter); 41 | 42 | // Register for broadcasts when discovery has finished 43 | filter = new IntentFilter(BluetoothAdapter.ActionDiscoveryFinished); 44 | RegisterReceiver(receiver, filter); 45 | 46 | // Register for broadcasts when a device tries to pair 47 | filter = new IntentFilter(BluetoothDevice.ActionPairingRequest); 48 | RegisterReceiver(receiver, filter); 49 | 50 | 51 | // Get the local Bluetooth adapter 52 | btAdapter = BluetoothAdapter.DefaultAdapter; 53 | 54 | var scanButton = FindViewById