Smali插桩打日志

一、smali目录下新建crack.smali,内容如下:

.class public Lcrack;
.super Ljava/lang/Object;
.source "crack.java" 

.method public static log1(Ljava/lang/String;)V #打印出info 1字符串
    .locals 1
    .prologue 

    const-string v0, "crack_log_str"
    invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    return-void
.end method 

.method public static I(I)V   #打印出int型值
    .locals 2
    .prologue
    const-string v0, "crack_log_int"

    invoke-static {p0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; 

    move-result-object v1
    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    return-void
.end method

.method public static J(J)V #打印出long类型的值
.locals 2
.prologue

const-string v0, "crack_log_long"
invoke-static {p0, p1}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; 

move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method

二、使用方法(打印String):

invoke-static {v1}, Lcrack;->log1(Ljava/lang/String;)V

三、有时日志太多,要写入文件分析:

.class public Lcrack2;
.super Ljava/lang/Object;
.source "crack2.java"
.method public static puts(Ljava/lang/String;)V
    .locals 7
    .prologue

    :try_start_0

    const-string v3, "/sdcard/crack/debug.log"
    new-instance v2, Ljava/io/FileOutputStream;

    const/4 v5, 0x1
    invoke-direct {v2, v3, v5}, Ljava/io/FileOutputStream;-><init>(Ljava/lang/String;Z)V

    .line 19
    new-instance v4, Ljava/io/OutputStreamWriter;
    const-string v5, "gb2312"
    invoke-direct {v4, v2, v5}, Ljava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;Ljava/lang/String;)V

    .line 21
    invoke-virtual {v4, p0}, Ljava/io/OutputStreamWriter;->write(Ljava/lang/String;)V
    const-string v5, "\r\n"
    invoke-virtual {v4, v5}, Ljava/io/OutputStreamWriter;->write(Ljava/lang/String;)V

    .line 23
    invoke-virtual {v4}, Ljava/io/OutputStreamWriter;->flush()V

    .line 25
    invoke-virtual {v4}, Ljava/io/OutputStreamWriter;->close()V

    .line 27
    invoke-virtual {v2}, Ljava/io/FileOutputStream;->close()V
    :try_end_0
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0

    .line 37
    :cond_0
    :goto_0
    return-void

    .line 30
    :catch_0
    move-exception v0

     .line 34
    const-string v5, "debug"
    const-string v6, "file write error"
    invoke-static {v5, v6}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I 

    goto :goto_0
.end method

 #使用方法:invoke-static {vx}, Lcrack2;->puts(Ljava/lang/String;)V
时间: 2024-08-08 22:06:08

Smali插桩打日志的相关文章

关于smali插桩

????虽说是老生常谈的东西了,稍微记录一下. ????我觉得最重要的就是寄存器的问题了,如果需要额外的寄存器,要在smali函数的最前面将寄存器数量增加到需要的数量. ????在smali代码中,寄存器有两种表示方式,一种是v命名法,一种是p命名法.在v命名法中,从v0开始依次表示局部变量和参数.在p命名法中,从p0开始表示参数,从v0开始表示局部变量.以p命名法为例,在smali函数的开头,.locals n则表示可以使用v0到vn-1表示局部变量,因此如果插桩的时候需要额外的寄存器,则将.

zorka源码解读之通过beanshell进行插桩的流程

zorka中插桩流程概述 1.在SpyDefinition中配置插桩属性,将SpyDefinition实例提交给插桩引擎.2.SpyDefinition实例中包含了插桩探针probes,probe插入到方法中,对方法的执行进行监控.方法的插入阶段主要包括三个:开始阶段(entry),返回阶段(return),异常阶段(error).每个probe会根据其指定的阶段对方法插桩,捕获其中的数据,比如当前时间.方法参数.方法内部的变量等.probe捕获的数据会封装为SpyRecord实例(Symbol

介绍自己的一个Android插桩热修复框架项目QuickPatch

QuickPatch项目地址:https://gitee.com/egg90/QuickPatch 和 https://github.com/eggfly/QuickPatch 同步更新 类似于美团的Robust插桩热修复,但是代码可读性比较强,还在继续完善,todo list在项目README里 特性:基于函数插桩,兼容性好(Android版本升级不需要做修改),支持热更新无需重启app,参考了美团的Robust插桩热修复框架,精简了很多实现细节,代码可读性高 一句话原理 简单地讲,就是通过编

ASM字节码插桩

个人博客 http://www.milovetingting.cn ASM字节码插桩 前言 热修复的多Dex加载方案中,对于5.0以下的系统存在CLASS_ISPREVERIFIED的问题,而解决这个问题的一个方案是:通过ASM插桩,在类的构造方法里引入一个其它dex里的类,从而避免被打上CLASS_ISPREVERIFIED标签.热修复可以参考其它资料或者前面写的一篇文章.本文主要介绍ASM插桩,主要参考 https://juejin.im/post/5c6eaa066fb9a049fc042

Javsssist用InsertAt()方法对语句插桩

基于上一篇的方法插桩,这一篇则是进一步的对每行的语句进行插桩. 对于存在分支的方法(例如if(){}else{}),对方法插桩的方法是不能够全部涉及到的.所以要对程序的每条语句进行插桩. 插入什么语句呢?可以插入包括以下的内容: 1‘ classname 2’ linenumber 此时需要用到javassist  api里的类CtMethod的方法insertAt(),对程序的每条语句进行插桩. 逻辑思想就是:读取class文件,对类的方法进行获取,读取每个类的行号范围,在每个行号前用inse

Javassist进行方法插桩

javassist官网 http://jboss-javassist.github.io/javassist/ javassist API网 http://jboss-javassist.github.io/javassist/html/index.html javassist参考博客 https://www.ibm.com/developerworks/cn/java/j-dyn0916/  Ⅰ插桩 自动用例生成(使用Randoop) 评价(对用例筛选冗余)>功能覆盖.语句覆盖(一般用后者)

【工具推荐】ELMAH——可插拔错误日志工具

ELMAH 是 Error Logging Modules and Handlers for ASP.NET 的缩写.ELMAH可以让你记录下你的网站发生的任何一个错误,在将来,你可以重新检查这些错误.你可以从ELMAH项目的官方网站免费下载ELMAH:http://code.google.com/p/elmah/. ELMAH既支持ASP.NET Web Forms 又支持 ASP.NET MVC.你可以对ELMAH进行配置来存储各种不同的错误(XML文件,事件日志,Access数据库,SQL

红米3 Flyme5.1.7.4插桩适配更新

ROM介绍: 1.基于xda论坛CM12.1 20160612版本适配. 2.更新最新Flyme源码至2016年7月4日. 3.修复本地音乐FC,视频FC,手机管家FC,频繁的随机重启. 4.精简部分无用自带,未添加任何推广. 5.暂无其他BUG. ROM下载地址: 链接: http://pan.baidu.com/s/1i5qCUrj 密码: wgbi 第三方刷机REC(TWRP 3.0.2): http://pan.baidu.com/s/1qXX1NCo ROOT单刷卡刷包(SuperSU

安卓动态调试七种武器之长生剑 - Smali Instrumentation

安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中(共7篇)分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 0x01 长生剑 长生剑是把神奇的剑,为白玉京所配,剑名取