導航:首頁 > 源碼編譯 > android編譯技術

android編譯技術

發布時間:2023-04-07 07:34:29

『壹』 Gradle編譯-APK編譯過程

在早期的android設備中(Android5.0以下)都是使用的Dalvik虛擬機,Dalvik支持經過轉換的.dex文件。.dex格式是專為Dalvik設計的一種適合內存和處理器速度有限的系統。

但是在Android5.0,google用ART全面取代的Dalvik。Android7.0中又添加了JIT編譯器,使得Android性能也有不少提升。

上圖為從Android源文件開始,最終到APK的過程。
下面博客文章詳細介紹了dalvik虛擬機,可供參考學習。
https://www.cnblogs.com/lao-liang/p/5111399.html

dvm(art)和jvm屬於不同的虛擬機平台,不同平台要求執行的文件類型也就不一樣
dvm(art)--.dex文件
jvm--.class文件

在編譯和生成上
java source --.class文件 ---jvm執行
java source --.class文件 ---.dex文件 --- dvm執行

Android Runtime (ART) 是 Android 上的應用和部分系統服務使用的託管式運行時。ART 及其前身 Dalvik 最初是專為 Android 項目打造的。作為運行時的 ART 可執行 Dalvik 可執行文件並遵循 Dex 位元組碼規范。

ART 和 Dalvik 是運行 Dex 位元組碼的兼容運行時,因此針對 Dalvik 開發的應用也能在 ART 環境中運作。不過,Dalvik 採用的一些技術並不適用於 ART。

ART的功能
1.預先 (AOT) 編譯
使用ART編譯器時,應用程序在安裝期間就已經把dex位元組碼翻譯並存儲在設備上,運行時,只需要執行這些翻譯好的就可以了,因此執行速度也快了不少。
2.垃圾回收方面的優化

3.開發和調試方面的優化

構建流程涉及許多將項目轉換成 Android 應用軟體包 (APK) 的工具和流程。構建流程非常靈活,因此了解它的一些底層工作原理會很有幫助。

『貳』 Android APP的破解技術有哪些如何防止反編譯

破解技術的話,使用一個很好的工具就是ju-i,可以睜森晌進行悉鋒快速的反編譯春數,大多數的java代碼都能反編譯出來,為了防止反編譯,谷歌也推出了混淆的工具,具體使用請網路一下,就不貼答案了。

『叄』 Android APP的破解技術有哪些如何防止反編譯

可以考旦梁慮對應用進行加密保護,通過使用APP加殼技術,可以有效保護自己的核心代碼演算法,提高破解、盜版程序和二次打包的難度;技術層面,APP加殼可以緩解埋巧代碼注入、動態調試、內存注入攻擊,加強了APP的安全。愛加密服務商一直在保護移動應用的安全發展,採用三代加密技術,通過dex加殼原理、內存防護、so庫文件加密、資源文件加密等多個技術協同保護手段,為移動互聯網開發者和移動互聯網企業提供安全可靠的彎遲鍵APP保護方案。

『肆』 Android反編譯(三)— 手動編譯

PS: 最近沒工作,沒工作就沒需求,沒需求就沒什麼技術總結的靈感,那就沒更新什麼。但是兩個月不更新了,要是三個月不更新就會出大事,所以這次打算做一件有意思又不難的事。
之前有發文章寫過反編譯,今天就來試試反編譯之正編譯,開玩笑的,就是試試手動編譯的過程, 平時我們在項目中編譯出包都是使用Gradle直接執行assemble任務就能解決,我打算試試手動模擬整個過程。當然我也是第一次這樣搞,所以如果有寫得不對的地方,還望指出。

眾所周知,apk實質上就是一個壓縮包。復習一下,我們寫個最簡單的Demo,然後打包,然解壓,注意是解壓,不是反編譯,意義是不同的。

注意我這個Demo很簡單,什麼都不引入

然後我們看看整個出包的過程,隨便從網上拿張圖

然後這里我們用Android SDK給我們提供的工具來完成整個流程,工具在sdk文件夾下的build-tools文件夾下,有什麼aapt.exe、dx.bat,用的就是這些

這步應該是整個流程最簡單的吧,我感覺,所以從最簡單的開始。
我們先看看生成的dex有什麼

對比項目,我是一開始最基本的項目,什麼都沒動,所以只有一個MainActivity.clas,所以這里肯定是要先想辦法得到BuildConfig.class和R.class。

輸入命令
aapt p -f -m -J <輸出路徑> -S <res路徑> -I <android.jar路徑> -M <Manifest路徑>

下一步,我們需要BuildConfig.class
這個BuildConfig.java是由gradle在我們配置好gradle之後自己幫我們生成的,所以我們直接拿來用,然後再javac就得到class文件了

