Skip to content

Instantly share code, notes, and snippets.

@ccentauri
Created February 12, 2019 11:29
Show Gist options
  • Save ccentauri/7a54da2d520c22d4bec381123c7587f1 to your computer and use it in GitHub Desktop.
Save ccentauri/7a54da2d520c22d4bec381123c7587f1 to your computer and use it in GitHub Desktop.
std::vector<std::string> security_check::HookingSecurityChecker::getJniStackTrace() {
jclass jThrowable = env->FindClass("java/lang/Throwable");
jmethodID jThrowableConstructor = env->GetMethodID(jThrowable, "<init>", "()V");
jmethodID jThrowableGetStackTrace = env->GetMethodID(jThrowable, "getStackTrace",
"()[Ljava/lang/StackTraceElement;");
jobject jThrowableObject = env->NewObject(jThrowable, jThrowableConstructor);
jobjectArray jStackTraceArray = (jobjectArray) env->CallObjectMethod(jThrowableObject, jThrowableGetStackTrace);
env->DeleteLocalRef(jThrowableObject);
return explodeString(transformStackTraceIntoString(jStackTraceArray), '\n');
}
std::string security_check::HookingSecurityChecker::transformStackTraceIntoString(jobjectArray jStackTraceArray) {
jobject jStackTraceElementInLoop;
std::string jniStackTrace = "";
jstring jStackTraceElementInLoopToString;
jclass jStackTraceElement = env->FindClass("java/lang/StackTraceElement");
jmethodID jStackTraceElementToString = env->GetMethodID(jStackTraceElement, "toString", "()Ljava/lang/String;");
for (int i = 0; i < env->GetArrayLength(jStackTraceArray); i++) {
jStackTraceElementInLoop = env->GetObjectArrayElement(jStackTraceArray, i);
jStackTraceElementInLoopToString = (jstring) env->CallObjectMethod(jStackTraceElementInLoop,
jStackTraceElementToString);
jniStackTrace.append(env->GetStringUTFChars(jStackTraceElementInLoopToString, 0)).append("\n");
}
return jniStackTrace;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment