当前位置 : 主页 > 网络编程 > 其它编程 >

防止android代码注入的方法

来源:互联网 收集:自由互联 发布时间:2023-07-02
android的.registers定义了方法中总共使用了几个寄存器.locals定义了方法中有几个非参数寄存器如果一个方法有5个寄存器.locals定义了方法中有几个非参数寄存器如果一个方法有5个寄存器即
android的.registers定义了方法中总共使用了几个寄存器.locals定义了方法中有几个非参数寄存器如果一个方法有5个寄存器.locals定义了方法中有几个非参数寄存器如果一个方法有5个寄存器即.registers5,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  arg1arg2;}那么method函数就要用三个寄存器如果采用V模式来使用寄存器那么就是i  v0arg1  v1arg2  v2如果是p模式使用寄存器那么就是i  v0arg1  p0arg2  p1下面两个重载函数public int Add(int i,int j)C#委托和Lambda表达式的学习    {        int k  0;        k  ij;        return k;    }    public int Add(int i,int j,int k )    {        int m  0,n  0;        m  ij;        n  mk;        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

上一篇:Netty:入门(1)
下一篇:没有了
网友评论