├── .gitignore ├── README.md ├── Screenshots ├── rudhraGraph.png ├── rudhraMenu.png ├── rudhraRoot.png ├── rudhraVuln.png └── rudhraWelcome.png ├── app ├── .gitignore ├── RUDHRA_V1.1.apk ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── gracetex │ │ └── revo │ │ └── rudhra │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── fonts │ │ │ ├── MagmaWave_Caps.otf │ │ │ ├── More.otf │ │ │ ├── OdinBold.otf │ │ │ ├── OstrichSans-Black.otf │ │ │ ├── OstrichSans-Bold.otf │ │ │ ├── SR.otf │ │ │ ├── SourceSansPro-Black.otf │ │ │ ├── bod.otf │ │ │ └── trench100free.otf │ ├── ic_launcher-web.png │ ├── java │ │ └── com │ │ │ └── gracetex │ │ │ └── revo │ │ │ └── rudhra │ │ │ ├── AboutUs.java │ │ │ ├── AppCompatPreferenceActivity.java │ │ │ ├── GraphView.java │ │ │ ├── MainActivity.java │ │ │ ├── PermissionScanner.java │ │ │ ├── RootDetector.java │ │ │ ├── RootTools.java │ │ │ ├── SettingsScanner.java │ │ │ ├── Unroot.java │ │ │ ├── Welcome.java │ │ │ └── dummy │ │ │ └── DummyContent.java │ └── res │ │ ├── drawable-hdpi │ │ ├── ic_action_home.png │ │ ├── ic_action_name.png │ │ ├── ic_action_permissions.png │ │ ├── ic_action_root.png │ │ ├── ic_action_settings.png │ │ ├── ic_chart.png │ │ ├── ic_info_black_24dp.png │ │ ├── ic_notifications_black_24dp.png │ │ └── ic_sync_black_24dp.png │ │ ├── drawable-mdpi │ │ ├── ic_action_home.png │ │ ├── ic_action_name.png │ │ ├── ic_action_permissions.png │ │ ├── ic_action_root.png │ │ ├── ic_action_settings.png │ │ ├── ic_chart.png │ │ ├── ic_info_black_24dp.png │ │ ├── ic_notifications_black_24dp.png │ │ └── ic_sync_black_24dp.png │ │ ├── drawable-v21 │ │ ├── ic_green_tick.png │ │ ├── ic_info_black_24dp.xml │ │ ├── ic_launcher_new.png │ │ ├── ic_menu_camera.xml │ │ ├── ic_menu_gallery.xml │ │ ├── ic_menu_manage.xml │ │ ├── ic_menu_send.xml │ │ ├── ic_menu_share.xml │ │ ├── ic_menu_slideshow.xml │ │ ├── ic_notifications_black_24dp.xml │ │ └── ic_sync_black_24dp.xml │ │ ├── drawable-xhdpi │ │ ├── ic_action_home.png │ │ ├── ic_action_name.png │ │ ├── ic_action_permissions.png │ │ ├── ic_action_root.png │ │ ├── ic_action_settings.png │ │ ├── ic_chart.png │ │ ├── ic_info_black_24dp.png │ │ ├── ic_notifications_black_24dp.png │ │ └── ic_sync_black_24dp.png │ │ ├── drawable-xxhdpi │ │ ├── ic_action_home.png │ │ ├── ic_action_name.png │ │ ├── ic_action_permissions.png │ │ ├── ic_action_root.png │ │ ├── ic_action_settings.png │ │ ├── ic_chart.png │ │ ├── ic_cpu.png │ │ ├── ic_donut_small_white_48dp.png │ │ ├── ic_info_black_24dp.png │ │ ├── ic_notifications_black_24dp.png │ │ ├── ic_ram.png │ │ └── ic_sync_black_24dp.png │ │ ├── drawable-xxxhdpi │ │ ├── ic_chart.png │ │ ├── ic_info_black_24dp.png │ │ ├── ic_notifications_black_24dp.png │ │ └── ic_sync_black_24dp.png │ │ ├── drawable │ │ └── side_nav_bar.xml │ │ ├── ic_launcher_new.png │ │ ├── layout │ │ ├── activity_about_us.xml │ │ ├── activity_main.xml │ │ ├── activity_permission_scanner.xml │ │ ├── activity_root_detector.xml │ │ ├── activity_root_tools.xml │ │ ├── activity_settings_scanner.xml │ │ ├── activity_unroot.xml │ │ ├── activity_welcome.xml │ │ ├── app_bar_main.xml │ │ ├── app_perm_description.xml │ │ ├── content_main2.xml │ │ ├── content_permission_scanner.xml │ │ ├── content_root_tools.xml │ │ ├── graph_layout.xml │ │ ├── nav_header_main.xml │ │ ├── permission_description_layout.xml │ │ └── permission_layout.xml │ │ ├── menu │ │ ├── activity_main_drawer.xml │ │ ├── main.xml │ │ └── menu_about_us.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── drawables.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── pref_data_sync.xml │ │ ├── pref_general.xml │ │ ├── pref_headers.xml │ │ └── pref_notification.xml │ └── test │ └── java │ └── gracetex │ └── revo │ └── rudhra │ └── ExampleUnitTest.java ├── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | *.iml 3 | .gradle 4 | /bin/ 5 | /app/src/main/libs/ 6 | /app/src/main/obj/ 7 | /local.properties 8 | /.idea/workspace.xml 9 | /.idea/libraries 10 | .DS_Store 11 | /build 12 | /captures -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rudhra 2 | 3 | 4 | Android has grown out to be the biggest mobile platform in the world. All the advancements have tailed the rise of malwares affecting the devices running on Android. Every year the number is increasing at an alarming rate. There is an immediate need to tackle this situation. Rudhra is one such ongoing open source project aimed at protecting Android devices in the hands of laymen. The application tells the user about the vulnerable configurations in his device (like, settings) and explains to him why it could prove to be dangerous, gives inforamtion about the overall health of the device, checks for root access etc. 5 | 6 | As of now, Rudhra can: 7 | 8 | * Read CPU and RAM usage and represent it on a graph. 9 | * Check for the existance of root access in a device. 10 | * Check if there is a system hook. 11 | * Check for vulnerable settings. 12 | 13 | ## Screenshots 14 | 15 | ![alt text](Screenshots/rudhraWelcome.png) 16 | ![alt text](Screenshots/rudhraMenu.png) 17 | ![alt text](Screenshots/rudhraGraph.png) 18 | ![alt text](Screenshots/rudhraVuln.png) 19 | ![alt text](Screenshots/rudhraRoot.png) 20 | 21 | -------------------------------------------------------------------------------- /Screenshots/rudhraGraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/Screenshots/rudhraGraph.png -------------------------------------------------------------------------------- /Screenshots/rudhraMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/Screenshots/rudhraMenu.png -------------------------------------------------------------------------------- /Screenshots/rudhraRoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/Screenshots/rudhraRoot.png -------------------------------------------------------------------------------- /Screenshots/rudhraVuln.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/Screenshots/rudhraVuln.png -------------------------------------------------------------------------------- /Screenshots/rudhraWelcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/Screenshots/rudhraWelcome.png -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/RUDHRA_V1.1.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/RUDHRA_V1.1.apk -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "25.0.0" 6 | defaultConfig { 7 | applicationId "gracetex.revo.rudhra" 8 | minSdkVersion 18 9 | targetSdkVersion 23 10 | versionCode 10 11 | versionName "1.5" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 25 | exclude group: 'com.android.support', module: 'support-annotations' 26 | }) 27 | compile 'com.github.PhilJay:MPAndroidChart:v3.0.2' 28 | compile 'com.android.support:appcompat-v7:23.4.0' 29 | compile 'com.android.support:design:23.4.0' 30 | compile 'com.google.android.gms:play-services-appindexing:9.8.0' 31 | compile 'com.android.support:support-v4:23.4.0' 32 | compile 'com.android.support:recyclerview-v7:23.4.0' 33 | compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' 34 | testCompile 'junit:junit:4.12' 35 | } 36 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\Users\midhul\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/gracetex/revo/rudhra/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package gracetex.revo.rudhra; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("gracetex.revo.rudhra", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 14 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 28 | 31 | 34 | 37 | 41 | 44 | 45 | 46 | 51 | 54 | 55 | 56 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /app/src/main/assets/fonts/MagmaWave_Caps.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/MagmaWave_Caps.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/More.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/More.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/OdinBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/OdinBold.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/OstrichSans-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/OstrichSans-Black.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/OstrichSans-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/OstrichSans-Bold.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/SR.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/SR.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/SourceSansPro-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/SourceSansPro-Black.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/bod.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/bod.otf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/trench100free.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/assets/fonts/trench100free.otf -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/AboutUs.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.graphics.Typeface; 6 | import android.net.Uri; 7 | import android.os.Bundle; 8 | import android.view.View; 9 | import android.widget.Button; 10 | import android.widget.TextView; 11 | 12 | /** 13 | * Created by r3v0 on 22/11/16. 14 | */ 15 | 16 | public class AboutUs extends Activity { 17 | @Override 18 | protected void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_about_us); 21 | 22 | final TextView us = (TextView) findViewById(R.id.tvus); 23 | final TextView ek = (TextView) findViewById(R.id.tvekathva); 24 | Typeface custom_font3 = Typeface.createFromAsset(getAssets(), "fonts/OdinBold.otf"); 25 | Typeface custom_font6 = Typeface.createFromAsset(getAssets(), "fonts/MagmaWave_Caps.otf"); 26 | us.setTypeface(custom_font3); 27 | ek.setTypeface(custom_font3); 28 | 29 | Button git = (Button)(findViewById(R.id.prjctbtn)); 30 | git.setOnClickListener(new View.OnClickListener() { 31 | @Override 32 | public void onClick(View v) { 33 | String url = "https://github.com/abhi-r3v0/Rudhra"; 34 | Intent i = new Intent(Intent.ACTION_VIEW); 35 | i.setData(Uri.parse(url)); 36 | startActivity(i); 37 | } 38 | }); 39 | 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/AppCompatPreferenceActivity.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.content.res.Configuration; 4 | import android.os.Bundle; 5 | import android.preference.PreferenceActivity; 6 | import android.support.annotation.LayoutRes; 7 | import android.support.annotation.Nullable; 8 | import android.support.v7.app.ActionBar; 9 | import android.support.v7.app.AppCompatDelegate; 10 | import android.support.v7.widget.Toolbar; 11 | import android.view.MenuInflater; 12 | import android.view.View; 13 | import android.view.ViewGroup; 14 | 15 | /** 16 | * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls 17 | * to be used with AppCompat. 18 | */ 19 | public abstract class AppCompatPreferenceActivity extends PreferenceActivity { 20 | 21 | private AppCompatDelegate mDelegate; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | getDelegate().installViewFactory(); 26 | getDelegate().onCreate(savedInstanceState); 27 | super.onCreate(savedInstanceState); 28 | } 29 | 30 | @Override 31 | protected void onPostCreate(Bundle savedInstanceState) { 32 | super.onPostCreate(savedInstanceState); 33 | getDelegate().onPostCreate(savedInstanceState); 34 | } 35 | 36 | public ActionBar getSupportActionBar() { 37 | return getDelegate().getSupportActionBar(); 38 | } 39 | 40 | public void setSupportActionBar(@Nullable Toolbar toolbar) { 41 | getDelegate().setSupportActionBar(toolbar); 42 | } 43 | 44 | @Override 45 | public MenuInflater getMenuInflater() { 46 | return getDelegate().getMenuInflater(); 47 | } 48 | 49 | @Override 50 | public void setContentView(@LayoutRes int layoutResID) { 51 | getDelegate().setContentView(layoutResID); 52 | } 53 | 54 | @Override 55 | public void setContentView(View view) { 56 | getDelegate().setContentView(view); 57 | } 58 | 59 | @Override 60 | public void setContentView(View view, ViewGroup.LayoutParams params) { 61 | getDelegate().setContentView(view, params); 62 | } 63 | 64 | @Override 65 | public void addContentView(View view, ViewGroup.LayoutParams params) { 66 | getDelegate().addContentView(view, params); 67 | } 68 | 69 | @Override 70 | protected void onPostResume() { 71 | super.onPostResume(); 72 | getDelegate().onPostResume(); 73 | } 74 | 75 | @Override 76 | protected void onTitleChanged(CharSequence title, int color) { 77 | super.onTitleChanged(title, color); 78 | getDelegate().setTitle(title); 79 | } 80 | 81 | @Override 82 | public void onConfigurationChanged(Configuration newConfig) { 83 | super.onConfigurationChanged(newConfig); 84 | getDelegate().onConfigurationChanged(newConfig); 85 | } 86 | 87 | @Override 88 | protected void onStop() { 89 | super.onStop(); 90 | getDelegate().onStop(); 91 | } 92 | 93 | @Override 94 | protected void onDestroy() { 95 | super.onDestroy(); 96 | getDelegate().onDestroy(); 97 | } 98 | 99 | public void invalidateOptionsMenu() { 100 | getDelegate().invalidateOptionsMenu(); 101 | } 102 | 103 | private AppCompatDelegate getDelegate() { 104 | if (mDelegate == null) { 105 | mDelegate = AppCompatDelegate.create(this, null); 106 | } 107 | return mDelegate; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/GraphView.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.app.ActivityManager; 4 | import android.graphics.Color; 5 | import android.graphics.Typeface; 6 | import android.os.Bundle; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.widget.TextView; 9 | 10 | import com.github.mikephil.charting.charts.LineChart; 11 | import com.github.mikephil.charting.components.XAxis; 12 | import com.github.mikephil.charting.components.YAxis; 13 | import com.github.mikephil.charting.data.Entry; 14 | import com.github.mikephil.charting.data.LineData; 15 | import com.github.mikephil.charting.data.LineDataSet; 16 | import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; 17 | import com.github.mikephil.charting.utils.ColorTemplate; 18 | 19 | /** 20 | * Created by PSNAppZ on 7/23/17. 21 | */ 22 | 23 | public class GraphView extends AppCompatActivity{ 24 | private LineChart mChart; 25 | private LineChart rChart; 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.graph_layout); 31 | 32 | Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/OdinBold.otf"); 33 | final TextView cpuLoad = (TextView) findViewById(R.id.textView); 34 | final TextView ramUsage = (TextView) findViewById(R.id.textView2); 35 | cpuLoad.setTypeface(custom_font); 36 | cpuLoad.setTextColor(Color.WHITE); 37 | ramUsage.setTypeface(custom_font); 38 | ramUsage.setTextColor(Color.WHITE); 39 | 40 | //REAL TIME CHART SETTINGS 41 | mChart = (LineChart) findViewById(R.id.cpu_chart); 42 | rChart = (LineChart) findViewById(R.id.ram_chart); 43 | 44 | LineData data = new LineData(); 45 | data.setValueTextColor(Color.WHITE); 46 | 47 | LineData data2 = new LineData(); 48 | data2.setValueTextColor(Color.WHITE); 49 | 50 | // add empty data 51 | mChart.setData(data); 52 | mChart.getLegend().setEnabled(false); 53 | mChart.getDescription().setText("CPU Load"); 54 | mChart.getDescription().setTextColor(Color.WHITE); 55 | mChart.animateXY(1000, 1000); // animate horizontal and vertical 3000 milliseconds 56 | 57 | // add empty data 58 | rChart.setData(data2); 59 | rChart.getLegend().setEnabled(false); 60 | rChart.getDescription().setText("RAM Usage Graph"); 61 | rChart.getDescription().setTextColor(Color.WHITE); 62 | rChart.animateXY(1000, 1000); // animate horizontal and vertical 3000 milliseconds 63 | 64 | XAxis xl1 = rChart.getXAxis(); 65 | xl1.setTextColor(Color.WHITE); 66 | xl1.setDrawGridLines(false); 67 | xl1.setAvoidFirstLastClipping(true); 68 | xl1.setEnabled(false); 69 | 70 | YAxis leftAxis1 = rChart.getAxisLeft(); 71 | leftAxis1.setTextColor(Color.WHITE); 72 | leftAxis1.setAxisMaximum(currentMem()[0]); 73 | leftAxis1.setAxisMinimum(0f); 74 | leftAxis1.setDrawGridLines(true); 75 | 76 | YAxis rightAxis1 = rChart.getAxisRight(); 77 | rightAxis1.setEnabled(false); 78 | 79 | XAxis xl = mChart.getXAxis(); 80 | xl.setTextColor(Color.WHITE); 81 | xl.setDrawGridLines(false); 82 | xl.setAvoidFirstLastClipping(true); 83 | xl.setEnabled(false); 84 | 85 | YAxis leftAxis = mChart.getAxisLeft(); 86 | leftAxis.setTextColor(Color.WHITE); 87 | leftAxis.setAxisMaximum(100f); 88 | leftAxis.setAxisMinimum(0f); 89 | leftAxis.setDrawGridLines(true); 90 | 91 | YAxis rightAxis = mChart.getAxisRight(); 92 | rightAxis.setEnabled(false); 93 | 94 | 95 | final android.os.Handler handler = new android.os.Handler(); 96 | 97 | final Runnable r = new Runnable() 98 | { 99 | public void run() 100 | { 101 | LineData data = mChart.getData(); 102 | LineData data1 = rChart.getData(); 103 | handler.postDelayed(this,800); 104 | 105 | 106 | if (data != null) { 107 | 108 | ILineDataSet set = data.getDataSetByIndex(0); 109 | 110 | // set.addEntry(...); // can be called as well 111 | 112 | if (set == null) { 113 | set = createSet(); 114 | data.addDataSet(set); 115 | } 116 | 117 | data.addEntry(new Entry(set.getEntryCount(), restrictPercentage(MainActivity.readCPUUsage()*100)), 0); 118 | data.notifyDataChanged(); 119 | 120 | // let the chart know it's data has changed 121 | mChart.notifyDataSetChanged(); 122 | 123 | // limit the number of visible entries 124 | mChart.setVisibleXRangeMaximum(5); 125 | // mChart.setVisibleYRange(30, AxisDependency.LEFT); 126 | 127 | // move to the latest entry 128 | mChart.moveViewToX(data.getEntryCount()); 129 | 130 | // this automatically refreshes the chart (calls invalidate()) 131 | // mChart.moveViewTo(data.getXValCount()-7, 55f, 132 | // AxisDependency.LEFT); 133 | } 134 | 135 | if (data1 != null) { 136 | 137 | ILineDataSet set1 = data1.getDataSetByIndex(0); 138 | 139 | if (set1 == null) { 140 | set1 = createSet1(); 141 | data1.addDataSet(set1); 142 | } 143 | 144 | data1.addEntry(new Entry(set1.getEntryCount(),currentMem()[1]), 0); 145 | data1.notifyDataChanged(); 146 | 147 | // let the chart know it's data has changed 148 | rChart.notifyDataSetChanged(); 149 | 150 | // limit the number of visible entries 151 | rChart.setVisibleXRangeMaximum(5); 152 | // mChart.setVisibleYRange(30, AxisDependency.LEFT); 153 | 154 | // move to the latest entry 155 | rChart.moveViewToX(data1.getEntryCount()); 156 | } 157 | } 158 | }; 159 | 160 | handler.postDelayed(r, 800); 161 | } 162 | private LineDataSet createSet() { 163 | 164 | LineDataSet set = new LineDataSet(null, "Dynamic Data"); 165 | set.setMode(LineDataSet.Mode.CUBIC_BEZIER); 166 | set.setColor(Color.parseColor("#c25e00")); 167 | set.setDrawValues(false); 168 | set.setDrawCircles(false); 169 | set.setFillColor(Color.parseColor("#ffbd45")); 170 | set.setDrawFilled(true); 171 | set.setFillAlpha(255); 172 | return set; 173 | } 174 | 175 | private LineDataSet createSet1() { 176 | 177 | LineDataSet set = new LineDataSet(null, "Dynamic Data"); 178 | set.setAxisDependency(YAxis.AxisDependency.LEFT); 179 | set.setColor(Color.RED); 180 | set.setCircleColor(Color.WHITE); 181 | set.setCircleRadius(4f); 182 | set.setFillAlpha(65); 183 | set.setFillColor(ColorTemplate.getHoloBlue()); 184 | set.setHighLightColor(Color.rgb(244, 117, 117)); 185 | set.setValueTextColor(Color.WHITE); 186 | set.setValueTextSize(9f); 187 | set.setDrawValues(false); 188 | return set; 189 | } 190 | public int [] currentMem() { 191 | ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); 192 | ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 193 | activityManager.getMemoryInfo(mi); 194 | int totalMegs = (int) (mi.totalMem / 0x100000L); 195 | int availableMegs = (int) (mi.availMem / 0x100000L); 196 | int usedMegs = totalMegs - availableMegs; 197 | int totalGigs = totalMegs; 198 | int [] mem = {totalMegs, usedMegs}; 199 | double percentAvail = mi.availMem / (double) mi.totalMem; 200 | return mem; 201 | } 202 | 203 | private float restrictPercentage(float percentage) { 204 | if (percentage > 100) 205 | return 100; 206 | else if (percentage < 0) 207 | return 0; 208 | else return percentage; 209 | } 210 | } 211 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.app.ActivityManager; 4 | import android.content.Intent; 5 | import android.graphics.Typeface; 6 | import android.net.Uri; 7 | import android.os.Bundle; 8 | import android.support.design.widget.NavigationView; 9 | import android.support.v4.view.GravityCompat; 10 | import android.support.v4.widget.DrawerLayout; 11 | import android.support.v7.app.ActionBarDrawerToggle; 12 | import android.support.v7.app.AppCompatActivity; 13 | import android.support.v7.widget.Toolbar; 14 | import android.view.Menu; 15 | import android.view.MenuItem; 16 | import android.widget.TextView; 17 | 18 | import com.google.android.gms.appindexing.Action; 19 | import com.google.android.gms.appindexing.AppIndex; 20 | import com.google.android.gms.appindexing.Thing; 21 | import com.google.android.gms.common.api.GoogleApiClient; 22 | 23 | import java.io.IOException; 24 | import java.io.RandomAccessFile; 25 | import java.text.DecimalFormat; 26 | 27 | public class MainActivity extends AppCompatActivity 28 | implements NavigationView.OnNavigationItemSelectedListener { 29 | 30 | /** 31 | * ATTENTION: This was auto-generated to implement the App Indexing API. 32 | * See https://g.co/AppIndexing/AndroidStudio for more information. 33 | */ 34 | public GoogleApiClient client; 35 | 36 | public static float readCPUUsage() { 37 | try { 38 | RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r"); 39 | String[] toks = reader.readLine().split(" "); 40 | long idle1 = Long.parseLong(toks[5]); 41 | long cpu1 = ((((Long.parseLong(toks[2]) + Long.parseLong(toks[3])) + Long.parseLong(toks[4])) + Long.parseLong(toks[6])) + Long.parseLong(toks[7])) + Long.parseLong(toks[8]); 42 | try { 43 | Thread.sleep(360); 44 | } catch (Exception e) { 45 | } 46 | reader.seek(0); 47 | String load = reader.readLine(); 48 | reader.close(); 49 | toks = load.split(" "); 50 | long cpu2 = ((((Long.parseLong(toks[2]) + Long.parseLong(toks[3])) + Long.parseLong(toks[4])) + Long.parseLong(toks[6])) + Long.parseLong(toks[7])) + Long.parseLong(toks[8]); 51 | DecimalFormat decimalFormat = new DecimalFormat("#.0"); 52 | return Float.parseFloat(decimalFormat.format(((float) (cpu2 - cpu1)) / ((float) ((cpu2 + Long.parseLong(toks[5])) - (cpu1 + idle1))))); 53 | } catch (IOException ex) { 54 | ex.printStackTrace(); 55 | return 0.0f; 56 | } 57 | } 58 | 59 | private float restrictPercentage(float percentage) { 60 | if (percentage > 100) 61 | return 100; 62 | else if (percentage < 0) 63 | return 0; 64 | else return percentage; 65 | } 66 | 67 | 68 | public static float getAppUsedMemorySize() { 69 | 70 | float freeSize = 0L; 71 | float totalSize = 0L; 72 | float usedSize = -1L; 73 | try { 74 | 75 | Runtime info = Runtime.getRuntime(); 76 | freeSize = info.freeMemory(); 77 | totalSize = info.totalMemory(); 78 | usedSize = totalSize - freeSize; 79 | } catch (Exception e) { 80 | e.printStackTrace(); 81 | } 82 | DecimalFormat decimalFormat = new DecimalFormat("#.000"); 83 | return Float.parseFloat(decimalFormat.format(usedSize/1024)); 84 | } 85 | 86 | public int [] currentMem() { 87 | ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); 88 | ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 89 | activityManager.getMemoryInfo(mi); 90 | int totalMegs = (int) (mi.totalMem / 0x100000L); 91 | int availableMegs = (int) (mi.availMem / 0x100000L); 92 | int usedMegs = totalMegs - availableMegs; 93 | int totalGigs = totalMegs; 94 | int [] mem = {totalMegs, usedMegs}; 95 | double percentAvail = mi.availMem / (double) mi.totalMem; 96 | return mem; 97 | } 98 | 99 | @Override 100 | protected void onCreate(Bundle savedInstanceState) { 101 | super.onCreate(savedInstanceState); 102 | setContentView(R.layout.activity_main); 103 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 104 | //setSupportActionBar(toolbar); 105 | Typeface custom_font1 = Typeface.createFromAsset(getAssets(), "fonts/SourceSansPro-Black.otf"); 106 | Typeface custom_font2 = Typeface.createFromAsset(getAssets(), "fonts/OstrichSans-Bold.otf"); 107 | Typeface custom_font3 = Typeface.createFromAsset(getAssets(), "fonts/OdinBold.otf"); 108 | Typeface custom_font4 = Typeface.createFromAsset(getAssets(), "fonts/trench100free.otf"); 109 | Typeface custom_font5 = Typeface.createFromAsset(getAssets(), "fonts/More.otf"); 110 | Typeface custom_font6 = Typeface.createFromAsset(getAssets(), "fonts/MagmaWave_Caps.otf"); 111 | Typeface custom_font7 = Typeface.createFromAsset(getAssets(), "fonts/SR.otf"); 112 | Typeface custom_font8 = Typeface.createFromAsset(getAssets(), "fonts/bod.otf"); 113 | 114 | //Other Components 115 | final TextView cpuload = (TextView) findViewById(R.id.textView10); 116 | cpuload.setTypeface(custom_font1); 117 | final TextView ramusage = (TextView) findViewById(R.id.textView14); 118 | ramusage.setTypeface(custom_font1); 119 | final TextView cpu = (TextView)(findViewById(R.id.cputv)); 120 | cpu.setTypeface(custom_font2); 121 | final TextView ram = (TextView)(findViewById(R.id.ramtv)); 122 | ram.setTypeface(custom_font2); 123 | final TextView tvw = (TextView) findViewById(R.id.tvwel); 124 | tvw.setTypeface(custom_font3); 125 | 126 | 127 | final android.os.Handler handler = new android.os.Handler(); 128 | 129 | final Runnable r = new Runnable() 130 | { 131 | public void run() 132 | { 133 | cpu.setText(" "+restrictPercentage(readCPUUsage()*100) +" %"); 134 | ram.setText(" "+currentMem()[1] +" MB / "+currentMem()[0]+" MB"); 135 | handler.postDelayed(this,800); 136 | 137 | 138 | } 139 | 140 | 141 | }; 142 | 143 | handler.postDelayed(r, 800); 144 | 145 | DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 146 | ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( 147 | this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 148 | drawer.setDrawerListener(toggle); 149 | toggle.syncState(); 150 | 151 | NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 152 | navigationView.setNavigationItemSelectedListener(this); 153 | // ATTENTION: This was auto-generated to implement the App Indexing API. 154 | // See https://g.co/AppIndexing/AndroidStudio for more information. 155 | client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 156 | } 157 | 158 | @Override 159 | public void onBackPressed() { 160 | DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 161 | if (drawer.isDrawerOpen(GravityCompat.START)) { 162 | drawer.closeDrawer(GravityCompat.START); 163 | } else { 164 | super.onBackPressed(); 165 | } 166 | } 167 | 168 | @Override 169 | public boolean onCreateOptionsMenu(Menu menu) { 170 | // Inflate the menu; this adds items to the action bar if it is present. 171 | getMenuInflater().inflate(R.menu.main, menu); 172 | return true; 173 | } 174 | 175 | @Override 176 | public boolean onOptionsItemSelected(MenuItem item) { 177 | // Handle action bar item clicks here. The action bar will 178 | // automatically handle clicks on the Home/Up button, so long 179 | // as you specify a parent activity in AndroidManifest.xml. 180 | int id = item.getItemId(); 181 | /*switch (id){ 182 | case R.id.nav_send: 183 | startActivity(new Intent(this, AboutUs.class)); 184 | break; 185 | }return true; 186 | */ 187 | //noinspection SimplifiableIfStatement 188 | if (id == R.id.action_settings) { 189 | return true; 190 | } 191 | 192 | return super.onOptionsItemSelected(item); 193 | } 194 | 195 | @SuppressWarnings("StatementWithEmptyBody") 196 | @Override 197 | public boolean onNavigationItemSelected(MenuItem item) { 198 | // Handle navigation view item clicks here. 199 | int id = item.getItemId(); 200 | 201 | if (id == R.id.nav_permissions) { 202 | } else { 203 | if (id == R.id.nav_settings) 204 | startActivity(new Intent(this, SettingsScanner.class)); 205 | 206 | else if (id == R.id.nav_manage) { 207 | startActivity(new Intent(this, RootDetector.class)); 208 | 209 | } else if (id == R.id.nav_graph) { 210 | startActivity(new Intent(this, GraphView.class)); 211 | 212 | }else { 213 | if (id == R.id.nav_aboutus) { 214 | Intent i = new Intent(this,AboutUs.class); 215 | startActivity(i); 216 | } 217 | } 218 | } 219 | 220 | DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 221 | drawer.closeDrawer(GravityCompat.START); 222 | return true; 223 | } 224 | 225 | /** 226 | * ATTENTION: This was auto-generated to implement the App Indexing API. 227 | * See https://g.co/AppIndexing/AndroidStudio for more information. 228 | */ 229 | public Action getIndexApiAction() { 230 | Thing object = new Thing.Builder() 231 | .setName("Main Page") // TODO: Define a title for the content shown. 232 | // TODO: Make sure this auto-generated URL is correct. 233 | .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]")) 234 | .build(); 235 | return new Action.Builder(Action.TYPE_VIEW) 236 | .setObject(object) 237 | .setActionStatus(Action.STATUS_TYPE_COMPLETED) 238 | .build(); 239 | } 240 | 241 | @Override 242 | public void onStart() { 243 | super.onStart(); 244 | 245 | // ATTENTION: This was auto-generated to implement the App Indexing API. 246 | // See https://g.co/AppIndexing/AndroidStudio for more information. 247 | client.connect(); 248 | AppIndex.AppIndexApi.start(client, getIndexApiAction()); 249 | } 250 | 251 | @Override 252 | public void onStop() { 253 | super.onStop(); 254 | 255 | // ATTENTION: This was auto-generated to implement the App Indexing API. 256 | // See https://g.co/AppIndexing/AndroidStudio for more information. 257 | AppIndex.AppIndexApi.end(client, getIndexApiAction()); 258 | client.disconnect(); 259 | } 260 | } 261 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/PermissionScanner.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.content.Intent; 4 | import android.content.pm.ApplicationInfo; 5 | import android.content.pm.PackageInfo; 6 | import android.content.pm.PackageManager; 7 | import android.content.pm.PermissionInfo; 8 | import android.content.pm.ProviderInfo; 9 | import android.content.pm.ServiceInfo; 10 | import android.graphics.Typeface; 11 | import android.net.Uri; 12 | import android.os.Bundle; 13 | import android.provider.Settings; 14 | import android.support.v7.app.AppCompatActivity; 15 | import android.view.View; 16 | import android.widget.LinearLayout; 17 | import android.widget.TextView; 18 | 19 | import java.util.ArrayList; 20 | import java.util.List; 21 | 22 | public class PermissionScanner extends AppCompatActivity { 23 | 24 | 25 | @Override 26 | protected void onCreate(Bundle savedInstanceState) { 27 | super.onCreate(savedInstanceState); 28 | setContentView(R.layout.activity_permission_scanner); 29 | 30 | if(getSupportActionBar()!= null){ 31 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 32 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 33 | } 34 | 35 | Typeface custom_font3 = Typeface.createFromAsset(getAssets(), "fonts/OdinBold.otf"); 36 | 37 | ArrayList VulnPerms = new ArrayList(); 38 | 39 | VulnPerms.add("com.android.launcher.permission.WRITE_SETTINGS"); 40 | VulnPerms.add("android.permission.READ_CALL_LOG"); 41 | VulnPerms.add("android.permission.DISABLE_KEYGUARD"); 42 | VulnPerms.add("android.permission.READ_CONTACTS"); 43 | VulnPerms.add("android.permission.WRITE_EXTERNAL_STORAGE"); 44 | VulnPerms.add("android.permission.USE_CREDENTIALS"); 45 | VulnPerms.add("android.permission.MANAGE_ACCOUNTS"); 46 | VulnPerms.add("android.permission.INTERNET"); 47 | VulnPerms.add("android.permission.RECORD_AUDIO"); 48 | VulnPerms.add("android.permission.READ_SMS"); 49 | VulnPerms.add("android.permission.WRITE_SMS"); 50 | VulnPerms.add("com.google.android.googleapps.permission.ACCESS_GOOGLE_PASSWORD"); 51 | 52 | int vulnLength = VulnPerms.size(); 53 | 54 | final int N = 100; // total number of textviews to add 55 | String appname = null; 56 | 57 | final TextView[] myTextViews = new TextView[N]; // create an empty array; 58 | 59 | PackageManager p = this.getPackageManager(); 60 | final List appinstall = p.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_RECEIVERS | 61 | PackageManager.GET_SERVICES | PackageManager.GET_PROVIDERS); 62 | 63 | for (final PackageInfo pInfo : appinstall) { 64 | if ( (pInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 ) { 65 | PermissionInfo[] permission = pInfo.permissions; 66 | String[] reqPermission = pInfo.requestedPermissions; 67 | ServiceInfo[] services = pInfo.services; 68 | ProviderInfo[] providers = pInfo.providers; 69 | int versionCode = pInfo.versionCode; 70 | 71 | 72 | ApplicationInfo applicationInfo = null; 73 | try { 74 | applicationInfo = p.getApplicationInfo(pInfo.packageName, 0); 75 | } catch (final PackageManager.NameNotFoundException e) { 76 | } 77 | if( applicationInfo != null) { 78 | appname = (String) p.getApplicationLabel(applicationInfo); 79 | } 80 | 81 | LinearLayout layout1 = (LinearLayout) (findViewById(R.id.info)); 82 | final TextView permheader = new TextView(this); 83 | layout1.addView(permheader); 84 | permheader.setText(appname); 85 | permheader.setTypeface(custom_font3); 86 | permheader.setAllCaps(true); 87 | permheader.setTextSize(18); 88 | permheader.isClickable(); 89 | 90 | permheader.setOnClickListener(new View.OnClickListener() { 91 | @Override 92 | public void onClick(View v) { 93 | Intent i = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 94 | i.addCategory(Intent.CATEGORY_DEFAULT); 95 | i.setData(Uri.parse("package:" + pInfo.packageName)); 96 | startActivity(i); 97 | } 98 | }); 99 | permheader.setTextColor(getResources().getColor(R.color.white)); 100 | 101 | String [] appNames; 102 | 103 | if (reqPermission != null) { 104 | for (int i = 0; i < reqPermission.length; i++) { 105 | if (VulnPerms.contains(reqPermission[i])) { 106 | LinearLayout layout = (LinearLayout) (findViewById(R.id.info)); 107 | final TextView PermTextView = new TextView(this); 108 | layout.addView(PermTextView); 109 | PermTextView.setText(" " + reqPermission[i]); 110 | PermTextView.setTextSize(12); 111 | PermTextView.setTextColor(getResources().getColor(R.color.white)); 112 | } 113 | 114 | } 115 | 116 | } 117 | } 118 | 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/RootDetector.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.content.Intent; 4 | import android.graphics.Typeface; 5 | import android.os.Build; 6 | import android.os.Bundle; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.view.View; 9 | import android.widget.Button; 10 | import android.widget.TextView; 11 | import android.widget.Toast; 12 | import android.widget.ToggleButton; 13 | 14 | import java.io.BufferedReader; 15 | import java.io.File; 16 | import java.io.InputStreamReader; 17 | 18 | public class RootDetector extends AppCompatActivity { 19 | 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_root_detector); 25 | 26 | Typeface custom_font2 = Typeface.createFromAsset(getAssets(), "fonts/OdinBold.otf"); 27 | Typeface custom_font7 = Typeface.createFromAsset(getAssets(), "fonts/SR.otf"); 28 | 29 | final TextView tvroot1 = (TextView) findViewById(R.id.textView3); 30 | tvroot1.setTypeface(custom_font2); 31 | final TextView tvroot2 = (TextView) findViewById(R.id.roottv); 32 | tvroot2.setTypeface(custom_font7); 33 | 34 | ToggleButton rootb = (ToggleButton) (findViewById(R.id.Roottb)); 35 | ToggleButton hooktb = (ToggleButton) (findViewById(R.id.hooktb)); 36 | 37 | Button rtools = (Button) (findViewById(R.id.broottools)); 38 | Button unroot = (Button)(findViewById(R.id.bunroot)); 39 | TextView roottv = (TextView) (findViewById(R.id.roottv)); 40 | 41 | TextView hooktv = (TextView) (findViewById(R.id.Syshook)); 42 | hooktv.setTypeface(custom_font2); 43 | TextView syshooktv = (TextView) (findViewById(R.id.tvSyshook)); 44 | syshooktv.setTypeface(custom_font7); 45 | 46 | 47 | String yesdesc = "Your device has root access. Rooted devices allow lot of customizations but as well pose serious security issues by allowing apps to access lot of resources from the phone. You can choose to unroot the device or install security-enhancing tools. Here is a list : "; 48 | String nodesc = "No root access detected. Your device is a little more safer!"; 49 | 50 | String hookyes = "Your device has been hooked. This means that user applications could act as privileged applications and gain access to system resources and settings."; 51 | String hookno = "No system hook found. Your device is fully under your control."; 52 | 53 | boolean isHooked = FindHook(); 54 | 55 | if (isHooked == true){ 56 | 57 | hooktb.setChecked(true); 58 | syshooktv.setText(hookyes); 59 | } 60 | 61 | else{ 62 | hooktb.setChecked(false); 63 | syshooktv.setText(hookno); 64 | } 65 | 66 | boolean isRooted = FindRoot(); 67 | 68 | if (isRooted == true) { 69 | 70 | 71 | rootb.setChecked(true); 72 | roottv.setText(yesdesc); 73 | rtools.setOnClickListener(new View.OnClickListener() 74 | { 75 | public void onClick(View v) 76 | { 77 | Intent i = new Intent(RootDetector.this, RootTools.class); 78 | RootDetector.this.startActivity(i); 79 | } 80 | }); 81 | 82 | unroot.setOnClickListener(new View.OnClickListener() 83 | { 84 | public void onClick(View v) 85 | { 86 | Intent i = new Intent(RootDetector.this, Unroot.class); 87 | RootDetector.this.startActivity(i); 88 | finish(); 89 | } 90 | 91 | }); 92 | 93 | rtools.setVisibility(View.VISIBLE); 94 | unroot.setVisibility(View.VISIBLE); 95 | 96 | } else { 97 | rootb.setChecked(false); 98 | roottv.setText(nodesc); 99 | } 100 | } 101 | 102 | public boolean FindRoot() { 103 | return TestKeysChecker() || SUBinFinder() || SURuntimeCheck(); 104 | } 105 | 106 | public boolean TestKeysChecker() { 107 | String keys = Build.TAGS; 108 | if (keys != null && keys.contains("test-keys")) { 109 | 110 | Toast.makeText(this, " Test-keys found ", Toast.LENGTH_SHORT).show(); 111 | return true; 112 | } else { 113 | Toast.makeText(this, "Test-keys not found", Toast.LENGTH_SHORT).show(); 114 | return false; 115 | } 116 | } 117 | 118 | 119 | //Check within the paths for the existance of su binary 120 | public boolean SUBinFinder() { 121 | String[] paths = {"/system/app/Superuser.apk", 122 | "/system/priv-app/Superuser.apk", 123 | "/system/priv-app/superuser.apk", 124 | "/system/app/superuser.apk", 125 | "/sbin/su", 126 | "/system/bin/su", 127 | "/system/xbin/su", 128 | "/data/local/xbin/su", 129 | "/data/local/bin/su", 130 | "/system/sd/xbin/su", 131 | "/system/bin/failsafe/su", 132 | "/data/local/su", 133 | "/su/bin/su" 134 | }; 135 | 136 | int dircount = 0; 137 | 138 | 139 | 140 | for (String path : paths) { 141 | 142 | if (new File(path).exists()) { 143 | dircount++; 144 | } 145 | } 146 | 147 | if (dircount > 0) { 148 | 149 | Toast.makeText(this, " SU binary found ", Toast.LENGTH_SHORT).show(); 150 | return true; 151 | 152 | } else { 153 | 154 | Toast.makeText(this, "SU binary not found", Toast.LENGTH_SHORT).show(); 155 | return false; 156 | } 157 | } 158 | 159 | 160 | //Executing the su binary 161 | public boolean SURuntimeCheck() { 162 | Process process = null; 163 | try { 164 | process = Runtime.getRuntime().exec(new String[]{"/system/xbin/which", "su"}); 165 | BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); 166 | if (in.readLine() != null) { 167 | Toast.makeText(this, " SU execution successfull ! ", Toast.LENGTH_SHORT).show(); 168 | return true; 169 | } 170 | Toast.makeText(this, "SU execution failed", Toast.LENGTH_SHORT).show(); 171 | 172 | 173 | } catch (Throwable t) { 174 | 175 | } finally { 176 | if (process != null) process.destroy(); 177 | } 178 | return false; 179 | } 180 | 181 | 182 | 183 | /* 184 | Finding system hooks. 185 | Two processes used. 186 | */ 187 | 188 | public boolean FindHook() {return HookJarFinder();} 189 | 190 | 191 | public boolean HookJarFinder(){ 192 | String hook = "/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar"; 193 | if (new File(hook).exists()){ 194 | Toast.makeText(this, "Xposed Bridge found. System has been hooked!", Toast.LENGTH_SHORT).show(); 195 | return true; 196 | } 197 | else { 198 | Toast.makeText(this, "Xposed Bridge not found. System not hooked.", Toast.LENGTH_SHORT).show(); 199 | return false; 200 | } 201 | } 202 | } 203 | 204 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/RootTools.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.content.Intent; 4 | import android.graphics.Typeface; 5 | import android.net.Uri; 6 | import android.os.Bundle; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.support.v7.widget.Toolbar; 9 | import android.view.View; 10 | import android.widget.Button; 11 | import android.widget.TextView; 12 | 13 | public class RootTools extends AppCompatActivity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_root_tools); 19 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 20 | setSupportActionBar(toolbar); 21 | 22 | Typeface custom_font2 = Typeface.createFromAsset(getAssets(), "fonts/OdinBold.otf"); 23 | Typeface custom_font7 = Typeface.createFromAsset(getAssets(), "fonts/SR.otf"); 24 | 25 | final TextView tvtools = (TextView) findViewById(R.id.textView5); 26 | tvtools.setTypeface(custom_font2); 27 | 28 | final TextView tvtool1 = (TextView) findViewById(R.id.textView17); 29 | tvtool1.setTypeface(custom_font7); 30 | final TextView tvtool2 = (TextView) findViewById(R.id.textView16); 31 | tvtool2.setTypeface(custom_font7); 32 | final TextView tvtool3 = (TextView) findViewById(R.id.textView18); 33 | tvtool3.setTypeface(custom_font7); 34 | final TextView tvtool4 = (TextView) findViewById(R.id.textView19); 35 | tvtool4.setTypeface(custom_font7); 36 | final TextView tvtool5 = (TextView) findViewById(R.id.textView15); 37 | tvtool5.setTypeface(custom_font7); 38 | final TextView tvtool6 = (TextView) findViewById(R.id.textView11); 39 | tvtool6.setTypeface(custom_font7); 40 | 41 | Button adblock = (Button)(findViewById(R.id.adblockbtn)); 42 | adblock.setOnClickListener(new View.OnClickListener() { 43 | @Override 44 | public void onClick(View v) { 45 | 46 | String url = "https://adblockplus.org/android-install"; 47 | Intent i = new Intent(Intent.ACTION_VIEW); 48 | i.setData(Uri.parse(url)); 49 | startActivity(i); 50 | } 51 | 52 | }); 53 | 54 | Button greenify = (Button) (findViewById(R.id.greenifybtn)); 55 | greenify.setOnClickListener(new View.OnClickListener() { 56 | @Override 57 | public void onClick(View v) { 58 | 59 | String url = "https://play.google.com/store/apps/details?id=com.oasisfeng.greenify"; 60 | Intent i = new Intent(Intent.ACTION_VIEW); 61 | i.setData(Uri.parse(url)); 62 | startActivity(i); 63 | } 64 | }); 65 | 66 | Button blocker = (Button) (findViewById(R.id.blockerbtn)); 67 | blocker.setOnClickListener(new View.OnClickListener() { 68 | @Override 69 | public void onClick(View v) { 70 | String url = "https://play.google.com/store/apps/details?id=com.netqin.mm"; 71 | Intent i = new Intent(Intent.ACTION_VIEW); 72 | i.setData(Uri.parse(url)); 73 | startActivity(i); 74 | } 75 | }); 76 | 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/SettingsScanner.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.content.Intent; 4 | import android.graphics.Typeface; 5 | import android.net.Uri; 6 | import android.os.Bundle; 7 | import android.provider.Settings; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.view.View; 10 | import android.widget.TextView; 11 | import android.widget.ToggleButton; 12 | 13 | import com.google.android.gms.appindexing.Action; 14 | import com.google.android.gms.appindexing.AppIndex; 15 | import com.google.android.gms.appindexing.Thing; 16 | import com.google.android.gms.common.api.GoogleApiClient; 17 | 18 | public class SettingsScanner extends AppCompatActivity { 19 | 20 | 21 | /** 22 | * ATTENTION: This was auto-generated to implement the App Indexing API. 23 | * See https://g.co/AppIndexing/AndroidStudio for more information. 24 | */ 25 | private GoogleApiClient client; 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.activity_settings_scanner); 31 | 32 | final TextView ss = (TextView) findViewById(R.id.tvvs); 33 | final TextView adbt = (TextView) findViewById(R.id.ADBTView); 34 | final TextView usv = (TextView) findViewById(R.id.USourcesView); 35 | final TextView db = (TextView) findViewById(R.id.DevTView); 36 | 37 | final TextView usd = (TextView) findViewById(R.id.textView7); 38 | final TextView debd = (TextView) findViewById(R.id.textView8); 39 | final TextView devd = (TextView) findViewById(R.id.textView12); 40 | 41 | Typeface custom_font1 = Typeface.createFromAsset(getAssets(), "fonts/SourceSansPro-Black.otf"); 42 | Typeface custom_font2 = Typeface.createFromAsset(getAssets(), "fonts/OstrichSans-Bold.otf"); 43 | Typeface custom_font3 = Typeface.createFromAsset(getAssets(), "fonts/OdinBold.otf"); 44 | Typeface custom_font4 = Typeface.createFromAsset(getAssets(), "fonts/trench100free.otf"); 45 | Typeface custom_font5 = Typeface.createFromAsset(getAssets(), "fonts/More.otf"); 46 | Typeface custom_font6 = Typeface.createFromAsset(getAssets(), "fonts/MagmaWave_Caps.otf"); 47 | Typeface custom_font7 = Typeface.createFromAsset(getAssets(), "fonts/SR.otf"); 48 | 49 | ss.setTypeface(custom_font3); 50 | usv.setTypeface(custom_font7); 51 | adbt.setTypeface(custom_font7); 52 | db.setTypeface(custom_font7); 53 | 54 | usd.setTypeface(custom_font7); 55 | debd.setTypeface(custom_font7); 56 | devd.setTypeface(custom_font7); 57 | 58 | try { 59 | checkSettings(); 60 | } catch (Settings.SettingNotFoundException e) { 61 | e.printStackTrace(); 62 | } 63 | // ATTENTION: This was auto-generated to implement the App Indexing API. 64 | // See https://g.co/AppIndexing/AndroidStudio for more information. 65 | client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 66 | } 67 | 68 | 69 | public void checkSettings() throws Settings.SettingNotFoundException { 70 | 71 | ToggleButton USs = (ToggleButton) (findViewById(R.id.USt)); 72 | if (Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0) == 1) { 73 | USs.setChecked(true); 74 | USs.setOnClickListener(new View.OnClickListener() { 75 | @Override 76 | public void onClick(View v) { 77 | startActivityForResult(new Intent(Settings.ACTION_SECURITY_SETTINGS), 0); 78 | } 79 | }); 80 | } else { 81 | USs.setChecked(false); 82 | USs.setOnClickListener(new View.OnClickListener() { 83 | @Override 84 | public void onClick(View v) { 85 | startActivityForResult(new Intent(Settings.ACTION_SECURITY_SETTINGS), 0); 86 | } 87 | }); 88 | } 89 | 90 | 91 | 92 | 93 | 94 | 95 | ToggleButton ADBes = (ToggleButton) (findViewById(R.id.ADBt)); 96 | if (Settings.Secure.getInt(getContentResolver(), Settings.Global.ADB_ENABLED, 0) == 1) { 97 | ADBes.setChecked(true); 98 | ADBes.setOnClickListener(new View.OnClickListener() { 99 | @Override 100 | public void onClick(View v) { 101 | startActivityForResult(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS), 0); 102 | } 103 | }); 104 | } else { 105 | ADBes.setChecked(false); 106 | ADBes.setOnClickListener(new View.OnClickListener() { 107 | @Override 108 | public void onClick(View v) { 109 | startActivityForResult(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS), 0); 110 | } 111 | }); 112 | } 113 | 114 | 115 | 116 | 117 | 118 | 119 | ToggleButton DevS = (ToggleButton) (findViewById(R.id.DevB)); 120 | if (Settings.Secure.getInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) == 1) { 121 | DevS.setChecked(true); 122 | DevS.setOnClickListener(new View.OnClickListener() { 123 | @Override 124 | public void onClick(View v) { 125 | startActivityForResult(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS), 0); 126 | } 127 | }); 128 | } else { 129 | DevS.setChecked(false); 130 | DevS.setOnClickListener(new View.OnClickListener() { 131 | @Override 132 | public void onClick(View v) { 133 | startActivityForResult(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS), 0); 134 | } 135 | }); 136 | } 137 | } 138 | 139 | /** 140 | * ATTENTION: This was auto-generated to implement the App Indexing API. 141 | * See https://g.co/AppIndexing/AndroidStudio for more information. 142 | */ 143 | public Action getIndexApiAction() { 144 | Thing object = new Thing.Builder() 145 | .setName("SettingsScanner Page") // TODO: Define a title for the content shown. 146 | // TODO: Make sure this auto-generated URL is correct. 147 | .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]")) 148 | .build(); 149 | return new Action.Builder(Action.TYPE_VIEW) 150 | .setObject(object) 151 | .setActionStatus(Action.STATUS_TYPE_COMPLETED) 152 | .build(); 153 | } 154 | 155 | 156 | @Override 157 | public void onStart() { 158 | super.onStart(); 159 | 160 | // ATTENTION: This was auto-generated to implement the App Indexing API. 161 | // See https://g.co/AppIndexing/AndroidStudio for more information. 162 | client.connect(); 163 | AppIndex.AppIndexApi.start(client, getIndexApiAction()); 164 | } 165 | 166 | @Override 167 | public void onResume() { 168 | super.onResume(); 169 | try { 170 | checkSettings(); 171 | } catch (Settings.SettingNotFoundException e) { 172 | e.printStackTrace(); 173 | } 174 | } 175 | 176 | @Override 177 | public void onStop() { 178 | super.onStop(); 179 | 180 | // ATTENTION: This was auto-generated to implement the App Indexing API. 181 | // See https://g.co/AppIndexing/AndroidStudio for more information. 182 | AppIndex.AppIndexApi.end(client, getIndexApiAction()); 183 | client.disconnect(); 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/Unroot.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.content.Intent; 4 | import android.graphics.Typeface; 5 | import android.net.Uri; 6 | import android.os.Bundle; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.view.View; 9 | import android.widget.Button; 10 | import android.widget.TextView; 11 | 12 | public class Unroot extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_unroot); 18 | 19 | Typeface custom_font2 = Typeface.createFromAsset(getAssets(), "fonts/OstrichSans-Bold.otf"); 20 | Typeface custom_font7 = Typeface.createFromAsset(getAssets(), "fonts/SR.otf"); 21 | 22 | final TextView unroot1 = (TextView) findViewById(R.id.textView20); 23 | unroot1.setTypeface(custom_font2); 24 | final TextView unroot2 = (TextView) findViewById(R.id.textView21); 25 | unroot2.setTypeface(custom_font7); 26 | 27 | Button unroot = (Button)(findViewById(R.id.unrtbtn)); 28 | unroot.setOnClickListener(new View.OnClickListener() { 29 | @Override 30 | public void onClick(View v) { 31 | String url = "http://www.wikihow.com/Unroot-Android"; 32 | Intent i = new Intent(Intent.ACTION_VIEW); 33 | i.setData(Uri.parse(url)); 34 | startActivity(i); 35 | } 36 | }); 37 | 38 | Button learn = (Button)(findViewById(R.id.learnbtn)); 39 | learn.setOnClickListener(new View.OnClickListener() { 40 | @Override 41 | public void onClick(View v) { 42 | String url = "https://en.wikipedia.org/wiki/Rooting_(Android_OS)"; 43 | Intent i = new Intent(Intent.ACTION_VIEW); 44 | i.setData(Uri.parse(url)); 45 | startActivity(i); 46 | } 47 | }); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/Welcome.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.graphics.Typeface; 6 | import android.os.Build; 7 | import android.os.Bundle; 8 | import android.os.Handler; 9 | import android.support.annotation.RequiresApi; 10 | import android.widget.TextView; 11 | 12 | 13 | public class Welcome extends Activity { 14 | 15 | private final int SPLASH_DISPLAY_LENGTH = 2000; 16 | 17 | @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState){ 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_welcome); 22 | 23 | Typeface custom_font6 = Typeface.createFromAsset(getAssets(), "fonts/MagmaWave_Caps.otf"); 24 | Typeface custom_font8 = Typeface.createFromAsset(getAssets(), "fonts/bod.otf"); 25 | 26 | final TextView welc = (TextView) findViewById(R.id.tvr); 27 | 28 | welc.setTypeface(custom_font6); 29 | 30 | new Handler().postDelayed(new Runnable() { 31 | 32 | @Override 33 | public void run() { 34 | Intent i = new Intent(com.gracetex.revo.rudhra.Welcome.this, com.gracetex.revo.rudhra.MainActivity.class); 35 | Welcome.this.startActivity(i); 36 | Welcome.this.finish(); 37 | } 38 | }, SPLASH_DISPLAY_LENGTH); 39 | } 40 | } 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/gracetex/revo/rudhra/dummy/DummyContent.java: -------------------------------------------------------------------------------- 1 | package com.gracetex.revo.rudhra.dummy; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | /** 9 | * Helper class for providing sample content for user interfaces created by 10 | * Android template wizards. 11 | *

