0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

安卓如何逆向_Dalvik 寄存器,字節(jié)碼,指令格式 1

jf_78858299 ? 來(lái)源:dust安全隨記 ? 作者:dust ? 2023-01-30 16:24 ? 次閱讀

0x01 dalvik寄存器

32位,所有類(lèi)型,  <=32一個(gè)寄存器 
 64位:使用兩個(gè)相鄰寄存器

0x02 寄存器的命名法:

v:局部變量寄存器 v0-vn  參數(shù)寄存器 vn-vn+m
p:參數(shù)寄存器p0 -pn      變量寄存器 v0-vn

0x03 dex文件反匯編工具

.java編譯成.class在編譯成.dex 最后反編譯得到samli文件

.java -->.class -->.dex -->samli

dx.jar ----- .class打包.dex

dx --dex --output=Decrypt.dex com/xxx/xxx/Decrypt.class

Baksamli.jar------- .dex反編譯成 samli

java -jar baksmali.jar -o smali_out/class.dex

Samli.jar-----.smali打包成.dex

java -jar smali.jar smali_out/ -o classes.dex

0x04 dalvik字節(jié)碼類(lèi)型

Dalvik java
B byte
C char
S short
I int
J long
f float
D double
Z boolean
V void
L java類(lèi)類(lèi)型
[ 數(shù)組類(lèi)型

0x05 字段

表示的是成員變量

字段格式: 類(lèi)型(包名/類(lèi)名) ->字段名稱(chēng):字段類(lèi)型
Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;


相當(dāng)于


Package com.yjh


Class ObjectName{
  String FieldName;
}

0x05 方法

字段格式: 類(lèi)型(包名/類(lèi)名) ->方法名方法的簽名信息
Lpackage/name/ObjectName;->MethodName(III)Z


(III)Z:這部分表示方法的簽名信息


相當(dāng)于
Package com.yjh


Class ObjectName{
  public boolean MethodName(int a,int b ,int c){
  }
}

0x06 dalvik指令格式

基礎(chǔ)字節(jié)碼-名稱(chēng)后綴/字節(jié)后綴 目的寄存器 源寄存器

名稱(chēng)后綴是wide,表示數(shù)據(jù)寬度為64位

字節(jié)碼后綴是from16,表示源寄存器為16位

move-wide/from16 vAA,vBBBB


move   為基礎(chǔ)字節(jié)碼,即opcode
wide   為名稱(chēng)后綴,標(biāo)識(shí)指令操作的數(shù)據(jù)寬度為64from16 為字節(jié)后綴,標(biāo)識(shí)源為一個(gè)16位的寄存器引用變量
VAA    為目的寄存器,它始終在源寄存器簽名,取值范圍為v0-v255
VBBBB  為源寄存器,取值范圍v0-65535

Dalvik指令集中大多數(shù)指令用到了寄存器作為目的操作數(shù)活源操作數(shù),其中

A/B/C/D/E/F/G/H     代表一個(gè)四位的數(shù)值,
AA/BB/.../HH        代表一個(gè)8位的數(shù)值,
AAAA/BBBB/.../HHHH  代表一個(gè)16位的數(shù)值

0x06 dalvik指令

  1. 空操作指令
nop
空操作指令的助記符為nop。它的值為00,通常nop指令被用來(lái)做對(duì)齊碼使用,無(wú)實(shí)際操作
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120377
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32872
  • 安卓
    +關(guān)注

    關(guān)注

    5

    文章

    2130

    瀏覽量

    57202
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    [資料分享]+《Android軟件安全與逆向分析》

    不同的寄存器表示方法——v命名法與p命名法 42  3.2.5  Dalvik字節(jié)的類(lèi)型、方法與字段表示方法 43  3.3  Dalvik
    發(fā)表于 09-26 10:53

    寄存器與匯編指令

    逆向學(xué)習(xí)筆記3——寄存器與匯編指令
    發(fā)表于 05-07 16:40

    間接尋址及地址寄存器指令

    間接尋址及地址寄存器指令
    發(fā)表于 08-12 11:59 ?19次下載

    寄存器尋址方式

    寄存器尋址方式   寄存器尋址是對(duì)由指令選定的工作寄存器(R0--R7)進(jìn)行讀/寫(xiě),由指令操作碼
    發(fā)表于 03-14 15:29 ?2809次閱讀

    寄存器Load/Store內(nèi)存訪(fǎng)問(wèn)指令

    5.4 多寄存器Load/Store內(nèi)存訪(fǎng)問(wèn)指令寄存器Load/Store內(nèi)存訪(fǎng)問(wèn)指令也叫批量加載/存儲(chǔ)指令,它可以實(shí)現(xiàn)在一組
    發(fā)表于 10-18 15:56 ?1次下載

    寄存器的Load/Store指令詳解

    (Single Register) 這些指令在ARM寄存器和存儲(chǔ)之間提供更靈活的單數(shù)據(jù)項(xiàng)傳送方式。數(shù)據(jù)項(xiàng)可以是字節(jié)、16位半字或32位字。 ② 多
    發(fā)表于 10-18 15:57 ?1次下載
    單<b class='flag-5'>寄存器</b>的Load/Store<b class='flag-5'>指令</b>詳解

    Thumb指令集之多寄存器數(shù)據(jù)傳送指令解析

    于過(guò)程調(diào)用與返回以及存儲(chǔ)塊拷貝。但為了編碼的緊湊性,這兩種用法由分開(kāi)的指令實(shí)現(xiàn),并且這些指令也只使用單一的尋址方式。在其他方面,這些指令的性質(zhì)與等價(jià)的ARM
    發(fā)表于 10-19 09:56 ?0次下載
    Thumb<b class='flag-5'>指令</b>集之多<b class='flag-5'>寄存器</b>數(shù)據(jù)傳送<b class='flag-5'>指令</b>解析

    淺談單寄存器數(shù)據(jù)傳送指令

    11.5 單寄存器數(shù)據(jù)傳送指令 Thumb指令集支持寄存器的裝載和存儲(chǔ),即LDR和STR指令。8和類(lèi)型的Load/Store
    發(fā)表于 10-19 10:04 ?1次下載

    指令指針寄存器是什么_作用有哪些

    指令指針寄存器IP(X86型CPU)相當(dāng)于ARM型CPU中的程序計(jì)數(shù)PC,用于控制程序中指令的執(zhí)行順序。正常運(yùn)行時(shí),IP中含有BIU要取的下一條
    發(fā)表于 11-13 09:58 ?1.2w次閱讀
    <b class='flag-5'>指令</b>指針<b class='flag-5'>寄存器</b>是什么_作用有哪些

    指令指針寄存器和指針寄存器差異性在哪兒

    )。它們的關(guān)系就是,CPU從指令指針寄存器ip 獲得指令的內(nèi)存地址,然后取出指令,放置到指令寄存器
    發(fā)表于 11-13 10:24 ?8142次閱讀
    <b class='flag-5'>指令</b>指針<b class='flag-5'>寄存器</b>和指針<b class='flag-5'>寄存器</b>差異性在哪兒

    逆向基礎(chǔ)之寄存器和內(nèi)存詳解

    本文主要介紹的是逆向基礎(chǔ)的寄存器和內(nèi)存方面的信息,首先介紹的是逆向主要是做什么的,其次對(duì)編程和機(jī)器架構(gòu)做了個(gè)簡(jiǎn)介,最后詳細(xì)的闡述了逆向基礎(chǔ)的寄存器
    發(fā)表于 04-26 09:52 ?2980次閱讀

    技術(shù) | FANUC數(shù)據(jù)寄存器和位置寄存器的運(yùn)用介紹

    寄存器指令 Registers① 寄存器指令R[i] i=1~200② 位置寄存器
    的頭像 發(fā)表于 06-24 17:15 ?1.7w次閱讀
    技術(shù) | FANUC數(shù)據(jù)<b class='flag-5'>寄存器</b>和位置<b class='flag-5'>寄存器</b>的運(yùn)用介紹

    寄存器功能

    寄存器功能免費(fèi)下載。
    發(fā)表于 06-21 15:43 ?1次下載

    如何逆向_Dalvik 寄存器,字節(jié),指令格式 2

    1. 數(shù)據(jù)操作指令 1. ``` move Move?vA,vB? 將vB寄存器的值賦給vA
    的頭像 發(fā)表于 01-30 16:25 ?566次閱讀

    JTAG 指令寄存器指令譯碼介紹

    指令寄存器的目的是通過(guò) TDI 信號(hào)移入指令。另外,指令寄存器還可以在新指令完全移入之前,存儲(chǔ)當(dāng)
    發(fā)表于 02-03 10:42 ?3329次閱讀