Android反編譯:手把手教你制作高德地圖車機(jī)共存版

高德地圖車機(jī)版

前言

去年年底提了新車,這車什么都好就是自帶的高德地圖版本太低了,在高德地圖已經(jīng)進(jìn)入6.x的時(shí)代,車機(jī)上自帶的才4.x逞度,更重要的是不支持升級(jí),從高德官網(wǎng)下載的車機(jī)版安裝提示簽名不同妙啃,覆蓋安裝又沒有權(quán)限档泽,就很難受,好在高德官方論壇里面有很多大佬都有提供共存版本揖赴,非常好用馆匿。

但是,作為一個(gè)Android開發(fā)人員燥滑,怎能如此沒有追求渐北,當(dāng)然得自己造一個(gè)出來啊。

前期準(zhǔn)備

首先需要感謝的是高德地圖的APK沒有進(jìn)行加固铭拧,這大大減輕了我們反編譯的工作量赃蛛,為此我們需要以下工具:

  1. apktools.jar 用于對(duì)apk進(jìn)行反編譯及重新打包 官方地址

    注意:這里的 apktools.jar 不建議使用最新版本,最新版本存在無法恢復(fù)打包問題搀菩,使用 2.6.0 版本即可呕臂。

  2. jadx 用于打開apk文件,查看其中源碼 官方地址

由于部分網(wǎng)站可能被墻無法訪問肪跋,可以選擇從我打包好的云盤下載

當(dāng)然歧蒋,最后還不能忘了下載 高德地圖車機(jī)版

最終環(huán)境結(jié)構(gòu)如下:

文件結(jié)構(gòu)

反編譯流程

反編譯獲取有效信息

首先第一步就是通過 apktools.jar 工具對(duì)官方的apk進(jìn)行解包;

# 通過 apktools.jar 進(jìn)行解包
$ java -jar .\apktool_2.6.0.jar d .\AUTO_V6.1.0.600644_release_signed.apk

命令執(zhí)行后會(huì)在當(dāng)前路徑生成一個(gè) AUTO_V6.1.0.600644_release_signed 文件夾州既,這里面就是apk解包之后的內(nèi)容谜洽,我們后續(xù)的修改也是基于這個(gè)文件夾

接著將 AUTO_V6.1.0.600644_release_signed.apk 當(dāng)作壓縮文件打開,將其中的 classes.dex 文件解壓到當(dāng)前路徑吴叶,并通過 dex2jardex 文件轉(zhuǎn)換為 jar 文件

# 將 dex 轉(zhuǎn)換為 jar
$ .\dex2jar-2.0\d2j-dex2jar.bat .\classes.dex

命令執(zhí)行后會(huì)在當(dāng)前路徑生成 classes-dex2jar.jar 文件

修改關(guān)鍵信息

修改包名

要做共存版阐虚,最重要的當(dāng)然是修改應(yīng)用包名了,打開 .\AUTO_V6.1.0.600644_release_signed\AndroidManifest.xml蚌卤,第一行里面 package 屬性就是包名敌呈,改為你自己的包名,注意不要和其它應(yīng)用重復(fù)即可造寝,我這邊是在后面加上了.coexist修改為com.autonavi.amapauto.coexist

包名

修改其它配置

僅修改包名并沒有結(jié)束,除此之外吭练,我們還需要將 AndroidManifest.xml 文件中的所有涉及到權(quán)限及內(nèi)容提供者的原 com.autonavi.amapauto 修改為 com.autonavi.amapauto.coexist

權(quán)限
內(nèi)容提供者

生成APK

重新打包成apk

在對(duì)解包后的數(shù)據(jù)進(jìn)行修改之后诫龙,我們可以再通過 apktools.jar 將文件夾重新打包為 apk

# 重新打包為apk
$ java -jar .\apktool_2.6.0.jar b .\AUTO_V6.1.0.600644_release_signed -o .\AUTO_V6.1.0.600644_coexist_unsigned.apk

執(zhí)行后會(huì)在當(dāng)前路徑生成 AUTO_V6.1.0.600644_coexist_unsigned.apk,這個(gè)時(shí)候的apk是沒有簽名的鲫咽,無法進(jìn)行安裝使用签赃。

重新簽名

對(duì)于沒有簽名的apk谷异,可以通過jarsigner -verbose -keystore 【簽名文件】-storepass 【簽名密碼】 -signedjar 【輸出APK】 【未簽名APK】 【簽名別名】進(jìn)行簽名

# 重新簽名
$ jarsigner -verbose -keystore .\wj_android.jks -storepass xxxxxx -signedjar .\AUTO_V6.1.0.600644_coexist_signed.apk .\AUTO_V6.1.0.600644_coexist_unsigned.apk xxxxxx

簽名完成會(huì)在當(dāng)前路徑生成 AUTO_V6.1.0.600644_coexist_signed.apk,這個(gè)apk就可以直接進(jìn)行安裝使用了

繞過校驗(yàn)機(jī)制

在安裝完上面的apk打開后锦聊,你會(huì)發(fā)現(xiàn)根本無法使用歹嘹,會(huì)提示應(yīng)用出現(xiàn)異常錯(cuò)誤

高德地圖異常

這個(gè)是高德地圖啟動(dòng)的時(shí)候做了簽名相關(guān)的校驗(yàn),我們修改了包名及簽名孔庭,所以無法通過校驗(yàn)

定位啟動(dòng)界面

定位啟動(dòng)界面其實(shí)很簡單尺上,還是打開之前的 AndroidManifest.xml 文件,在其中搜索 android.intent.category.LAUNCHER圆到,其所在 Activity 就是啟動(dòng)界面

啟動(dòng)頁

