arm指令bne.w改成b,即無條件跳轉

来源:http://www.cnblogs.com/iamonion/archive/2017/06/27/7084525.html
-Advertisement-
Play Games

近期逆向一個程式,需要把bne.w改成b,無條件跳轉。由於ios逆向不像pc上,可以在od里直接改彙編指令,這篇文章給了我很大的幫助。通過memory write 修改後,驗證可行後,再用ultraedit修改二進位文件,保存可執行程式。再拷貝到ios設備,即可。 文章出處:http://blog. ...


     近期逆向一個程式,需要把bne.w改成b,無條件跳轉。由於ios逆向不像pc上,可以在od里直接改彙編指令,這篇文章給了我很大的幫助。通過memory write 修改後,驗證可行後,再用ultraedit修改二進位文件,保存可執行程式。再拷貝到ios設備,即可。

 

 

文章出處:http://blog.chinaunix.net/uid-22915173-id-225005.html

 

ARM中的常用指令含義
ADD 加指令
SUB 減指令
STR    把寄存器內容存到棧上去
LDR    把棧上內容載入一寄存器中
.W     是一個可選的指令寬度說明符。它不會影響為此指令的行為,它只是確保生成 32 位指令。Infocenter.arm.com的詳細信息
BL     執行函數調用,並把使lr指向調用者(caller)的下一條指令,即函數的返回地址 lr  link register鏈接寄存器
BLX    同上,但是在ARM和thumb指令集間切換。
CMP    指令進行比較兩個操作數的大小

ADD R3,R2,R1,LSR #2   ;R3R2+R1÷4
ADD R3,R2,R1,LSR R4 ;R3R2+R1÷2R4

LDR R0,[R1]  ;R0←[R1] 將R1的值為地址的存儲器中的數據傳送到R0中
STR R0,[R1]  ;[R1]←R0  將R0的值傳送到R1的值為地址的存儲器中。

