<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    安卓逆向Thumb匯編指令

    VSole2021-09-08 23:11:00

    1.Thumb指令集詳解

    ?ARM處理器支持兩種指令集:ARM指令集和Thumb指令集。

    ?ARM指令集指令長度為32位,Thumb指令集指令長度為16位。在16位外部數據總線寬度下,ARM處理器上使用Thumb指令的性能要比使用ARM指令的性能更好。

    ?存在Thumb指令的意義:兼容數據總線寬度為16位的應用系統。

    2.Thumb直接訪問的寄存器

    3.Thumb指令集組成部分

    ?3.1.Thumb數據處理指令

    ?3.2.分支跳轉指令

    ?3.3.寄存器加載存儲指令(單寄存器、多寄存器)

    ?3.4.雜項指令

    ?SWI:軟中斷指令

    指令格式如下:

      SWI  immed_8
      其中:immed_8 8 位立即數,值為0~255 之間的整數。
      SWI 指令舉例如下:
      SWI 1 ;軟中斷,中斷立即數為0
      SWI 0x55 ;軟中斷,中斷立即數為0x55
      使用SWI 指令時,通常使用以下兩種方法進行傳遞參數,SWI 異常中斷處理程序可以提供相關的服務,這兩種方法均是用戶軟件協定。SWI 異常中斷處理程序要通過讀取引起軟中斷的SWI 指令。以取得8 位立即數。
      (A)指令中8 位的立即數指定了用戶請求的服務類型,參數通過用寄存器傳遞。
                MOV R0,#34 ;設置子功能號為34
                SWI 18 ;調用18 號軟中斷
      (B)指令中的8 位立即數被忽略,用戶請求的服務類型由寄存器R0 的值決定,參數通過其它的通用寄存器傳遞。
              MOV R0,#18 ;調用18 號軟中斷
              MOV R1,#34 ;設置子功能號為34
              SWI 0
    

    4.Thumb和ARM狀態切換

    ?ARM/Thumb之間的狀態切換是通過一條專用的轉移交換指令BX來實現的

    匯編格式:BX{} Rm

    功能:BX 指令跳轉到指令中所指定的目標地址,并實現狀態的切換。Rm 是一個表達目標地址的寄存器。當Rm 中的最低位Rm[0] 為 1 時,強制程序從ARM 指令狀態跳到Thumb 指令狀態;當 Rm 中的最低位Rm[0]為0 時,強制程序從Thumb 指令狀態跳到ARM 指令狀態。

    BX 指令示例

      CODE32      ;ARM 程序段,32 位編碼
      arm1   ADR R0,thumb1+1  ;把thumb1 所在地址賦給R0 ,末位R0[0] 置1 ,要跳轉THUMB 指令集
      MOV LR,PC   ;設置返回地址
      BX R0     ;跳轉
      ADD R1,R2,#2    ;返回地址處,第4 條指令
      CODE16  ;THUMB 程序段, 16 位編碼
      thumb1  ADD R1,R3,#1   ;THUMB 程序
      BX LR ;跳轉到返回地址處,執行第4 條指令
    

    以上示例分析:說明了帶狀態切換的子程序調用和返回結構,ARM 程序段執行MOV LR,PC 語句時將返回地址保存到了LR 寄存器中。執行到BX 語句時 ,PC 指向下一個要執行的語句,此時PC(R15) 中的值為下一個語句ADD 指令所在的地址,并根據R0 中的bit[0] 實現了由ARM 狀態切換到Thumb 狀態。從而調用Thumb 子程序,子程序調用完后使用BX LR 指令,從而實現了子程序調用的返回并切換到ARM 狀態。

    5.Thumb指令一些應用情況

    ?在ida中識別Thumb指令和ARM指令的方法

      ?CODE32表示的采用ARM匯編指令,CODE16表示采用的是THUMB匯編指令。

    ?Thumb匯編的主要應用場景:逆向調試So文件的時候,編寫ARM的shellcode代碼的時候。?以下是arm的shellcode的應用

    版權申明:內容來源網絡,版權歸原創者所有。除非無法確認,都會標明作者及出處,如有侵權煩請告知,我們會立即刪除并致歉。謝謝!

    arm匯編指令
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Thumb匯編指令的細節
    匯編語言是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。Smali匯編基礎Smali語言最早是由JesusFreke發布在Google Code上的一個開源項目,并不是擁有官方標準的語言。因此也將Smali語言稱作Android虛擬機的反匯編語言。基本類型Smali基本數據類型中包含兩種類型,原始類型和引用類型。而在Smali中則是以LpackageName/objectName的形式表示對象類型。
    前言最近一段時間在研究Android加殼和脫殼技術,其中涉及到了一些hook技術,于是將自己學習的一些hook技術進行了一下梳理,以便后面回顧和大家學習。主要是進行文本替換、宏展開、刪除注釋這類簡單工作。所以動態鏈接是將鏈接過程推遲到了運行時才進行。
    Frida工作原理學習
    2022-07-12 16:28:29
    frida是一款便攜的、自由的、支持全平臺的hook框架,可以通過編寫JavaScript、Python代碼來和frida_server端進行交互,還記得當年用xposed時那種寫了一大堆代碼每次修改都要重新打包安裝重啟手機、那種調試調到頭皮發麻的痛苦,百分之30的時間都是在那里安裝重啟安裝重啟。
    交互式反匯編器,簡稱為IDA。是目前最棒的一個靜態反編譯軟件,為眾多0day世界的成員和ShellCode安全分析人士不可缺少的利器!此章節讓我們熟悉通過IDA修改參數、函數、返回值,同時詳細解讀標志位的概念,熟悉堆棧及詳細解讀ARM三級流水線概念和ARM編碼編譯為二進制的全過程。
    Dobby一共兩個功能,其一是inlinehook,其二是指令插樁,兩者原理差不多,主要介紹指令插樁。所謂指令插樁,就是在任意一條指令,進行插樁,執行到這條指令的時候,會去執行我們定義的回調函數
    當我們在編寫匯編時,可能有的時候你需要看看編譯器中到底發生了什么。
    看雪論壇作者ID:xxxlion
    只有執行時才會被調用到內存中!ELF文件由4部分組成,分別是ELF頭、程序頭表、節和節頭表。
    該漏洞為華碩RT-ax56u路由器httpd服務中身份驗證后的棧溢出漏洞,由于該路由器在身份
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类