diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 00000000..ba915e0d Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java index 64102573..1ec4021e 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java @@ -1,33 +1,56 @@ package com.gmeremit.online.gmeremittance_native.splash_screen.presenter; +import android.os.Handler; + import com.gmeremit.online.gmeremittance_native.base.BasePresenter; +import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; import com.gmeremit.online.gmeremittance_native.splash_screen.gateway.SplashScreenGateway; import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel; +import com.gmeremit.online.gmeremittance_native.utils.security.SignatureCheck; +import com.scottyab.rootbeer.RootBeer; import java.util.List; public class SplashScreenPresenter extends BasePresenter implements SplashScreenPresenterInterface, SplashScreenInteractorInterface { private final SplashScreenInteractorInterface.SplashScreenGatewayInterface gateway; + private RootBeer rootBeer; private SplashScreenContractInterfacee view; private List languageModels; public SplashScreenPresenter(SplashScreenContractInterfacee view) { this.view = view; this.gateway = new SplashScreenGateway(this); + rootBeer = new RootBeer(view.getContext()); } @Override public void checkIfUserHasSession() { - String result = this.gateway.checkSession(); - if (result != null && result.equalsIgnoreCase("HOME")) { - this.view.proceedToDashboardScreen(); - } else - { - if (this.languageModels == null || this.languageModels.size() <1) - this.languageModels=this.gateway.getRelatedLanguageData(); + if (checkSafety()) { + String result = this.gateway.checkSession(); + if (result != null && result.equalsIgnoreCase("HOME")) { + this.view.proceedToDashboardScreen(); + } else { + if (this.languageModels == null || this.languageModels.size() < 1) + this.languageModels = this.gateway.getRelatedLanguageData(); this.view.updateLanguageData(languageModels); + } + } + } + + private boolean checkIfAppSafe() { + boolean isSafe = false; + try { + isSafe = new SignatureCheck().validateAppSignature(view.getContext()); + } catch (Exception e) { + e.printStackTrace(); + isSafe = false; } + return isSafe; + } + + private boolean hasRootAccess() { + return rootBeer.isRootedWithoutBusyBoxCheck(); } @Override @@ -36,4 +59,20 @@ public class SplashScreenPresenter extends BasePresenter implements SplashScreen this.gateway.updatePreferredLanguageToStorage(selectedLanguage.getCountryName()); } + @Override + public boolean checkSafety() { + if (hasRootAccess() || checkIfAppSafe()) { + view.showPopUpMessage("Access Denied", CustomAlertDialog.AlertType.ALERT, null); + new Handler().postDelayed(() -> view.exitView(), 1500); + return false; + } + else + return true; + } + + @Override + public void onViewDestroyed() { + super.onViewDestroyed(); + rootBeer = null; + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenterInterface.java index 7a3452dd..9b072fee 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenterInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenterInterface.java @@ -1,5 +1,7 @@ package com.gmeremit.online.gmeremittance_native.splash_screen.presenter; +import android.content.Context; + import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface; import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel; @@ -12,6 +14,7 @@ public interface SplashScreenPresenterInterface extends BasePresenterInterface { void updatePreferredLanguage(LanguageModel selectedLanguage); + boolean checkSafety(); interface SplashScreenContractInterfacee extends BaseContractInterface { @@ -19,6 +22,7 @@ public interface SplashScreenPresenterInterface extends BasePresenterInterface { void updateLanguageData(List languageModels); + Context getContext(); } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java index 77ca82dc..46070bd3 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java @@ -2,6 +2,7 @@ package com.gmeremit.online.gmeremittance_native.splash_screen.view; import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Paint; @@ -123,13 +124,13 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener, private void performDefaultAction(Bundle savedInstanceState) { if (savedInstanceState == null) { languageViewTransitionManager.underlineTitleText(true); - this.presenter.checkIfUserHasSession(); +// this.presenter.checkIfUserHasSession(); } } private void init() { presenter=new SplashScreenPresenter(this); - + startAntiDebugger(); languageViewTransitionManager = new LanguageViewTransitionManager(this); layouts = new int[]{ R.layout.fragment_splash_one, @@ -220,6 +221,7 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener, @Override protected void onResume() { super.onResume(); + this.presenter.checkIfUserHasSession(); } @@ -251,6 +253,11 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener, languageSelectionRVAdapter.setData(languageModels); } + @Override + public Context getContext() { + return this; + } + public class ViewPagerAdapter extends PagerAdapter { private LayoutInflater layoutInflater; @@ -421,5 +428,17 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener, } + static { + System.loadLibrary("ptracemonitor-lib"); + } + + public native void antiDebugCheck(); + + private void startAntiDebugger() { + boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)); + if (isDebuggable) + antiDebugCheck(); + } + }