試題網(wǎng)址: http://www.shiyanbar.com/ctf/1871
0x01
首先我們得到了一個(gè)hello.dex文件,要把它反編譯為smali文件,使用工具baksmali,cmd命令: java -jar baksmali-2.0.3.jar -o class/ Hello.dex ,就在當(dāng)前目錄下生成了一個(gè)文件夾,里邊有一個(gè)hello.smali 代碼如下:
.class public LHello; .super Ljava/lang/Object; .source "Hello.java" # direct methods .method public constructor <init>()V .registers 1 .prologue .line 1 invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void .end method .method public static main([Ljava/lang/String;)V .registers 5 .prologue .line 7 new-instance v0, LHello; invoke-direct {v0}, LHello;-><init>()V .line 8 sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream; //v1存out對象的引用 const/4 v2, 0x5 //把5符號(hào)擴(kuò)展32位賦值給v2 const/4 v3, 0x3 //把3符號(hào)擴(kuò)展32位賦值給v3 invoke-virtual {v0, v2, v3}, LHello;->foo(II)I //調(diào)用函數(shù)foo move-result v0 //把函數(shù)的結(jié)果賦值給v0 invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V //打印輸出v0 .line 9 return-void .end method # virtual methods .method public foo(II)I .registers 5 .prologue .line 3 add-int v0, p1, p2 // v0=p1+p2 sub-int v1, p1, p2 // v1=p1+p2 mul-int/2addr v0, v1 // v0=v0*v1 return v0 .end method。 于是便可以進(jìn)行分析了.
0x02
在這里首先稍微的科普一下,安卓程序都是由安卓虛擬機(jī)來運(yùn)行的,Dalvik虛擬機(jī)有兩種不同的寄存器表示方法,p命名法還有v命名法,假如說一個(gè)函數(shù)fun()使用了5個(gè)寄存器,2個(gè)顯式的參數(shù),并且這個(gè)方法是非靜態(tài)的方法,所以調(diào)用的時(shí)候會(huì)傳入一個(gè)隱式的fun對象引用,所以有三個(gè)參數(shù),局部變量使用前2個(gè)寄存器,參數(shù)使用后3個(gè),分別為v0,v1,v2,p0,p1,其中p0傳入對象的引用。
然后說下Dalvik字節(jié)碼的類型,方法還有字段表示方法:
1.類型:
V--void Z--boolean B--byte S--short C--char I--int F--float
D--double L--java類型 [--數(shù)組類型
其中java類型一般都是LpackageName/name/Objname 來表示具體的那個(gè)對象,如Ljava/lang/String相當(dāng)于java.lang.String
2.方法:
Lpackage/name/Objname;->MethodName(III)Z
III表示三個(gè)整型參數(shù),Z表示返回值是boolea型,
3.字段:
字段由類型、字段名、字段類型構(gòu)成,字段名和字段類型之間使用:隔開
#instance fileds 實(shí)例字段
#static fields 靜態(tài)字段
一些基本語法:
.prologue 方法開始
invoke-direct 調(diào)用函數(shù)
return-void 函數(shù)返回void
.end method 函數(shù)結(jié)束
new-instance 創(chuàng)建實(shí)例
iput-object 對象賦值
iget-object 調(diào)用對象
所以最終返回結(jié)果 (5+3)*(5-3)=16
當(dāng)然這里直接反編譯成jar然后反匯編為java代碼更容易看出來:
import java.io.PrintStream;
public class Hello
{
public static void main(String[] paramArrayOfString)
{
Hello localHello = new Hello();
System.out.println(localHello.foo(5, 3));
}
public int foo(int paramInt1, int paramInt2)
{
return (paramInt1 + paramInt2) * (paramInt1 - paramInt2);
}
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
名稱欄目:實(shí)驗(yàn)吧smali文件分析-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://vcdvsql.cn/article12/hdgdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、做網(wǎng)站、域名注冊、App開發(fā)、企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容