吾愛破解安卓逆向入門教程《安卓逆向這檔事》二、初識APK文件結(jié)構(gòu)、雙開、漢化、基

大家好,我是正己。首先祝大家國慶快樂。一定要學(xué)的是第二課。本節(jié)課會帶大家先了解app的結(jié)構(gòu),尤其雙開以及多開的原理,漢化apk,以及簡單修改apk的名字,圖片。等本科會用到的一些工具,有教程的demo。mt管理器,np管理器,開發(fā)者助手,還有雷電模擬器。
更所謂工欲善其事,必先善其器,要學(xué)好安卓逆向。必須要了解apk的文件結(jié)構(gòu),apk的全稱是。安卓package,它相當(dāng)于一個壓縮文件,只要在電腦上將app的后綴。改成rar呀或者zip即可解壓?,F(xiàn)在我們來看一下教程的這個demo
右鍵選擇打開方式為-壓縮文件,這里我們可以看到這邊有幾個目錄。這個筆記里面的有個對比,筆記里面的第一個目錄,它是存放apk的一些靜態(tài)資源文件。比如說視頻,音頻圖片的。
第二個是lib目錄。它里面有一個so文件,但是因為這個demo里面還沒有編寫so,所以說他暫時還沒有。像前兩個目錄,他是不一定有,但是是比較常見的
第三個是一個簽名信息的文件。他主要用來驗證app文件的完整性
第四個。Res目錄主要存放一些資源文件,包括圖片,字符串等。apk的臉蛋也主要由他的這個layout文件來設(shè)計。
這個是androidmainfest.xml文件,它是apk的應(yīng)用清單信息,它描述了應(yīng)用的名字。版本,權(quán)限還有應(yīng)用庫文件等等
Classes.dex文件,它是java源碼編譯后生成的java字節(jié)碼文件,也是我們apk運(yùn)行的一個主要邏輯。
resources這個文件是編譯后的一個二進(jìn)制文件,我們可以通過。r文件中的id來找到對應(yīng)的資源。
讓我們來看一下這個demo。其中還有這個,okhttp3和kotlin這兩個。當(dāng)你看到這兩個的時候,你就應(yīng)該知道這個軟件。它要么就是全是kotlin開發(fā)的,或者說部分功能是kotlin開發(fā)的。至于這個okhttp3這是他導(dǎo)入了這個包進(jìn)行開發(fā)
以上就是對這個apk文件的一個簡單介紹,通過對這幾個資源的一個介紹,我們可以在以后的修改中可以快速定位。
比如說我們要修改一個圖片或者音頻,那么就應(yīng)該從這個assets目錄中去修改或者說替換。那如果要修改apk的一個主要邏輯就應(yīng)該從這個dex文件中去修改。
認(rèn)識完app結(jié)構(gòu),開始今天的第一個實(shí)戰(zhàn)雙開app。
那首先要了解一下。雙開的一個原理,這邊列舉了四種雙開的原理,后三種。比較復(fù)雜,不是我們新手進(jìn)行學(xué)習(xí),所以以第一種為例,簡單修改應(yīng)用包名來實(shí)現(xiàn)應(yīng)用的雙開。
當(dāng)我們修改包名之后再進(jìn)行安裝。這時手機(jī)系統(tǒng)會認(rèn)為這是兩個app,這樣的話就能生成兩個數(shù)據(jù)存儲的目錄。此時雙開,就相當(dāng)于你打開了兩個互不干擾的應(yīng)用,這就是一個修改包名來實(shí)現(xiàn)雙開的一個原理。
接下來,我們查一下模擬器,把我們的這幾個應(yīng)用安裝一下。現(xiàn)在安裝成功了,但是因為我之前在寫這個demo的時候沒有考慮這個屏幕的一個適配,所以說現(xiàn)在如果我們是橫屏打開的話。那體驗是非常糟糕,你看,這些布局全部亂掉,所以說我們需要在設(shè)置一下這個屏幕的一個分辨率,把它調(diào)成這個樣子。保存設(shè)置再重啟?,F(xiàn)在我們再開下,,現(xiàn)在就算是正常顯示了。
接下來,我們要介紹一款工具就是我們的這個mt管理器。它是手機(jī)端一個比較成熟的反編譯工具,具備了很多功能。在以后的教程中,我們也會11進(jìn)行介紹。當(dāng)然,他有的。功能是需要會員的,不過如果沒有開通會員的也沒有關(guān)系,我們還會提供另外一款。致敬mt開發(fā)的方便義工具,也就是這款np管理器。如果沒有開通會員的朋友,可以交替使用。
現(xiàn)在先學(xué)會提取這個應(yīng)用的一個安裝包,這邊左側(cè)點(diǎn)擊這邊有一個安裝包提取。找到我們這個demo點(diǎn)擊提取安裝包,然后定位。
我們來看。這邊我們有一個包名是com.zj,wuaipoji,這個就是我們demo的一個包名,我們剛才前面說了。他雙開就是通過修改這個包名來實(shí)現(xiàn)一個雙開。這邊有個功能。叫做apk共存。這邊新的一個包名,勾上這個自動簽名。
無會員
這個是一個會員功能,你用這個np來操作。
第一步先提取安裝包
第二步找到這個apk共存點(diǎn)擊確認(rèn)。
這時他就生成一個共存的包,點(diǎn)擊安裝。
在看我們桌面上。就兩個我們的教程demo。點(diǎn)擊第二個看看,同樣的。第一個后臺就有兩個,這就是一個簡單的雙開。最后說一下,因為雙開是通過修改包名來實(shí)現(xiàn)的,所以說動了應(yīng)用的簽名信息,如果這個時候開發(fā)者,他做了一個簽名教驗。那就很有可能出現(xiàn)安裝后閃退崩潰的情況。
接著,再來說一下漢化,這個也可能是一個。對于某些人來說,那是一個比較常用的功能,現(xiàn)在有一些工具,它是外國人。功能雖然說很好用,但是可能沒有中文,雖然說對于一些有英語基礎(chǔ)的人來說用起來不麻煩。但是始終還是沒有看著中文的字?jǐn)?shù)舒服,所以說就出現(xiàn)了漢化這么一個技術(shù)。
漢化,它包括軟件漢化和游戲漢化,我們這邊不講游戲漢化。因為那個比較復(fù)雜又簡單講軟件的漢話,我這邊畫了一個比較簡單的逆向流程圖,一起來看一下
當(dāng)你拿到一個應(yīng)用的時候。第一步要干嘛?第一步他要先查殼。
什么是殼?殼就是一種保護(hù)應(yīng)用的一種程序。后面也會專門出一期來介紹這些可以殼以及怎么處理這些殼?處理掉這個殼之后,就是反編譯。對源碼進(jìn)行一個反編譯,接著修改代碼,在回編譯簽名。
最后安裝-測試,這就是一個簡單的逆向流程。我們的漢化,它是在反編譯的基礎(chǔ)上以這個arsc的漢化為主,因為它在里面包含了大量的字符串,列的是這個xml的方法。還有dex的漢化。
當(dāng)然還有一種更偏的,就比如說他把字符串寫到so文件里面去,現(xiàn)在看一下demo。注意看,像這邊有個信息。他會有個id,還有一個level,如果你們打開的時候沒有的話,就信息-沒有個存儲。把這個數(shù)據(jù)全部刪掉再打開啊,這個時候他就會彈出一個注冊id的一個彈窗,你們注冊一下,然后這個時候。還有這些又顯示出來
簡單說一下這個對我。我就做成這種類似于游戲挑戰(zhàn)的一個模式,希望能增加一點(diǎn)趣味性。不過還沒寫好,后面還還好幾關(guān)還在構(gòu)思中,現(xiàn)在點(diǎn)擊第一關(guān)。這邊有個提示,請完成圖片替換和文字漢化。先看第一句hello吾愛破解。放mt管理器點(diǎn)擊查看。這個時候,我們就需要用到mt一個自帶的一個搜索功能。右上角點(diǎn)擊搜索,這個搜索-點(diǎn)擊高級搜索,這樣的話,他就相當(dāng)于一個全局的搜索,會在這個應(yīng)用中所有的文件進(jìn)行搜索,這個時候出現(xiàn)一個結(jié)果。點(diǎn)擊旁邊注意這邊的話,你如果還沒有登錄,他可能會要求你登錄。然后你在登錄來進(jìn)行方面,在這邊我們修改一下,把它改成中文的。右上角保存。,所以看到?jīng)]有,他剛才進(jìn)行了一次簽名。所以說,現(xiàn)在這個應(yīng)用他的簽名信息就跟最開始我們安裝的時候是不一樣的。等會就會出現(xiàn)一種情況,點(diǎn)擊安裝好,最后他就提示你安裝包和已安裝的應(yīng)用簽名不一致,是否先卸載或者卸載已安裝的應(yīng)用,這個提示是可以關(guān)掉的-在這邊這個設(shè)置里面把這個管理,他就不會再提示。
但是,還是會出現(xiàn)一種情況--看好他提示你安裝失敗,說簽名不一致,那這個時候應(yīng)該怎么辦?其實(shí)有一個模塊,它是專門解決簽名不一致的問題叫做核心破解,后面我們再進(jìn)行xp模塊的時候,會專門的介紹,今天的話就用一個比較簡單的方法,那就是把原來的這個應(yīng)用卸載掉接著安裝啟動,再來看第一個,你看這個時候。這邊的第一句字符串已經(jīng)漢化成功了。接著來看第二句。這個時候肯定會有人問啊,像這一句他不是英文的話,我們該怎么搜索。因為也不知道它是什么意思,這個時候就運(yùn)用到你的另外一個工具叫開發(fā)者助手,先安裝一下,看到這邊他有一個小小一個七星瓢蟲的圖標(biāo),你再放剛才的第一關(guān),點(diǎn)一下它這個圖標(biāo)。里面有一個界面資源的分析,點(diǎn)擊開始。點(diǎn)擊這一句,這個時候,他這個文本的信息就出來了,復(fù)制。再回到mt管理器。同樣,三點(diǎn)全局搜索。結(jié)果定位到這個arsc,這也是我們剛才說的一個漢化的大頭。選擇翻譯模式,點(diǎn)擊第一個這邊我們可以看到有很多的字符串,找一下剛才的第二句-在這邊,你這邊可以對他進(jìn)行修改,比如說我們改成123。剛才介紹一個一鍵漢化的功能,不過這是一個vip的功能,我暫時還沒有找到其他的比較好的替代方案,所以說這個就不做太過具體的介紹,就是在右下角這邊有一個圖標(biāo)。點(diǎn)擊,然后這邊有一個翻譯引擎,如果還沒有安裝的話。等會我跟你說從哪個地方安裝,然后點(diǎn)擊確認(rèn)-這個時候他就開始安裝。開始翻譯,我不讓他全部翻譯完。大概看一下效果,就大概就是這樣的一個效果,不過它畢竟是機(jī)翻,可能會有一些句子翻譯的比較生硬,如果你有做漢化的話。你就需要在機(jī)翻的基礎(chǔ)上再自己稍微潤色一下。剛才那個插件。他這邊有一個插件,管理這個這個就是我剛才用的那一個翻譯的插件。剛開始的話,你是什么都沒有,你需要在這個插件中心里面選擇。一個翻譯的插件,然后安裝即可,這剛才的我們?yōu)榈囊彩恰]有翻譯再來重新。
好,你們發(fā)現(xiàn)我們第二次簽名之后再進(jìn)行安裝,他又沒有出現(xiàn)剛才安裝失敗的彈窗。是為什么?因為我們給他進(jìn)行了兩次簽名,這兩次的簽名。他用的簽名文件都是一樣的,都是mt提供的,也就是他自帶的一個簽名信息。所以說他的簽名信息是一致的,他就不會出現(xiàn)簽名信息沖突的問題,就可以直接覆蓋安裝??匆幌滦Ч?,這邊就變成123最后還有一句。這句我把它放在dex文件夾文件里面。第一個搜索同樣用我們剛才的方式,這邊搜索類型,你可以選擇代碼,你可以選擇字符串,把這個完全匹配去掉,這樣的話他搜索的范圍會更小,搜索速度更快一點(diǎn),這邊就搜索到,他這個翻譯的有點(diǎn)不太精準(zhǔn),原句的意思是:理想決定高度,開發(fā)決定深度。不過他這個翻譯起來有點(diǎn)不太一樣,我們就實(shí)驗一下改成123吧,保存退出?,F(xiàn)在這三句就全部算是一個漢化,雖然說沒有完全的漢化,就是簡單修改的一個字符串。
我們剛才介紹的這三種漢化的路徑,第一個是arsc。第二個xml文件,還有最后一個dex文件。
做完漢化。再來認(rèn)識一下安卓mainfest.Xml這個文件,它是整個應(yīng)用程序的信息描述文件。定義了應(yīng)用程序的四大組件,而且它的文件名是不能修改的。來看一下,我列舉了幾個比較常見的屬性,第一個:Versioncode,他就相當(dāng)于版本號,主要用來更新。第二個versionname:版本名-是給用戶看的。第三個-package包名,也就是我們剛才在列舉雙開的原理提了一個包名。第四個。在這個name后面的雙引號里面,他會填入一些字符,并且對應(yīng)一些應(yīng)用的權(quán)限。例如這邊這個是代表網(wǎng)絡(luò)權(quán)限。當(dāng)然這個不需要去記,因為在旁邊一直都會顯示。下一個是應(yīng)用的名字,以及應(yīng)用圖標(biāo)的路徑。這有一個是應(yīng)用是否開啟debug的權(quán)限,那上面這么多條的屬性。學(xué)習(xí)這些有什么用?前兩個主要就是用來更新以及去更新這個在第三節(jié)課會講。第三條。就不需要再說了,剛才在雙開的時候已經(jīng)反復(fù)強(qiáng)調(diào)過。第四個應(yīng)用的權(quán)限,這邊用處可就大,假設(shè)你在某個夜深人靜的夜晚,
打開了某個不可告人的小軟件,一打開你發(fā)現(xiàn)開居然跟你要攝像頭的權(quán)限。但是你又有點(diǎn)慫,你不敢給他,你怕他做壞事。然后你在后臺把他的權(quán)限禁用掉。這時app又發(fā)現(xiàn)進(jìn)不去,那這個時候該怎么辦?像這種情況。你就可以反編譯達(dá)到這個main文件,把這條獲取攝像頭的權(quán)限刪掉,這樣你就可以愉快的使用這個軟件。這邊我只是簡單舉例,舉一個小小的例子,讓對付一些流氓軟件,你要么在后臺,把權(quán)限禁用掉。也可以向我剛才舉的例子把對應(yīng)的權(quán)限刪除掉、這樣的話,又不用怕他做一些壞事情了。下面兩條。顧名思義,就是可以修改應(yīng)用的名稱以及應(yīng)用的圖標(biāo)。比如說,你在上班摸魚的時候,又可以把嗶哩嗶哩的名字改成日歷。并且改成對應(yīng)的圖標(biāo)。說到這邊,肯定有人想拿bilibili開刀了,不過我先說明一下,嗶哩嗶哩,他有一個so層的簽名校驗,除非你先把它破掉,不然的話一修改再安裝,肯定會閃退。最后一個就是動態(tài)調(diào)試會用到的一個權(quán)限,在后面的課程我們再進(jìn)行講解。接下來回到教程demo,我們先反編譯一下這個xml文件,來看一下這幾條屬性,因為修改這個文件,在mt管理器里面,這屬于會員功能,所以我們以np管理器來演示。首先找到應(yīng)用的路徑向我們?nèi)绻?。mt提取的話,他都會放在一個同一的路徑,就是在這個mt2-apks在這里面點(diǎn)擊查看,然后找到這個文件。點(diǎn)擊編輯,這個時候來看。剛才說了versioncode,versionname,以及這個package還有這兩條應(yīng)用的權(quán)限,一個是訪問網(wǎng)絡(luò)的權(quán)限,一個是修改或者刪除存儲的權(quán)限,但這種你就不需要去記,因為它反編譯之后就會給你一個注釋,再去刪掉他對應(yīng)的權(quán)限即可。接下來,這個是圖標(biāo)的一個路徑,還有應(yīng)用的名字。
最后再進(jìn)行一下教程的最后一個內(nèi)容,就是修改教程demo的名字以及替換圖標(biāo),這個操作其實(shí)np管理器已經(jīng)集成一個比較簡單的方式。在功能里面有一個通用編輯看應(yīng)用圖標(biāo)名字。版本,版本名還有一些其他的信息。替換圖片。我們可以用論壇的圖片,這邊我已經(jīng)為你們準(zhǔn)備好了,首先打開電腦共享的文件夾。把文件復(fù)制進(jìn)來。選擇系統(tǒng)圖庫,把我們這個圖片把名字改成吾愛破解。保存然后安裝。剛才我們用的是mt的簽名,他現(xiàn)在跟np的簽名又不一致。那我們就先卸載。這邊的圖標(biāo)以及名字都發(fā)生了改變,我后面這一節(jié)視頻是不錄的,因為以前在做圖標(biāo)的時候沒有考慮這個分辨率的一個適配。所以是今天晚上又重新編譯了一下,后面這段是不錄的,但是代碼。都是一樣的。來看一下桌面你看名字。圖標(biāo)都發(fā)生了改變好,那以上就是第二節(jié)課的全部內(nèi)容。感謝觀看。