基址變址定址
LDR R0,[R1,#4]    ;R0←[R1+4]
LDR R0,[R1,#4]!;R0← [R1+4], R1←R1+4
LDR R0,[R1] ,#4   ;R0←[R1], R1←R1+4
LDR R0,[R1,R2]    ;R0← [R1+R2]
LDR R0,[R1,R2,LSL#2];R0← [R1+R2*4]

堆棧定址
ARM 32位指令
STMFD   SP! {r0,r1,r3-r5} ; r0-r1,r3-r5入棧
LDMFD  SP! {r0,r1,r3-r5} ; r0-r1,r3-r5出棧
Thumb 16位指令
PUSH       {r0,r1,r3-r5} ; r0-r1,r3-r5入棧
POP        {r0,r1,r3-r5} ; r0-r1,r3-r5出棧

滿遞減堆棧-進棧
stmfd sp!, {r0,r1,r3-r5}
滿遞減堆棧-出棧
ldmfd sp!, {r0,r1,r3-r5}

跳轉指令
B  跳轉指令
BL 帶鏈接的跳轉指令
BLX 帶鏈接和狀態切換的跳轉指令
BX 帶狀態切換的跳轉指令

軟體中斷指令SWI
SWI  0x2

斷點指令(BKPT)
BKPT   0xF02C 斷點,用於調試

Thumb 是16-bit 指令集
代碼密度高 (總代碼大小約為ARM指令的65%)
使用窄匯流排存儲器時可以大大提高性能。
是 ARM 指令集的一個子集,不是一個完整的指令集(Thumb-2除外)
核存在一個執行狀態 – Thumb狀態
ARM和Thumb之間可通BX 指令進行切換

http://wenku.baidu.com/link?url=83-XJ-2KEt4gCIeLG1Bi2oTgQXeHqDUDAJ-zXVt8nlAf_VOg7_6FyXmKCJPiB2J98u-fosB0ERlnn_53rTjnpS8dL96MdZncTzmUMpSZV7y

其他:IDA深度解析修改so文件和ARM彙編

1.我們要達到什麼目地?
我們逆向APK時,如今對於so一般來說是肯定要做修改的,然而IDA修改彙編代碼,不像OD可以直接修改彙編指令,必須通過WINHEX等修改十六進位。我們僅僅知道00表示代碼清除,90表示NOP指令,即空指令。但僅僅刪除一行代碼這樣的修改肯定是滿足不了需要的。我們需要深入修改一點。


2.Intel8086與ARM基礎知識
Intel8086是英特爾公司的16位處理器,ARM是ARM公司的32位處理器。每個處理器都對應自己的一套彙編語言,所以兩個處理器分別對應於8086彙編和ARM彙編。由於處理器的位數,所以8086彙編指令的機器碼是16位,而ARM彙編指令的機器碼就是32位。機器碼可以看作是二進位指令,其實所謂的HEX即稱為十六進位操作碼或十六進位機器碼,也是二進位指令,只是把二進位的數值用十六進位去展示。

3.ARM彙編非常重要
ARM彙編可以做的事情在我看來比8086彙編多得多,如果你會了ARM,就會了主流的嵌入式開發,然後就是硬體編程,然後就是機器人或機械製造。所以,ARM真的非常重要,希望可以去認真學習,不僅是ARM指令集,還有ARM的機器碼的原理,以及ELF文件在linux下的objdump反編譯。下麵只能簡單講解。

4.ARM的機器碼簡單講解
ARM機器碼為32位,我們以跳轉指令BL和BEQ為例講解。其實我們只需要關註最高的8位,也就是24-31位。首先來看,28-31這四位,不同條件這四位有什麼不同。然後在27-24這四位里,BL和BEQ都是1010.所以BL指令的二進位是11101010,即十六進位的EA;相同BEQ的十六進位就是0A。

5.SO裡面的情況
當我們把SO里的彙編語言放到工具中去轉換為HEX時,會發現和IDA中的HEX有時是完全不同的,這是因為IDA中有時反編譯SO使用的不是ARM,而是16位的ARM,也就是Thumb指令,但有時卻是ARM的32位指令。

6.修改彙編跳轉指令
這種情況一般是Thumb指令,一般而言一行代碼對應是2個HEX碼。
例子:bne指令修改為beq指令
通過工具,我們發現bne跳轉指令對應的HEX機器碼是D1,beq對應的HEX機器碼是D0,然後用WINHEX修改,再用IDA檢測。

7.修改數據
這種情況一般是ARM指令,一般而言一行代碼對應是4個HEX碼。
例子:修改小黃人快跑中初始化金幣量
so裡面原來ARM代碼:mov R1,#0x49C8
最大可改為0XFFFF,也就是65535,修改後的代碼應為:mov R1,#0xFFFF
原本的代碼對應的HEX:C8 19 04 E3,為什麼是這個樣子,這和8086彙編有類似之處,就是十六進位和彙編代碼是大體顛倒的。最後的E3是MOV這個彙編指令。我們做一個正確的顛倒:E3 01 49 C8。這下就懂了吧!所以,我們改為FF 1F 0F E3。
當然,為了方便,可以直接使用工具,不過這樣的分析能夠極大增強大家ARM分析的能力。不過不要寄太多希望於工具,因為很多時候,工具會發生錯誤或者和IDA中的HEX-VIEW情況不一致,也不利於我們學習的。所以工具只是輔助,主要還是動腦子。

8.修改字元串
這種情況比較簡單,字元串就是字元串,修改字元串的HEX碼就是利用ASCII轉HEX的工具就可以,我們可以對比兩個so來看看。當然最簡單修改辦法,是用WINHEX直接在右邊修改字元串。其實,這和修改文本是一樣的,記事本,notepad都可以。手機端的MT,HEXEDITOR,十六進位編輯器等等也都可以修改SO的字元串,推薦使用默小坑兄弟的ADK編輯器。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一直恐懼讀源碼,哪怕是一個簡單的庫也是讀百來行遇到難點就放棄了。對於新的東西也僅僅是知道它拿來乾什麼,社區資源在哪裡,要用時就突擊文檔資源使用即可。未有過深入之心,亦或者有過深入之心兩三天就廢掉。 這兩日安靜下來思考,覺得自己毛病不少,卻還是不甘於平庸。那麼只能選擇面對自己做出改變,越是恐懼,越是應 ...
  • <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style type="text/css">body { margin: 0;}#wrap { margin: 30px auto; ...
  • 1.定義 DOCTYPE標簽是一種標準通用標記語言的文檔類型聲明,目的是要告訴標準通用標記語言解析器,它應該使用什麼樣的文檔類型定義(DTD)來解析文檔。 <!DOCTYPE> 聲明必須是 HTML 文檔的第一行,位於 <html> 標簽之前。 2.作用 聲明文檔的解析類型(document.com ...
  • CSS實現水平垂直居中對齊 在CSS中實現水平居中,會比較簡單。常見的,如果想實現inline元素或者inline block元素水平居中,可以在其父級塊級元素上設置 實現;如果想實現塊級元素的水平居中對齊,可以設置 。而如果想實現垂直居中對齊,或許就不太容易。 以下,我總結了一些實現水平垂直居中對 ...
  • 公司性質的: | 公司 | 地址 | | | | | 美團 | "http://tech.meituan.com/archives" | 個人博客: | 博主 | 地址 (斜體的技術文章較少)| | | | | 王巍(onevcat) | "https://onevcat.com/ blog" | ...
  • 1. 基本功能預覽 2.基本功能 本次封裝的表單組件,分為單行和2行 兩種情況; 兩種組件 都有設置圖片lable、標題 (title)、按提示(hint)、文案(text)、內容距邊間距離(padding)這些通用功能; 其次,單行表單組件 還可以允許文本輸入、設置標題(title),以及文案(t ...
  • 遇到過好多次使用自定義view,修改frame無效問題, 之前都是放棄xib,直接手寫,發現手寫簡單的還行,複雜的UI就坑逼了。所以還是需要用到可視化編輯的xib。 整理一下,自己備忘也供iOS開發的朋友參考: 一般我們會直接這樣寫: 這是我一個項目中的代碼,但是這樣出現了一個問題就是iPhone ...
  • 必備條件: 安裝Node.js 安裝Java JDK(jdk-8u71-windows-x64.exe),註意:版本必須要1.8+ 安裝綠色版AndroidSDK (ADK編譯) AndroidSDK添加環境變數 在Path系統變數中添加如下配置: %ANDROID_HOME%\platform-t ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...