Android學習之反編譯——源代碼可執行

一、問題背景:
自己做的番茄工作法需要一個記事本樣式的頁面,自己寫不太好看,網上找到一個不錯的Demo,可惜沒有源碼,作者隻給出瞭APK文件,還有幾張效果圖,看著效果還不錯的樣子,打算模仿模仿啦,於是自己找反編譯例子,自己反編譯。奈何由於工作用的是C#,Android又才上手,反編譯回來的代碼各種BUG,Java又不怎麼懂,於是,在經過8個小時的奮戰之後,我終於全盤拿下瞭這個APK。在室友的建議下,就有瞭這麼一篇博文。

二、參考鏈接:
Android APK反編譯詳解(附圖):https://blog.csdn.net/ithomer/article/details/6727581
該記事本原帖地址:https://www.apkbus.com/forum.php?mod=viewthread&tid=161309

需要用到個工具:(強烈建議下最新版本的,上面文章中的鏈接裡有個子鏈接版本不是最新,結果反編譯出來各種問題,花瞭好幾個小時才解決)
dex2jar(google
code):https://code.google.com/p/dex2jar/downloads/list
jdgui(google code):https://code.google.com/p/innlab/downloads/list
三、反編譯步驟:
步驟一:打開如上鏈接所述:將apk後綴修改為zip並解壓,得到classes.dex,有些classes.dex文件會報病毒,關閉殺毒軟件(原因不詳,可能是由於該應用內置瞭廣告,廣告當中含有病毒,慎重)。它就是java文件編譯再通過dx工具打包而成的,將classes.dex復制到dex2jar.bat所在目錄dex2jar-0.0.9.15文件夾。

在命令行下定位到dex2jar.bat所在目錄,(如何定位:如果放在F盤,則直接輸入F: 然後輸入 cd [目標目錄])

運行

dex2jar.bat classes.dex

生成

classes_dex2jar.jar

然後,進入jdgui文件夾雙擊jd-gui.exe,打開上面生成的jar包classes_dex2jar.jar,即可看到源代碼瞭。

步驟二:apk反編譯生成程序的源代碼和圖片、XML配置、語言資源等文件

下載上述反編譯工具包,打開apk2java目錄下的apktool1.4.1文件夾,內含三個文件:aapt.exe,apktool.bat,apktool.jar

註:裡面的apktool_bk.jar是備份的老版本,最好用最新的apktool.jar

在命令行下定位到apktool.bat文件夾,輸入以下命令:apktool.bat d -f abc123.apk abc123,如下圖:

———————————————————————————————————-

———————————————————————————————————-

上圖中,apktool.bat 命令行解釋:apktool.bat d -f [apk文件 ] [輸出文件夾]


vcD4KPHA+CsnPw+a+zcrH1NvDx7e0seDS67XExNrI3cHLo6y+38zlztK2vMrHv72xtNfUyc/D5rXEzsTVwqOszazKsaOsuPiz9tDCsOaxvmRleDJqYXLBtL3TPC9wPgo8cD4KaHR0cDovL2Rvd25sb2FkLmNzZG4ubmV0L2RldGFpbC9mdTIyMmNzOTgvNjk4MDI3OTwvcD4KPHA+Cjxicj4KPC9wPgo8cD4KPHN0cm9uZz7LxKGiseDS67n9s8zW0LXEzsrM4qOo1ti148C0wcujqTwvc3Ryb25nPjwvcD4KPHA+CrCho6zO0rHg0uvN6rPJwcujrLT6wuvIq7K/uLTWxsHLo6y/ycrHZWNsaXBzZcXcsrvBy9T1w7Sw7KOsuPfW1mJ1Z9T1w7Sw7C4uLi66w7DJoaPV4r7N0OjSqtfjubu1xMTN0MS6zc+40MTBy6GjyOe5+8Tjz8K1xEFQS8TayN25u7Tzo6y5u7bgo6zEx8O0xNG2yLu5ysfP4LWxtPO1xKOsuMPTptPDtcS7ucrHz+C21LzytaW1xKOsttTO0rXIs/XRp9XfwLTLtaOsu7nKx7rc0NK4o7XEoaM8L3A+CjxwPgo8c3Ryb25nPs7KzOLSu6O6PC9zdHJvbmc+PC9wPgo8cD4KPGltZyBzcmM9″/uploadfile/2014/0303/20140303112958395.png” alt=”\”>

出現這種情況怎麼辦(註:Ad.class為廣告類,可忽略):

解決辦法:

找到R.class 賦值上面的數字找到對應的賦值,然後你就控件什麼的 你就 R.id.**** 佈局什麼的 你就R.layout.****

問題二:

如圖:return怎麼會在while(true)裡面,這明顯不科學好伐!!!!

———————————————————————————————————-

———————————————————————————————————-

解決辦法:

細讀上下文吧,可憐的孩紙最後的結果其實是這樣的:

根本就沒必要return好嘛!!!

———————————————————————————————————-

———————————————————————————————————-

類似的還有:

這叫什麼事兒嘛!!!for裡面帶return是幾個意思,if(); 又是怎麼個情況,我和我的小夥伴很捉急啊。

解決辦法:

細讀上下文吧,咱也沒辦法瞭……

———————————————————————————————————-

———————————————————————————————————-

註意:在layout佈局文件中,咱們拷貝的同時別忘記修改裡面自定義控件的前綴名如圖:

———————————————————————————————————-

———————————————————————————————————-

基本內容就這些啦,這些東東花瞭我一個下午加一個晚上的時間,哎,劃不來啊,早知道下別的開源的記事本瞭。後來發現這個效果也就這樣~~~

附上,我測試的APK文件,以及我已經反編譯並通過的源代碼,供各位參考使用(強烈建議自己研究一番,不研究不知道,一研究嚇一跳,可以學到不少東西):該程序僅供學習使用!!!!!!!嚴禁用於商業用途啊啊啊啊啊啊,我木有取得原作者的許可啊啊啊啊

https://download.csdn.net/detail/fu222cs98/6980463

另外,有木有朋友曉得一些大牛大神的android博客呀。俺好好拜讀拜讀。要是有大神願意留言並略微指導的話,小弟感激不盡啊,小弟還想升任總經理,出任CEO,迎娶白富美,走上人生事業的巔峰的~~

end

發佈留言