Android...

程序员自我修养之逆向工程开发学习中

2022-02-21  本文已影响0人  巴菲伟

一、dalvik字节码学习

    1. 寄存器的命名     

        v: 局部变量寄存器,v0-vn ,  变量寄存器: v0-vn

        p: 参数寄存器, p0-pn

    2.得到samli文件流程

         .java ---> .class ---> .dex ----> smali        

    3. dalvil 字节码类型

         B : byte

         C : char

        S : short

        I :  int

        J : long

        F : float

        D : double

        Z : boolean

        V : void

        L : java类类型,也就是类型

        [ :  数组类型

    4. dalvil指令集

        wide : 标识指令操作数据宽度为64位

        from16 : 表示源寄存器为16位

        nod : 空操作指令,它的值为00。用来指令对齐,无实际作用和空格类似

        move : 数据操作指令

        exp :   vA(4位数值)     vAA(8位数值)     vAAAA(16位数值)

                Move vA,vB :  将vB寄存器的数值给vA寄存器

                Move/form16 vA,vB : 

        return void : 表示函数从void方法返回,返回值为空。

        return vAA : 表示函数返回一个32位非对象的值,返回寄存器为8位

        return-wide vAA : 返回一个64位非对象类型数值,返回寄存器为8位

        return-object vAA : 返回一个对象类型的值,返回寄存器为8位

        new-instance :  实例化一个对象

        invoke-direct : 调用实例化对应的方法

        invoke-virtual : 

        supt-object :  

        check-cast : 将寄存器对象引用转换为指定类型

        instace-of : 寄存器中的对象是否转为成指定类型

        goto : 无条件跳转

        switch : 分支跳转

        if : 条件跳转

    5.smail文件学习详解

         .registers :  寄存器的总数,这个数量是参数和本地变量总和

         .param : 表明方法的参数,每个.param指令表示一个参数,方法使用几个参数就有几个.paramter指令        

         .prologue : 指定代码的开始处,混淆代码可能去掉该指令

         .line : 指定源代码的行号,混淆后代码可能去掉行号

         .locals : 表示局部变量寄存器的总个数

         .local : 表明方法中非寄存器

Android killer ———  AndroidCrackTool (Mac)

PKID ———> 查看是否加壳

IDA ———> 分析.so库文件

JEB : 动态调试java层代码

WinHex : 修改so库软件

Xposed框架开发

CydiaSubstrate框架

Frida框架

ADBI框架

ELFARM HOOK框架

JVMTI : 有时间学习一下,内存分配坚听

上一篇 下一篇

猜你喜欢

热点阅读