This sample demonstrates the detection of StrictMode uses at runtime using Frida. The app enables a StrictMode policy to detect leaked SQLite objects and intentionally leaves a cursor unclosed to trigger the policy.
packageorg.owasp.mastestappimportandroid.content.Contextimportandroid.database.sqlite.SQLiteDatabaseimportandroid.os.StrictModeclassMastgTest(privatevalcontext:Context){funmastgTest():String{enableStrictMode()triggerSqliteCursorLeak()System.gc()//Forcegarbagecollectiontotriggerleakdetectionreturn"SUCCESS!!\n\nSQL Cursor leaked."}privatefunenableStrictMode(){StrictMode.setVmPolicy(StrictMode.VmPolicy.Builder().detectLeakedClosableObjects()//Detectleaked/unclosedSQLiteobjects.penaltyLog()//Logviolations.build())}privatefuntriggerSqliteCursorLeak(){valdb:SQLiteDatabase=context.openOrCreateDatabase("test.db",Context.MODE_PRIVATE,null)db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")db.execSQL("INSERT INTO users (name) VALUES ('Alice'), ('Bob')")//Createcursor,andintentionallydonotcloseitvalcursor=db.rawQuery("SELECT * FROM users",null)}}
Java.perform(()=>{// Function to print backtrace with a configurable number of lines (default: 8)functionprintBacktrace(maxLines=8){letException=Java.use("java.lang.Exception");letstackTrace=Exception.$new().getStackTrace().toString().split(",");console.log("\nBacktrace:");for(leti=0;i<Math.min(maxLines,stackTrace.length);i++){console.log(stackTrace[i]);}}// Hook StrictMode.setVmPolicyletStrictMode=Java.use('android.os.StrictMode');StrictMode.setVmPolicy.implementation=function(policy){console.log("\n[*] StrictMode.setVmPolicy() called\n");// Java stack traceprintBacktrace();console.log("Policy: "+policy);this.setVmPolicy(policy);};// Hook StrictMode.VmPolicy.Builder.penaltyLogletVmPolicyBuilder=Java.use('android.os.StrictMode$VmPolicy$Builder');VmPolicyBuilder.penaltyLog.implementation=function(){console.log("\n[*] StrictMode.VmPolicy.Builder.penaltyLog() called\n");// Java stack traceprintBacktrace();returnthis.penaltyLog();};console.log("\n[+] Frida script loaded to detect StrictMode usage and penaltyLog calls.\n");});