Smali基本語(yǔ)法

smali文檔下載地址,點(diǎn)進(jìn)去有個(gè)Download按鈕下載下來(lái)即可卵迂。

  • dalvik-bytecode.css
  • dalvik-bytecode.html
  • instruction-formats.css
  • instruction-formats.html

smali baksmali

使用方法:

//反編譯成smali
java -jar baksmali-2.2.2.jar d classes.dex[dex文件名]
//smali轉(zhuǎn)成dex
java -jar smali-2.2.2.jar a out[需要轉(zhuǎn)成dex的smali目錄名稱]

重打包:把生成的dex文件替換到apk中串稀,并且刪除簽名信息重新簽名

apktool

apktool
使用方法:

//反編譯apk成smali
java -jar apktool_2.5.0.jar d xes.apk
//回編譯成apk
java -jar apktool_2.5.0.jar b xes[上一步驟反編譯生成的目錄名]
//簽名后即可運(yùn)行崖技。

常用smali

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int a = 2,b=3;
        if(a>1){
            b=4;
        }
        b=5;
    }

對(duì)應(yīng)下面的smali:

.method protected onCreate(Landroid/os/Bundle;)V
    .registers 5
    .param p1, "savedInstanceState"    # Landroid/os/Bundle;

    .line 13
    invoke-super {p0, p1}, Landroidx/appcompat/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

    .line 14
    const v0, 0x7f0b001c

    invoke-virtual {p0, v0}, Lcom/example/testsmail/MainActivity;->setContentView(I)V

    .line 20
    const/4 v0, 0x2

    .local v0, "a":I
    const/4 v1, 0x3

    .line 21
    .local v1, "b":I
    const/4 v2, 0x1
   
    
    if-le v0, v2, :cond_f

    .line 22
    const/4 v1, 0x4

    .line 24
    :cond_f
    const/4 v1, 0x5

    .line 25
    return-void
.end method

這里要注意的:

  1. v0<=v2,在java代碼中是翻譯成if(v0>v2){const/4 v1, 0x4}const/4 v1, 0x5,把要跳轉(zhuǎn)的函數(shù)地方的代碼寫在{}的外面眠屎。

  2. const/4 v1, 0x3

    .line 21
    .local v1, "b":I 表示int b=3

靜態(tài)代碼塊:
//這里的cinit表示的是靜態(tài)代碼塊翎嫡,init表示構(gòu)造函數(shù)
.method static constructor <cinit>()V
.end method

常用指令

//取前面2個(gè)字節(jié)的數(shù)據(jù)港谊,v0=0x1234
const/high16 v0,#0x12340000
//Class cls =MainActivity.class;
const-class v1,Lcom/cr33/test/MainActivity
//Byte[] sz4 = new Byte[];
const/16 v10,0x1000
new-array v0,v0,[B
.local v0,"sz4":[B

//類型強(qiáng)轉(zhuǎn),把v0強(qiáng)轉(zhuǎn)成Activity對(duì)象
move-object v0,p1 
check-cast v0,Landroid/app/Activity;

//判斷p1是否是Activity的派生類吨述,并把結(jié)果存在v0
instance-of v0,p1,Landroid/app/Activity;

//int[] ary2= {1,2,3,4};
const/4 v2,4
new-array v2,v2,[I
fill-array-data v2,:20
.local v2,"ary2":[I

:20 .array-data 4//這里的4表示是每一項(xiàng)4個(gè)字節(jié)岩睁,如果是byte的話,是array-data 1
0x1
0x2
0x3
0x4
.end array-data

//把1給v4[1]=1揣云,
const/4 v5,1
aput-byte v5,v4,v5
  • 分支循環(huán)
if(a>0){
:cond_1
}else{
:cond2
}
goto:

  • switch
.packed-switch 0x1 //把switch的值減掉1后捕儒,再進(jìn)行調(diào)整(因?yàn)閟itch之間相差的是1)
:66
:56
:46

java的switch case是可以使用String類型的字符串,它是直接通過(guò)hashcode來(lái)比較

開啟代碼混淆:在build.gradle中minifyEnabled false改成true

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邓夕,一起剝皮案震驚了整個(gè)濱河市刘莹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焚刚,老刑警劉巖点弯,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異矿咕,居然都是意外死亡抢肛,警方通過(guò)查閱死者的電腦和手機(jī)狼钮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捡絮,“玉大人熬芜,你說(shuō)我怎么就攤上這事「N龋” “怎么了涎拉?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)的圆。 經(jīng)常有香客問(wèn)我曼库,道長(zhǎng),這世上最難降的妖魔是什么略板? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任毁枯,我火速辦了婚禮,結(jié)果婚禮上叮称,老公的妹妹穿的比我還像新娘种玛。我一直安慰自己,他們只是感情好瓤檐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布赂韵。 她就那樣靜靜地躺著,像睡著了一般挠蛉。 火紅的嫁衣襯著肌膚如雪祭示。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天谴古,我揣著相機(jī)與錄音质涛,去河邊找鬼。 笑死掰担,一個(gè)胖子當(dāng)著我的面吹牛汇陆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播带饱,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烘贴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼轧叽!你這毒婦竟也來(lái)了枯途?” 一聲冷哼從身側(cè)響起页慷,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎执庐,沒(méi)想到半個(gè)月后酪耕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耕肩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年因妇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了问潭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婚被,死狀恐怖狡忙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情址芯,我是刑警寧澤灾茁,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站谷炸,受9級(jí)特大地震影響北专,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旬陡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一拓颓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧描孟,春花似錦驶睦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至廉羔,卻和暖如春溉痢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憋他。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工孩饼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人举瑰。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓捣辆,卻偏偏與公主長(zhǎng)得像蔬螟,于是被迫代替她去往敵國(guó)和親此迅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容