爱加密 linux,解决爱加密加固之后使用xposed hook的时候log打印不出来的问题

编程入门 行业动态 更新时间:2024-10-11 07:30:55

爱加密 linux,解决爱加密加固之后使用xposed hook的时候log打印<a href=https://www.elefans.com/category/jswz/34/1756892.html style=不出来的问题"/>

爱加密 linux,解决爱加密加固之后使用xposed hook的时候log打印不出来的问题

最近在爱加密加固之后,用xposed去打印日志,开始用log.i一直打不出来,以为是插件有问题,后来才发现爱加密加固之后只有Log.e才能够打出日志。虽然Log.e打日志也可以,但是作为重度强迫症患者,一堆错误的日志看得很头疼

猜测

我试着用dlsym去调用Log在native层对应的方法android_util_Log_println_native,以及在其中调用的__android_log_buf_write方法直接去写日志,发现并不能够吧日志写出了,所以爱加密应该劫持了这些函数,并且在不是错误日志的时候都不把日志打出来

Log的原理

你可以跟踪log的源码,然后分析其原理,其实打印日志就是对/dev/log/下面的设备文件进行操作,在Log的d,i,v,w,e这些方法中都是写到/dev/log/main这个文件里面的。我们先简单分析一下源码

首先是java层的代码代码位置在frameworks\base\core\java\android\util\Log.java。我们可以发现,打印日志最终都是调用的这个native方法...

public static int i(String tag, String msg) {

return println_native(LOG_ID_MAIN, INFO, tag, msg);

}

...

/** @hide */ public static native int println_native(int bufID,

int priority, String tag, String msg);

我们看这个native方法实现的地方,在安卓源码的frameworks\base\core\jni\android_util_Log.cpp这个位置,在这个里面,发现就只是调用了__android_log_buf_write这个方法来打印日志,前面做了一些判断/*

* In class android.util.Log:

*  public static native int println_native(int buffer, int priority, String tag, String msg)

*/

static jint android_util_Log_println_native(JNIEnv* env, jobject clazz,

jint bufID, jint priority, jstring tagObj, jstring msgObj)

{

const char* tag = NULL;

const char* msg = NULL;

if (msgObj == NULL) {

jniThrowNullPointerException(env, "println needs a message");

return -1;

}

if (bufID = LOG_ID_MAX) {

jniThrowNullPointerException(env, "bad bufID");

return -1;

}

if (tagObj != NULL)

tag = env->GetStringUTFChars(tagObj, NULL);

msg = env->GetStringUTFChars(msgObj, NULL);

int res = __android_log_buf_write(bufID, (android_LogPriority)priority, tag, msg);

if (tag != NULL)

env->ReleaseStringUTFChars(tagObj, tag);

env->ReleaseStringUTFChars(msgObj, msg);

return res;

}

接下来我们继续跟踪到__android_log_buf_write方法定义的位置,在安卓源码的system\core\liblog\logd_write.c中,这里在前面讲log的等级以及tag和log的消息装在一个结构体数组里面,然后调用了write_to_log打印日志int __android_log_buf_write(int bufID, int prio, const char *tag, const char *msg)

{

struct iovec vec[3];

char tmp_tag[32];

if (!tag)

tag = "";

/* XXX: This needs to go! */

if ((bufID != LOG_ID_RADIO) &&

(!strcmp(tag, "HTC

更多推荐

爱加密 linux,解决爱加密加固之后使用xposed hook的时候log打印不出来的问题

本文发布于:2024-02-11 16:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1681922.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不出来   xposed   linux   log   hook

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!