然后我們就可以按照這個(gè)包路徑怎抛,在之前界面的文件夾里面找到對(duì)應(yīng)的源文件了,解包出來的代碼是smali格式的

SMALI文件

一個(gè)簡單的類被拆成了這么多芽淡,并且對(duì)應(yīng)smali代碼我們也不熟悉马绝,更重要的是smali中的中文都被編碼了,排查起來更加困難挣菲,這個(gè)時(shí)候 jadx 就派上了用場

定位校驗(yàn)邏輯

打開 jadx 并將AUTO_V6.1.0.600644_release_signed.apk 拖拽到窗口里富稻,我們很快找到啟動(dòng) Activity 的代碼

FILLACTIVITY

在這里我們可以直接搜索錯(cuò)誤信息文本

錯(cuò)誤信息

我們找到方法 g() 的調(diào)用地點(diǎn)

調(diào)用地點(diǎn)

根據(jù)上面的代碼,我們能簡單的推斷白胀,方法 i() 就是跳轉(zhuǎn)進(jìn)入導(dǎo)航界面

跳轉(zhuǎn)地圖

由此可知關(guān)鍵代碼 p90.d(vd.w().e()) 如果返回為 false 則會(huì)直接打開地圖椭赋,否則就會(huì)提示異常

校驗(yàn)代碼

這里我們在回調(diào)解包出來的 smali 代碼里,找到 p90 這個(gè)文件纹笼,找到 d(Context) 這個(gè)方法

關(guān)鍵方法

修改校驗(yàn)邏輯

smali 語法和 Java 還是有很大差別的纹份,但是我們不需要精通,對(duì)應(yīng)這個(gè)校驗(yàn)方法看上去很復(fù)雜廷痘,但是我們的需求只不過是讓這個(gè)方法返回 true 即可蔓涧,因此修改如下:

修改后方法

修改之后再按照上面 打包APK 的步驟重新打包就能正常使用了。

資源修改

如果你想要給APP修改為不同的名稱笋额,不同的圖標(biāo)甚至是替換內(nèi)部的圖片元暴,這些就都很簡單了,只需要找到對(duì)應(yīng)的圖片兄猩、文本資源茉盏,直接進(jìn)行替換就可以了,不需要像修改包名那么復(fù)雜

最終效果

來看下安裝的最終效果吧

最終效果

文章作者: WangJie0822
文章鏈接: http://www.wangjie0822.top/posts/5569bb54
版權(quán)聲明: 本博客所有文章除特別聲明外枢冤,均采用 CC BY-NC-SA 4.0 許可協(xié)議鸠姨。轉(zhuǎn)載請(qǐng)注明來自 WangJie0822

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淹真,一起剝皮案震驚了整個(gè)濱河市讶迁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌核蘸,老刑警劉巖巍糯,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啸驯,死亡現(xiàn)場離奇詭異,居然都是意外死亡祟峦,警方通過查閱死者的電腦和手機(jī)罚斗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宅楞,“玉大人针姿,你說我怎么就攤上這事≡凵福” “怎么了搓幌?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迅箩。 經(jīng)常有香客問我溉愁,道長,這世上最難降的妖魔是什么饲趋? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任拐揭,我火速辦了婚禮,結(jié)果婚禮上奕塑,老公的妹妹穿的比我還像新娘堂污。我一直安慰自己,他們只是感情好龄砰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布盟猖。 她就那樣靜靜地躺著,像睡著了一般换棚。 火紅的嫁衣襯著肌膚如雪式镐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天固蚤,我揣著相機(jī)與錄音娘汞,去河邊找鬼。 笑死夕玩,一個(gè)胖子當(dāng)著我的面吹牛你弦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燎孟,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼禽作,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揩页?” 一聲冷哼從身側(cè)響起领迈,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后狸捅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡累提,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年尘喝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斋陪。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朽褪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出无虚,到底是詐尸還是另有隱情缔赠,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布友题,位于F島的核電站嗤堰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏度宦。R本人自食惡果不足惜踢匣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戈抄。 院中可真熱鬧离唬,春花似錦、人聲如沸划鸽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裸诽。三九已至嫂用,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間崭捍,已是汗流浹背尸折。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留殷蛇,地道東北人实夹。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像粒梦,于是被迫代替她去往敵國和親亮航。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 手把手教你搞懂Android反編譯 轉(zhuǎn)載時(shí)請(qǐng)必須注明出處:http://www.iosxxoo.com/2016/...
    nlpjoe閱讀 28,570評(píng)論 15 39
  • 很多人寫文章匀们,喜歡把什么行業(yè)現(xiàn)狀啊缴淋,研究現(xiàn)狀啊什么的寫了一大通,感覺好像在寫畢業(yè)論文似的,我這不廢話重抖,先直接上幾個(gè)...
    騰訊bugly閱讀 1,753評(píng)論 0 5
  • 最近抽空研究了下android 加殼技術(shù)钟沛,發(fā)現(xiàn)關(guān)于加殼的源代碼特別少畔规,即使有也不能做到版本兼容,問題又特別多恨统,對(duì)a...
    悠悠我思閱讀 1,639評(píng)論 0 3
  • 平常不太會(huì)用得到叁扫,但是一旦真的需要用到的了,而你卻不會(huì)的話畜埋,那就非常頭疼了莫绣。別人可以反編譯程序,我們對(duì)程序進(jìn)行一定...
    as_pixar閱讀 519評(píng)論 0 0
  • 前言 為什么要反編譯別人的代碼 人家比咱寫的好悠鞍,學(xué)習(xí)对室? 了解別人某個(gè)功能實(shí)現(xiàn),參考狞玛? 看中了人家的本地?cái)?shù)據(jù)庫或者其...
    青松0808閱讀 34,559評(píng)論 2 45