12 | * TODO: Replace all uses of this class before publishing your app. 13 | */ 14 | public class DummyContent { 15 | 16 | /** 17 | * An array of sample (dummy) items. 18 | */ 19 | public static final List ITEMS = new ArrayList(); 20 | 21 | /** 22 | * A map of sample (dummy) items, by ID. 23 | */ 24 | public static final Map ITEM_MAP = new HashMap(); 25 | 26 | private static final int COUNT = 25; 27 | 28 | static { 29 | // Add some sample items. 30 | for (int i = 1; i <= COUNT; i++) { 31 | addItem(createDummyItem(i)); 32 | } 33 | } 34 | 35 | private static void addItem(DummyItem item) { 36 | ITEMS.add(item); 37 | ITEM_MAP.put(item.id, item); 38 | } 39 | 40 | private static DummyItem createDummyItem(int position) { 41 | return new DummyItem(String.valueOf(position), "Item " + position, makeDetails(position)); 42 | } 43 | 44 | private static String makeDetails(int position) { 45 | StringBuilder builder = new StringBuilder(); 46 | builder.append("Details about Item: ").append(position); 47 | for (int i = 0; i < position; i++) { 48 | builder.append("\nMore details information here."); 49 | } 50 | return builder.toString(); 51 | } 52 | 53 | /** 54 | * A dummy item representing a piece of content. 55 | */ 56 | public static class DummyItem { 57 | public final String id; 58 | public final String content; 59 | public final String details; 60 | 61 | public DummyItem(String id, String content, String details) { 62 | this.id = id; 63 | this.content = content; 64 | this.details = details; 65 | } 66 | 67 | @Override 68 | public String toString() { 69 | return content; 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_action_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_action_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_action_permissions.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_root.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_action_root.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_action_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_action_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_chart.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_info_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_info_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notifications_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_notifications_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_sync_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-hdpi/ic_sync_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_action_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_action_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_action_permissions.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_root.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_action_root.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_action_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_action_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_chart.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_info_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_info_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notifications_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_notifications_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_sync_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-mdpi/ic_sync_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_green_tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-v21/ic_green_tick.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_info_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_launcher_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-v21/ic_launcher_new.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_camera.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_gallery.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_manage.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_send.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_slideshow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_notifications_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_sync_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_action_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_action_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_action_permissions.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_root.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_action_root.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_action_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_chart.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_info_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_info_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notifications_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_notifications_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_sync_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xhdpi/ic_sync_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_action_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_action_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_action_permissions.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_root.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_action_root.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_action_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_chart.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_cpu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_cpu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_donut_small_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_donut_small_white_48dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_info_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_info_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notifications_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_notifications_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_ram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_ram.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_sync_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxhdpi/ic_sync_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxxhdpi/ic_chart.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_info_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxxhdpi/ic_info_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_notifications_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxxhdpi/ic_notifications_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_sync_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/drawable-xxxhdpi/ic_sync_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/side_nav_bar.xml: -------------------------------------------------------------------------------- 1 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/ic_launcher_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhi-r3v0/Rudhra/7f82abf4528be9cb2feada3d84702b5135c6fb89/app/src/main/res/ic_launcher_new.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_about_us.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 |