安卓破解之log信息输出开关

  1. <span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">前言</span>
首先是在鬼哥的群里听到好友淡然提起log打印信息的开关。淡然博客http://blog.csdn.net/zihao2012?viewmode=contents
在分析安卓程序的时候,经常使用DDMS的logcat信息输出,来查看程序的信息输出。首先log信息输出可以很方便的查看软件执行的流程,或者软件在某个时刻执行到某个关键地点,这也是程序员在开发这种常用的的方法,但是程序在发布的时候程序员都会把log信息输出的开关关掉。
下是我遇到的两种方法:
1.请看如下代码,反编译jad查看的
public class Log
{
  public static boolean LOG = false;//默认的是关闭

  public static void a(String paramString1, String paramString2)
  {
    if (LOG)//每次使用的时候都会判断开光是否打开
      android.util.Log.i(paramString1, paramString2);
  }

  public static void a(String paramString1, String paramString2, Exception paramException)
  {
    if (LOG)
      android.util.Log.i(paramString1, paramException.toString() + ":  [" + paramString2 + "]");
  }

  public static void b(String paramString1, String paramString2)
  {
    if (LOG)
      android.util.Log.e(paramString1, paramString2);
  }

  public static void b(String paramString1, String paramString2, Exception paramException)
  {
    if (LOG)
    {
      android.util.Log.e(paramString1, paramException.toString() + ":  [" + paramString2 + "]");
      for (StackTraceElement localStackTraceElement : paramException.getStackTrace())
        android.util.Log.e(paramString1, "        at\t " + localStackTraceElement.toString());
    }
  }

  public static void c(String paramString1, String paramString2)
  {
    if (LOG)
      android.util.Log.d(paramString1, paramString2);
  }

  public static void c(String paramString1, String paramString2, Exception paramException)
  {
    if (LOG)
      android.util.Log.d(paramString1, paramException.toString() + ":  [" + paramString2 + "]");
  }

  public static void d(String paramString1, String paramString2)
  {
    if (LOG)
      android.util.Log.v(paramString1, paramString2);
  }

  public static void d(String paramString1, String paramString2, Exception paramException)
  {
    if (LOG)
      android.util.Log.v(paramString1, paramException.toString() + ":  [" + paramString2 + "]");
  }

  public static void e(String paramString1, String paramString2)
  {
    if (LOG)
      android.util.Log.w(paramString1, paramString2);
  }

  public static void e(String paramString1, String paramString2, Exception paramException)
  {
    if (LOG)
    {
      android.util.Log.w(paramString1, paramException.toString() + ":  [" + paramString2 + "]");
      for (StackTraceElement localStackTraceElement : paramException.getStackTrace())
        android.util.Log.w(paramString1, "        at\t " + localStackTraceElement.toString());
    }
  }
}
上面的第一种 只要把false改为true即可。即可看log打印信息
2. 信息代码被删除输出被

看到这个 会调用b类中的e方法 进行信息输出 (是否为信息输出自己要判断)
我们来到b类中看到,方法的内用为空,这个时候就要我们自己添加代码

可以看到每个方法的参数都是字符(废话了)
然后再smali代码中  (我们用上面的b方法为例子)
可以尝试添加 以下代码 就ok了
.method public static b(Ljava/lang/String;Ljava/lang/String;)V
    .locals 0
invoke-static {p0, p1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    return-void
.end method

暂时性的只是在smali层 这两中方法吧
如有错误希望大神赐教奋斗
<pre name="code" class="javascript">
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值