热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

防止android代码注入的方法

android的.registers定义了方法中总共使用了几个寄存器;.locals定义了方法中有几个非参数寄存器;如果一个方法有5个寄存器࿰
android的.registers 定义了方法中总共使用了几个寄存器;.locals定义了方法中有几个非参数寄存器;如果一个方法有5个寄存器,即.registers==5,v0-v4,而且该方法有两个参数,那么这两个参数将使用最后的两个寄存器,即v3和v4。对于非static方法,那么第一个寄存器肯定是this,比如方法LMyObject;->callMe(II)V有两个整形参数,那么它就会用三个寄存器。
为了动态调试android代码,有时候需要动态的注入代码,但是,代码注入时候,有几次发现会崩溃,后来,经过研究,发现是寄存器用错。一个方法可能本身就用了5个寄存器,v0-v4,而你用v5,那肯定要崩溃,是吧!或者你用了后面会用到的寄存器,把值给改了,那肯定也要崩溃。具体大家可以看看下面的文章:见 http://code.google.com/p/smali/wiki/Registers:
有点像stdcall的压栈形式。说白了就是,比如有个方法:void method(arg1, arg2){     int i;    i = arg1+arg2;
}那么method函数就要用三个寄存器,如果采用V模式来使用寄存器,那么就是:i == v0;arg1 == v1;arg2 == v2;
如果是p模式使用寄存器,那么就是:i == v0;arg1 == p0;arg2 == p1;
下面两个重载函数:public int Add(int i,int j)C#委托和Lambda表达式的学习
    {
        int k = 0;
        k = i+j;
        return k;
    }
    public int Add(int i,int j,int k )
    {
        int m = 0,n = 0;
        m = i+j;
        n = m+k;
        return n;
    }对应的smali码:# virtual methods
.method public Add(II)I
    .locals 1
    .parameter "i"
    .parameter "j"

    .prologue
    .line 44
    const/4 v0, 0x0
    

    .line 45
    .local v0, k:I
    add-int v0, p1, p2
    .line 46
    return v0
.end method

.method public Add(III)I
    .locals 2
    .parameter "i"
    .parameter "j"
    .parameter "k"

    .prologue
    .line 50
    const/4 v0, 0x0

    .local v0, m:I
    const/4 v1, 0x0tp-link 941n v2设置samba密码教程
    .line 51
    .local v1, n:I
    add-int v0, p1, p2

    .line 52
    add-int v1, v0, p3

    .line 53
    return v1
.end method说明,我们要注入代码,要使用寄存器的话,可以增加local,然后,方便的用多出来的就行了,关键是要开启P模式。

转:https://www.cnblogs.com/ctou45/archive/2011/09/05/2167671.html



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有