然後我們再編譯我們的MainActivity.java並將它們放到同一個文件夾下, MainActivity因為引用了Android.jar和R文件,所以編譯時注意點,我為此被動好好的復習了一遍javac,都是淚

最後一步,我們用dx工具就能打出dex文件了

然後執行命令就得到一個Dex文件,看看這個文件裡面和上面直接打出的apk中的Dex文件有什麼不同:

看圖,我們上一步已經生成.dex了,那麼我們需要和compiled Resource 還有 Other Resource 一起生成APK。

我們先來生成compiled Resource,也就是resources.arsc
發現之前使用aapt生成R文件的時候沒寫完整,當時可以加一個-F參數直接生成arsc和Manifest

導出的abc.zip裡面就有resources.arsc和AndroidManifest.xml。
因為之前寫漏了,所以肯定要重新編一次MainActivity.java和Dex

我們把剛才的dex文件和aapt生成的resources.arsc、AndroidManifest.xml和res放到一個文件夾裡面。
PS:res文件夾也是上面aapt的命令生成的
然後我們對比這個文件夾和之前apk解壓的文件夾

最後運行

看來是成功了。

再說說遇到的還有兩個問題,並說下我解決問題的思路
(1)我把它們都放到一個文件夾之後,我壓縮成壓縮包,然後改後綴成.apk,然後發現安裝不了,我就直接反編譯,發現發編譯失敗,提示包有問題,以我多點玩包的經驗,我感覺就是壓縮工具出了問題,然後我去下個「好壓」(這不是廣告啊),然後就能正常反編譯了。
(2)但是還是安裝不了,再根據我多年的玩包經驗,我感覺是簽名問題,然後我隨便給這個包上一個簽名,就能正常安裝得到上圖的結果了。

總體來說,還真挺好玩的,這整個過程,就是翻車了幾次。做完之後感覺非常牛逼,為什麼這樣說,因為我知道這整個過程,我就可以做到,我不經過gradle來打包,我自己寫個python腳本來調用aapt和dx來打包也是能做到的。
當然上面純屬異想天開,因為這是個什麼都沒有的Demo所以覺得簡單,要是一個真實的項目,我感覺肯定要有很多坑,別的先不說,一個項目那麼多依賴關系,我這javac要搞死人。
最後如果有不對的地方,希望有大佬能夠指出,畢竟能運行也不能證明完全沒問題。然後我使用的build-tools是28的,不敢保證其它版本包括以後版本的玩法都一樣。

『伍』 Android APP的破解技術有哪些如何防止反編譯

由於Android系統的開放性,導致Android APK很容易被他人破解或是反編譯,下面給大家介紹常用的APP破解工具和技術要求。同時根據自己以往的防破解經驗,跟大家分析下如何防止反編譯。
Android APK運行環境依賴的文件/文件夾 res、DEX、主配文件Lib 只是簡單的加密甚至沒有任何保護措施。APKtool(一種反編譯工具)可輕易將其輕松破解,再配合其他各種工具基本可以做到:源碼暴露(代碼混淆也幾乎起不到任何安全作用)、資源文件裸奔、主配文件可任意修改、核心SO庫暴露、暴力破解惡意利用等。部分大公司會對其應用APK包進行防二次打包和防APKtool破解,但其代碼都是寫在JAVA層,另外APKtool的可升級導致其安全保護級別也是非常低的。

『陸』 Android APP的破解技術有哪些如何防止反編譯

1)APKtool 2)dex2jar 3)jd-gui 4)簽名工具
相關技術的基本要求
1)具有一定的閱讀JAVA代碼的能力
2)稍微有點Android基礎,越多越好
3)會用歷搏eclipse的一些Android調試的相關工具
4)了解一下smali的語法規范和欄位的自定范圍
5)有點應變能力思想轉換能力、
6)雖然代碼的修改是修改其smali文件(用到smali語法),雖然其語言是非常復雜的,但是我們能夠變通就行了,但是要求了解一下smali的語法規范和跡毀欄位的自定范圍。

了解以上方法可以非常簡單破解Android APK,破解後,應用里的頁面布局、代碼邏輯、結構演算法等都能一目瞭然。所以為了姿爛備避免被他人,尤其是競爭對手了解到這些,防破解和反編譯尤為重要。我試過代碼混淆,但是代碼混淆只是對類名進行了變換,增加了破解者的閱讀難度,並不能真正阻止反編譯工程。下面是進行過代碼混淆的APK代碼結構,能看到只是對類名做了變換,變成a、b、c等這樣的名稱。但是仍然可以進行反編譯。

後來又嘗試使用360加固保對APK進行加固保護,發現原有的代碼程序被隱藏起來了,沒法再進行反編譯工作。

所以作為移動應用開發者,適當了解一些破解和反編譯工作有利於保護自己的應用安全。如果不防患於未然,一旦出現盜版情況,那麼你的APP很可能從此被市場所拋棄。

