androidsmali
『壹』 smali如何修改
smali文件對比java文件:
.class :類名
.super :父類
.source :源文件名
.implements :繼承的介面
.field :類成員變數
.method :類方法
.parameter :函數參數 p1,p2...
.locals x :局部變數(個數)
const/16 v0, 0x64 :int v0 = 0x64
const/high16 v0, 0x7f03 :高16賦值
const-wide v0, 0x4024051eb851eb85L
const-string v0, "1111" :字元串
add-int v0, p0, p1 :v0 = p0 + p1(static函數參數 從p0 開始)
sub-int v0, p1, p2 :v0 = p1 + p2(普通成員函數參數從 p1 開始)
mul-int v0, p1, p2 :v0 = p1 * p2
div-int v0, p1, p2 :v0 = p1 / p2
add-int/2addr v0, v1 :v0+v1放到 v0所在的地址
sub-int/2addr v0, p2 :v0-p2放到 v0所在的地址
if-ne :if(x != y)
iput-object v0, p0, Lcom/xyz/smali/SmaliActivity;->string:Ljava/lang/String; :成員變數 v0 = string;
iget-object v0, p0, Lcom/xyz/smali/SmaliActivity;->mBtn:Landroid/widget/Button; :關聯成員變數
sput v0, Lcom/xyz/smali/SmaliActivity;->OK:I :sput 給static變數賦值
sput-wide v0, Lcom/xyz/smali/SmaliActivity;->dou:D :sput-wide 給static的寬位元組變數賦值
sput-object v0, Lcom/xyz/smali/SmaliActivity;->sss:Ljava/lang/String;
sget v1, Lcom/xyz/smali/SmaliActivity;->OK:I :關聯static變數
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V : this.super.onCreate();
invoke-static {p1, p2}, Lcom/xyz/smali/SmaliActivity;->add(II)I :調用靜態函數 add(p1, p2)
invoke-virtual {v0, p0}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V :調用虛函數
move-result v0 :前面調用函數後,把結果放到 v0
move-result-object v0 :前面調用函數返回的對象給 v0
check-cast v0, Landroid/widget/Button; :強制類型轉換 mBtn = (Button) findViewById(R.id.btn);
return-void :return ;
『貳』 android smali是源碼嗎
千峰扣丁IT教育總結:smali 是Android 應用程序(*.apk)反編譯生成的文件格式,
是一種類似於匯編語言的底層計算機語言。閱讀和書寫smali語法都需要極大的耐心和勇氣,
本文將介紹如何反編譯和運行第三方的程序(smali)代碼。
Android程序文件, 即apk文件, 其實是一個zip壓縮包, 其文件結構如下:classes.dex是程序的核心文件,是java語言的代碼編譯後的二進制位元組碼程序。這種位元組碼程序是編譯專供機器閱讀的,
類似於匯編語言的機器碼。然而如果想直接閱讀這部分程序, 最好的方法就是將該文件轉化為smali文件。apktool著名的反編譯工具 apktool
就可以完成這部分工作。 它將classes.dex文件反編譯成一堆的smali文件, 這些文件按源碼的包結構保存在各自的文件夾中。如下所示:另外,
apktool 工具強大之處在於它不僅可以反編譯apk文件, 而且可以根據現有的smali 文件生成新的apk文件。
這就給漢化apk或者去除apk內嵌廣告提供了可能。smali語法類似於匯編語言的語法, 涉及寄存器的直接操作, 可以直接閱讀, 但羞澀難懂,
尤其是在代碼混淆之後。
『叄』 為什麼狀態欄反編譯後沒有smali\com\android\systemui\statusbar\ statusbar
部分手機下拉背景和抽屜,通知欄頂部都是由主題決定的,系統用戶界面裡面是空的
『肆』 android反編譯APK後,是smali文件,能反編譯成dex文件嗎
dex文件不需要反編譯的,apk就是個壓縮文件,dex可以通過解壓直接得到
『伍』 Android---Smali語法中:什麼直接方法(direct methods)什麼是虛方法(virtual methods)
調用的時候
invoke-direct 調用直接方法
invoke-virtual 調用是虛方法
invoke-interface 調用介面函數
打開文件
#direct methods注釋後面的是直接方法
#virtual methods注釋後是虛方法
『陸』 如何把java代碼轉換成smali代碼
把java代碼轉成smali代碼共需要以下三個步驟
1、編譯java代碼為class文件
javac smaliTest.java
這個比較簡單,會生成smaliTest.class文件
2、把class文件轉成dex文件
我們知道apk包里java代碼最後生成的是class.dex文件,把class轉化成dex文件就需要用到android SDK提供的一個工具dx,該jar包位於android-sdk\build-tools\23.0.1\lib,找到該包後執行以下命令
java -jar dx.jar --dex --output=smaliTest.dex smaliTest.class
3、把dex轉化成smali文件
這時候會使用到另外一個工具baksmali,該工具位於android-sdk\platform-tools\,找到該包後執行以下命令
java -jar baksmali.jar smaliTest.dex
OK,完成,此時會生成一個out目錄,在out目錄下的smaliTest.smali就是我們要看到的smali代碼了
『柒』 你好,我想問問Android反編譯之後哪些文件有用smail文件夾里的東西有用嗎
smali是通過安卓的java代碼經過編譯後得到的,可以理解為delvik虛擬機的「匯編語言」。一般反編譯apk做修改都是直接修改smali代碼的。
smali代碼其實比較容易懂,是可以和java代碼對應上的。你所希望的直接在IDE修改java代碼應該是無法達到的。
希望採納。
『捌』 求助:Android逆向涉及到的dalvik位元組碼和smali文件,ARM匯編三者的聯系和區別是什麼
dalvik位元組碼就是smali或者(java)用編譯產生的dalvik可執行文件
ARM匯編,是操作晶元級的指令集。這三個東西不在一個層面
android
|(編譯產生.dex,也可理解為smali壓縮文件,也就是虛機可執行文件)
dalvik虛機
|
ARM匯編
|
硬體
『玖』 安卓反編譯出來的都是.smali文件,怎麼反編譯位原工程啊修改後還能重新編譯回去
反編譯步驟:
下載apktool 並設置環境變數
命令行進入apk目錄執行:apktool d xx.apk (如果遇到一些錯誤說明apk做了防破解處理)
執行成功後會生成xx文件夾,進入xx文件夾修改需要修改的內容,如果需要修改代碼,進入xx\smali\裡面,需要懂一些smali語法
修改完後回到命令行,執行:apktool b xx ,會在xx文件夾裡面生成一個dist文件夾,裡面的apk就是回編譯的,這個apk是沒有簽名的
下載網上的簽名工具對apk簽名,完了就可以安裝了(如果你下載了源碼或者sdk,裡面自帶一個signapk也可以簽名)
『拾』 android studio中compile2smali怎麼用
網路了一下關鍵字,沒發現這個關鍵字,看來你只能去谷歌一下,然後看看是否官方的文檔了。