关于smali插桩
虽说是老生常谈的东西了,稍微记录一下。
我觉得最重要的就是寄存器的问题了,如果需要额外的寄存器,要在smali函数的最前面将寄存器数量增加到需要的数量。
在smali代码中,寄存器有两种表示方式,一种是v命名法,一种是p命名法。在v命名法中,从v0开始依次表示局部变量和参数。在p命名法中,从p0开始表示参数,从v0开始表示局部变量。以p命名法为例,在smali函数的开头,.locals n则表示可以使用v0到vn-1表示局部变量,因此如果插桩的时候需要额外的寄存器,则将.locals n 表示为.locals n+1就可以在插桩的代码中使用vn了。
我自己写了一个用来log的smali代码,将其放入backsmali后的代码中,并在需要Log的地方调用相应的代码,最后重新打包,运行后就能看到加入的log信息了。
.class public Liie/wah/smlinject;
.super Ljava/lang/Object;
.source "smlinject.java"
.method public constructor <init>()V
.registers 1
.prologue
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static logString(Ljava/lang/String;)V
.locals 1
.prologue
const-string v0, "WAH"
invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static logBool(Ljava/lang/Boolean;)V
.locals 2
.prologue
const-string v0, "WAH"
invoke-static {p0}, Ljava/lang/Boolean;->toString(Z)Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static logInt(I)V
.locals 2
.prologue
const-string v0, "WAH"
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
在需要加入log的地方,如下调用就可以了。
关于smali插桩的更多相关文章
- Smali插桩打日志
一.smali目录下新建crack.smali,内容如下: .class public Lcrack; .super Ljava/lang/Object; .source "crack.ja ...
- APK修改神器:插桩工具 DexInjector
本文介绍了一个针对Dex进行插桩的工具,讲解了一下直接修改Dalvik字节码和Dex文件时遇到的问题和解决方法 作者:字节跳动终端技术-- 李言 背景 线下场景中,我们经常需要在APK中插入一些检测代 ...
- Flymeos插桩适配教程
插桩适配前提,安装Ubuntu或者其他linux系统. 安装JDK7 sudo apt--jdk Ubuntu 16.04与基于它的版本,需要添加源 sudo add-apt-repository p ...
- zorka源码解读之通过beanshell进行插桩的流程
zorka中插桩流程概述 1.在SpyDefinition中配置插桩属性,将SpyDefinition实例提交给插桩引擎.2.SpyDefinition实例中包含了插桩探针probes,probe插入 ...
- Javassist进行方法插桩
javassist官网 http://jboss-javassist.github.io/javassist/ javassist API网 http://jboss-javassist.github ...
- Javsssist用InsertAt()方法对语句插桩
基于上一篇的方法插桩,这一篇则是进一步的对每行的语句进行插桩. 对于存在分支的方法(例如if(){}else{}),对方法插桩的方法是不能够全部涉及到的.所以要对程序的每条语句进行插桩. 插入什么语句 ...
- 插桩 inline hook 动态二进制插桩的原理和基本实现过程
插桩测试 https://source.android.google.cn/compatibility/tests/development/instrumentation https://zhuanl ...
- Java Instrumentation插桩技术学习
Instrumentation基础 openrasp中用到了Instrumentation技术,它的最大作用,就是类的动态改变和操作. 使用Instrumentation实际上也可以可以开发一个代理来 ...
- LLVM程序分析日记之插桩BranchInst
1. splitblockandinsertifthenelse() 一个代码例子:StackOverflow 2. SplitBlockAndInsertIfThen() 或者仅仅想插桩if the ...
随机推荐
- 使用lock_sga和pre_page_sga参数保证SGA常驻物理内存 .
Lock_sga LOCK_SGA locks the entire SGA into physical memory. It is usually advisable to lock the SGA ...
- java学习之数据库
第一部分:DB2基础知识 一.复习 jre jdk jvm path classpath 二.数据库基础-DB2 1.访问172.22.602.24/ temp 123 2.安装检查 db2cmd d ...
- JavaScript类的设计
[转载] Javascript与其他的面向对象语言不同,如C++,Java或PHP等.它并不是基于类的,而是基于原型的一种语言. 1.对象创建 在Javascript中创建一个类是非常容易的: var ...
- ScriptManager需要用到的JS
<script type="text/javascript"> Sys.Application.add_load(function() { var form = Sys ...
- dojo.declare
参考:http://www.ibm.com/developerworks/cn/web/1203_xiejj_dojodeclare/
- JS中表格的全选和删除要注意的问题
在项目开发中,由于刚刚开始做项目,我对js还不是很精通,所以在用js对表格的全选和删除中遇到了不少问题,后来通过查找资料解决了,之后总结了一下关于js表格的全选和删除出现的一些问题,希望能帮助到大家. ...
- [Linked List]Partition List
Total Accepted: 53879 Total Submissions: 190701 Difficulty: Medium Given a linked list and a value x ...
- TableLayout属性
整理于http://naotu.baidu.com/file/e5880b84b1a906838116f7a45f58de78
- node.js中favicon.ico请求两次问题
var http=require("http"); var server=http.createServer(); server.on("request",fu ...
- paul的cnblog,欢迎大家的光临
我会在blog里面分享各种资源,技术文章,大家多多交流,欢迎拍砖.