『柒』 Android APP的破解技術有哪些如何防止反編譯

APP破解利用現有的各種工具:
1)APKtool
2)dex2jar
3)jd-gui
4)簽名工具

當然反編譯工具也有很多方面的,按需要自己搜。

app發布前,最好做一下掃描和加固,應用掃描可以通過靜態代碼分析、雀頃老動態數據跟蹤,定位出風險代碼(目前好多都是只告訴APK包裡面有風險),同時監控敏感數據的異常行為。
加固可以在一定程度上保護自己核心代碼演算法,提高破解/盜版/二次打包的難度,緩解代碼注入/動態調試/內存注入攻擊等
但也對應用的兼容性有一定影響,加固技術不行的話,還會影響頃升程序運行效率乎肢.
目前市面上有很多第三方加固的平台, 如果新應用發布前需要掃描或者加固的話,可以先試試免費的,例如騰訊御安全,建議自己先去掃描測試下。

『捌』 Android APP的破解技術有哪些如何防止反編譯

可以對APP進行一芹鄭個加密,有效得防止APP被破解、反編譯嫌槐頌。目前有很多APP服務商提供了加密的服明差務,比如愛加密等。

『玖』 怎麼在安卓中編譯vim

一般都不會在手機上編譯程序的。即使是手機上用的軟體也是在電腦上編譯好在傳到手機上去。這稱作交叉編譯,這種技術現在已經很成熟了。

你如果想試在手機上編譯,可以先寫一個簡單的小程序(比如 hello world)看能編譯並執行么。這步主要是確認你的編譯環境已經就緒。並不是說你的手機安裝了那些工具,就一定能正常工作,所以還是有必要一試。
然後去 vim 源碼的根目錄,執行 ./configure 試試。看看會不會報什麼錯(我估計會有一堆)。如果沒有,那麼很可能按在電腦上編譯的步驟正常編譯試試了。這方面教程很多,自己搜搜即可。

『拾』 Android APP的破解技術有哪些如何防止反編譯

AndroidAPP破解主要依靠利用現有的各種工具,如下:1)APKtool2)dex2jar3)jd-gui4)簽名工具防止反編譯,介紹一種有效對抗native層代碼分析的方法——代碼混淆技術。代碼混淆的學術定義如下:代碼混淆(codeobfuscation)是指將計算機程序的代碼,轉換成一種功能上等價,所謂功能上的等價是指其在變換前後功能相同或相近。其解釋如下:程序P經過混淆變換為P『,若P沒有結束或錯誤結束,那麼P』也不能結束或錯誤結束;而且P『程序的結果應與程序P具有相同的輸出。否則P』不是P的有效的混淆。目前對於混淆的分類,普遍是以Collberg的理論為基礎,分為布局混淆(layoutobfuscation)、數據混淆(dataobfuscation)、控制混淆(controlobfuscation)和預防混淆(preventiveobfuscation)這四種類型。騰訊御安全保護方案提供了以上所述四種混淆分類的多維度的保護,布局混淆方面,御安全提供了針對native代碼層中的函數名進行了混淆刪除調試信息等功能;數據混淆方面,御安全提供了針對常量字元串加密及全局變數的混淆的功能;控制混淆方面,御安全針對代碼流程上,提供了扁平化,插入bogus分支以及代碼等價變換等功能;預防混淆方面,御安全在混淆過程中加入了針對主流反編譯器的預防混淆的代碼,能夠有效地抵抗其分析。御安全還對應用開發者提供不同等級的保護力度及多種混淆方式的功能的選擇,用戶可以根據自己的需求定製不同的混淆功能保護。同時,御安全保護方案除了提供代碼混淆保護方面的技術,還提供代碼虛擬化技術及反逆向、反調試等其他安全保護方案,綜合使用多種保護方案可以有效地提高代碼安全。

閱讀全文

與android編譯技術相關的資料

熱點內容
單片機的功能模塊 瀏覽:769
安卓手機如何錄制視頻長時間 瀏覽:283
安全問題app哪個好 瀏覽:445
壓縮水會變冰嗎 瀏覽:526
小說配音app哪個靠譜 瀏覽:820
編譯iso 瀏覽:944
照片生成pdf格式 瀏覽:194
病歷轉pdf 瀏覽:835
雲伺服器配硬體 瀏覽:978
伺服器10k什麼意思 瀏覽:21
pdfeditor漢化 瀏覽:884
新科學pdf 瀏覽:746
現在還有c語言編譯嗎 瀏覽:675
哪裡買到單片機 瀏覽:480
linux文件打開數量 瀏覽:510
編譯原理中什麼是l屬性文法 瀏覽:372
硬碟加密時出現的問題 瀏覽:61
如何退域命令 瀏覽:108
看書的app哪裡看 瀏覽:291
伺服器怎麼調大 瀏覽:4