


Analisis contoh kelas kompleks smali dalam kejuruteraan songsang Android
Kelas kompleks 1.java
Jika anda tidak faham apa-apa, sila lihat: Rangka Umum JAVA atau Kaedah Pembinaan
Siarkan kod di sini, ia adalah sangat mudah dan tidak sukar.
2.kod smali
Kami perlu menukar kod java kepada kod smali, anda boleh merujuk java kepada smali
Mari lihat dalam modul.
2.1 Modul pertama - modul maklumat
Modul ini ialah maklumat asas, yang menerangkan nama kelas, dsb., hanya tahu ia Baik tidak banyak membantu dengan analisis.
2.2 Modul kedua - kaedah pembinaan
Mari kita analisa ayat demi ayat Jika terdapat pendua dalam analisis sebelum ini, kita tidak akan ulangi mereka. Tetapi pautan akan diberikan.
.method public constructor <init>(Ljava/lang/String;I)V</init>
Ayat ini terbahagi kepada
.methodpublicconstructor<init>(Ljava/lang/String;I)v</init>
2.2.1 .kaedah
bermaksud kaedah
2.2.2 awam
Kaedah pengubahsuaian, sifat awam
2.2.3 pembina
Pembina di sini bermaksud kaedah ini ialah kaedah pembina
2.2.4 <init></init>
Selepas Java disusun, ia akan menjana kaedah
Inisialisasi pembolehubah kelas induk
Blok penyata Kelas Induk
Pembina kelas induk
Inisialisasi pembolehubah subkelas
Pernyataan subkelas Sekat
Pembina subkelas
Apa yang dipanggil penumpuan ke dalam kaedah
2.2.5 (Ljava/lang/String;I)
Kandungan dalam kurungan ialah Ljava/lang/String yang pertama, yang bermaksud parameter pertama ialah jenis String. ;
Terdapat I di penghujungnya, yang bermaksud ia juga milik Ljava/lang dan terdapat parameter jenis int di sini.
2.2.6 v
Ada v di hujung yang bermaksud batal. Iaitu, tiada jenis nilai pulangan.
Mari kita lihat maksud ayat kedua.
.registers 6
Daftar 6. Daftar di sini bermula dari v0-v5. Ini mudah difahami.
Ayat ketiga.
.prologue
Pembukaan bermaksud permulaan program.
Ayat keempat.
.line 10
Maksud baris ke-10 kod.
Ayat kelima ialah:
invoke-direct {p0}, Ljava/lang/Object;-><init>()V</init>
Pertama, mari kita pecahkan ayat ini.
invoke-direct{p0}Ljava/lang/Object;-><init> () V</init>
bermaksud panggilan kaedah.
invoke-direct
p0 ialah parameter pertama. Tetapi tiada parameter pertama di sini. Parameter yang kami lalui mula mengira dari p1.
{p0}
memanggil kaedah <init></init>
(), yang bermaksud tiada parameter. v adalah bersamaan dengan batal dan tidak akan diulang di sini.
Ayat keenam ialah
Ljava/lang/Object;-><init></init>
Pecahkan
iput-object p1, p0, LPerson;->name:Ljava/lang/String;
iput-objek p1, p0 bermaksud memberikan isi p1 kepada p0.
iput-object p1,p0LPerson;->name:Ljava/lang/String;
Maksud ayat ini ialah mengambil atribut bernama nama dan taip String daripada kelas Person Ini adalah untuk mengubah suai p0. Sebenarnya, ini.nama.
Ayat ketujuh
LPerson;->name:Ljava/lang/String;
juga dipecahkan kepada dua bahagian.
iput p2, p0, LPerson;->age:I
iput p2, p0
, di sini adalah untuk memberikan nilai p2 kepada p0
iput p2, p0LPerson;->age:I
menunjukkan bahawa jenis data umur adalah int.
Anda mungkin mendapati bahawa memanggil kedua-dua sifat adalah berbeza di sini kerana String bukan jenis data asas. Jadi objek-iput digunakan, jika jenis data asas ialah iput.
Ayat kelapan
LPerson;->age:I
Penguraian
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
sget-objek v0 ialah memberikan v0 perkara yang anda temui selepas mendapatnya.
Ljava/io/PrintStream;
bermakna terdapat kaedah Ljava/lang/System;->out:
dalam kelas ini.
Ayat kesembilan
sget-object v0 Ljava/lang/System;->out: Ljava/io/PrintStream;
Buat kelas StringBuilder baharu untuk v1.
Ayat kesepuluh
new-instance v1, Ljava/lang/StringBuilder;
adalah serupa dengan yang sebelumnya, memanggil v1 daripada pembina.
Ayat kesebelas
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V</init>
rentetan tetap rentetan konst. v2, kandungannya ialah nama:
Ayat kedua belas
const-string v2, "name:"
Dipecahkan ialah
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v2} memanggil kaedah maya, ->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
Panggil fungsi yang dipanggil append, parameter ialah jenis String dan nilai pulangan ialah jenis StringBuilder.
Ayat ketiga belas
invoke-virtual {v1, v2}Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
adalah untuk memberikan hasil ayat sebelumnya kepada daftar v1.
之后的内容就是相似的了。
有兴趣可以自己继续向下分析。
2.3 方法模块
这个模块在之前的一篇文章里已经说过了,这里就不再啰嗦了。
2.4 练习
这个练习我们就自己添加一个构造方法。
.method public constructor <init>()V .registers 1 invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void .end method</init></init>
这个是我们自己写的一个构造方法。无参无返回值。
编译成jar文件进行查看。
0x02 smali类相互调用
1. java代码
在0x01的前提上我们再写一个调用demo。
public class Demo{ public static void main(String[]args) { Person p=new Person("zhuzhu",14); } }
代码很简单。
2.smali代码
这里我们要使用
javac -source 1.6 -target 1.6 *.java
编译所有.java文件
然后使用
dx --dex --output=demo.dex *.class
把所有的.class文件编译成dex文件。
我们来主要看看main函数。
.method public static main([Ljava/lang/String;)V .registers 4 .prologue .line 4 new-instance v0, LPerson; const-string v1, "zhuzhu" const/16 v2, 0xe invoke-direct {v0, v1, v2}, LPerson;-><init>(Ljava/lang/String;I)V .line 5 return-void.end method</init>
new-instance v0, LPerson;
新建一个类,v0
const-string v1, "zhuzhu"
然后定义一个常量 v1。
const/16 v2, 0xe
定义一个16位的常量
invoke-direct {v0, v1, v2}, LPerson;-><init>(Ljava/lang/String;I)V</init>
调用Person类的构造方法,然后把v0,v1,v2当做参数传进去。
其实类之前的交互调用其实并不难。
3.总结
我们调用其他类的时候。
1.new-instance 实例化一个对象
2.invoke-direct 调用构造方法
0x03 小练习(甜点)
首先来看看我们写的程序。
然后是手写的smali代码。
.class public LPd; .super Ljava/lang/Object; .source "Pd.java"# direct methods .method public constructor <init>()V .registers 1 .prologue invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void.end method .method public static main([Ljava/lang/String;)V .registers 4 .prologue new-instance v0,LPerson; invoke-direct {v0}, LPerson;-><init>()V return-void.end method</init></init></init>
Atas ialah kandungan terperinci Analisis contoh kelas kompleks smali dalam kejuruteraan songsang Android. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

OnLeaks kini telah bekerjasama dengan Android Headlines untuk memberikan pandangan pertama pada Galaxy S25 Ultra, beberapa hari selepas percubaan gagal untuk menjana lebih daripada $4,000 daripada pengikut X (dahulunya Twitter). Untuk konteks, imej pemaparan yang dibenamkan di bawah h

Di samping mengumumkan dua telefon pintar baharu, TCL juga telah mengumumkan tablet Android baharu yang dipanggil NXTPAPER 14, dan saiz skrinnya yang besar adalah salah satu nilai jualannya. NXTPAPER 14 menampilkan versi 3.0 jenama tandatangan TCL panel LCD matte

Vivo Y300 Pro baru sahaja didedahkan sepenuhnya, dan ia merupakan salah satu telefon Android jarak pertengahan paling tipis dengan bateri yang besar. Tepatnya, telefon pintar ini hanya tebal 7.69 mm tetapi mempunyai bateri 6,500 mAh. Ini adalah kapasiti yang sama seperti yang dilancarkan baru-baru ini

Samsung belum menawarkan sebarang petunjuk lagi tentang bila ia akan mengemas kini siri telefon pintar Edisi Peminat (FE). Seperti sedia ada, Galaxy S23 FE kekal sebagai edisi terbaharu syarikat, telah dibentangkan pada awal Oktober 2023. Walau bagaimanapun, banyak

Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

Redmi Note 14 Pro Plus kini rasmi sebagai pengganti langsung kepada Redmi Note 13 Pro Plus tahun lepas (sekira $375 di Amazon). Seperti yang dijangkakan, Redmi Note 14 Pro Plus mengetuai siri Redmi Note 14 bersama Redmi Note 14 dan Redmi Note 14 Pro. Li

Jenama OnePlus iQOO mempunyai kitaran produk 2023-4 yang mungkin hampir tamat; Namun begitu, jenama itu telah mengisytiharkan bahawa ia belum selesai dengan siri Z9nya. Varian Turbo+yang terakhir, dan mungkin paling akhir, baru sahaja diumumkan seperti yang diramalkan. T
