Skip to content

Instantly share code, notes, and snippets.

@FrankSpierings
Created July 29, 2024 09:34
Show Gist options
  • Save FrankSpierings/3a6f38f7dbff641bc3c3fd3e78c905f1 to your computer and use it in GitHub Desktop.
Save FrankSpierings/3a6f38f7dbff641bc3c3fd3e78c905f1 to your computer and use it in GitHub Desktop.
Android - MASTG-TEST-0006 - Frida help script
Java.perform(function() {
var TextView = Java.use("android.widget.TextView");
// Constants for InputType flags
var TYPE_CLASS_TEXT = 0x00000001;
var TYPE_CLASS_NUMBER = 0x00000002;
var TYPE_CLASS_PHONE = 0x00000003;
var TYPE_CLASS_DATETIME = 0x00000004;
var TYPE_TEXT_VARIATION_PASSWORD = 0x00000080;
var TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 0x00000090;
var TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 0x00000020;
var TYPE_TEXT_VARIATION_URI = 0x00000010;
// Function to get the input type name based on flags
function getInputTypeName(inputType) {
var typeName = [];
// Check the base class type
switch (inputType & 0x0000000f) {
case TYPE_CLASS_TEXT:
typeName.push("TYPE_CLASS_TEXT");
break;
case TYPE_CLASS_NUMBER:
typeName.push("TYPE_CLASS_NUMBER");
break;
case TYPE_CLASS_PHONE:
typeName.push("TYPE_CLASS_PHONE");
break;
case TYPE_CLASS_DATETIME:
typeName.push("TYPE_CLASS_DATETIME");
break;
default:
typeName.push("UNKNOWN_CLASS");
}
// Check the variation type
if (inputType & TYPE_TEXT_VARIATION_PASSWORD) {
typeName.push("TYPE_TEXT_VARIATION_PASSWORD");
}
if (inputType & TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
typeName.push("TYPE_TEXT_VARIATION_VISIBLE_PASSWORD");
}
if (inputType & TYPE_TEXT_VARIATION_EMAIL_ADDRESS) {
typeName.push("TYPE_TEXT_VARIATION_EMAIL_ADDRESS");
}
if (inputType & TYPE_TEXT_VARIATION_URI) {
typeName.push("TYPE_TEXT_VARIATION_URI");
}
// Join the type names with " | "
return typeName.join(" | ");
}
TextView.setInputType.overload('int').implementation = function(inputType) {
// Get the class name and method name
var className = this.getClass().getName();
var methodName = "setInputType";
// Call the original setInputType method
this.setInputType(inputType);
// Get the view ID and resource name
var viewId = this.getId();
var viewIdName = "unknown";
try {
var context = this.getContext();
viewIdName = context.getResources().getResourceEntryName(viewId);
} catch (e) {
// Handle any errors (e.g., when ID not found)
}
// Get the text content of the TextView, if available
var textContent = this.getText() ? this.getText().toString() : "no text";
// Get the input type name using flags
var inputTypeName = getInputTypeName(inputType);
// Log the details
console.log("Class: " + className + ", Method: " + methodName + ", InputType: " + inputTypeName + " (" + inputType + "), ViewId: " + viewId + " (" + viewIdName + "), Text: " + textContent);
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment