A. android破解第三方App
1. 執行命令 java -jar apktool.jar d xxx.apk
如果apk沒有加固,執賣握行完命令,就能看到反編譯後的smali文件,可以閱讀這些smali文件.
2. 打包命令滑裂 java -jar apktool.jar b 解包後的目錄 >xxx.apk
可以執行打包命令,將解包,修改後的smali再打包. 如果需要調試,需要在AndroidManifest.xml文件中,加上debugable.
此時得到的apk包沒有簽名,需要簽名後才能安裝
3. 簽名 jarsigner -verbose -keystore .\xxx.jks -signedjar signed.apk xxx.apk 'benzhuo'
輸入密碼後,簽名完畢,簽名後的包是signed.apk,安裝這個包.
1. 執行 java -jar apktool.jar d signed.apk. 解壓剛才簽名的安裝包
2. 用Android Studio 打開解壓後的文件夾,此時需要設置一下工程的SDK.
3. 連接上測試手機, 執行命令 adb shell am start -D -W -n 包名/LauncherActivity ,以debug模式打開應用,此時手機上打開應用會彈出提示框, Waiting For Debugger.
4. 點擊Android Studio的Attach Debugger 按鈕.
5. 選擇中讓慶調試的程序,然後就可以調試了
6. 修改了Smali文件之後,需要重新打包,然後安裝在手機上,再調試.
1. 原始類型
|smali類型|java類型|
|----|---|
|B|byte|
|C|char|
|D|double|
|F|float|
|I|int|
|J|long|
|S|short|
|V|void|
|Z|boolean|
|[x| x類型數組|
|Lpackage/Object|對象|
2. 方法
B. Android APP破解技術有哪些
1、其實准確來說不叫破解,叫「反編譯」,把APP反編譯之後可以進行你想要的功能修改,比如把收費模塊去掉,繞過一些驗證模塊,說是「破解」了也可以。
軟體最初都是代碼實現功能,然後對代碼進行編譯打包成APP,那麼想把APP還原成代碼就是「反編譯」了。
2、Android反編譯詳細教程:Android APP反編譯教程
3、對於app可以被反編譯,軟體開發者肯定比誰都清楚,所以很多技術用來對抗反編譯的,比如代碼混淆,讓你反編譯出來的代碼鬼都看不懂,其實就道高一尺魔高一丈。
C. Android 如何對apk文件進行反編譯以及重新
第一:使用apktool直接反編譯apk
第六:把生成的hellodemo.apk安裝到手機,可以看到主界面上已經顯示的是hello,而不再是你好。說明反編譯重新打包成功!
D. IDA怎麼調試Android的send函數,求教
安卓手機用ida在apk執行前動態調試其so中的函數
方法1
1、解包對方APK,插入一個:對應SMALI: android.os.SystemClock.sleep(20000);const-wide/16 v0, 0x2710 #20秒invoke-static {v0, v(X-1)}, Landroid/os/SystemClock;->sleep(J)V這里(X-1)對應.local X。
2
另外,有的包在你要調試的那個SO裡面有簽名保護,反正你重新打了包之後會導致程序運行崩潰,這個相比JAVA修改困難些,建議你用那個簽名漏洞來打包。事實上我調試那個SO也遇到過這樣,然後打了個簽名漏洞的包嵌入的延時函數就可以了。
方法2
1) am start -D -n 包名/類名;
2) IDA pro attach 進程, 設置新線程,載入so時斷點,continue;
3) 打開ddms, 查看調試埠, jdb attach port;
4) 這個時候應該已經斷在新線程,或者載入so處了,在你感興趣的so處停下來;
5) 另外用ida 打開so,查看你感興趣的函數偏移, 加上你感興趣的so的基地址,打上斷點,continue, 就大功告成了。
注意事項
windows下ida6.1不行,linux ida 6.4可以,不知是ida的問題還是windows的問題,你可以在linux下用wine測一下。
經驗內容僅供參考,如果您需解決具體問題(尤其法律、醫學等領域),建議您詳細
E. Android逆向工程師是做什麼的
必須掌握的技能
1、負責安卓程序的加解密和數據傳輸分析、拆解、逆向等工作;
2 、逆向APK,了解運行過程;
3 、Andorid本地提權獲得root許可權;
4 、熟練掌握軟體逆向靜態分析、動態調試、代碼跟蹤等;
5 、熟悉Android開發,了解打包、反編譯、破解流程;
6 、so破解。
目前了解的如下:
1,加解密:這就很多了,一般都是遇到後再折騰解密,而且解密代碼和秘鑰一般都在代碼裡面。
2,Andorid本地提權獲得root許可權,一般真機是用recovery刷機包,但是病毒提權是怎麼樣的
目前掌握的一種提權的是像輸入命令行一樣輸入su並且用pm提權
還有一種是修改init.rc文件
3,ida動態調式和代碼跟蹤
4,打包,編譯和破解的流程是什麼樣的?
5,so破解:一般就是破殼。各種殼(360,娜迦等等)
加殼的另一種常用的方式是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,做一些額外的工作。大多數病毒就是基於此原理。加殼的程序經常想盡辦法阻止外部程序或軟體對加殼程序的反匯編分析或者動態分析,以達到它不可告人的目的。這種技術也常用來保護軟體版權,防止被軟體破解。
6,了解反破解的技術
目前掌握的技術有:
1,反模擬器
2,反靜態代碼分析器如:反jeb
應該也是有很多反ida的,也就是加殼。
任職要求
1、具有豐富的Android開發分析經驗,熟悉android系統架構,熟悉android安全機制;
2、精通匯編語言、Java、C/C++語言,熟悉Smali語言,對逆向工程有濃厚興趣;
3、熟練掌握ida、gdb逆向分析工具;
4、熟練掌握軟體逆向靜態分析、動態調試、代碼跟蹤等;
5、熟悉so和Java層hook;
6、熟悉Android開發,了解打包、反編譯、破解流程;
7、深入理解arm Linux和Android底層運行機制;
8、熟練掌握各種調試工具:Smali、Dedexer、Dexmp、Apktool、Dex2jar、jd-gui。
F. 安卓反編譯出來的都是.smali文件,怎麼反編譯位原工程啊修改後還能重新編譯回去
反編譯步驟:
下載apktool 並設置環境變數
命令行進入apk目錄執行:apktool d xx.apk (如果遇到一些錯誤說明apk做了防破解處理)
執行成功後會生成xx文件夾,進入xx文件夾修改需要修改的內容,如果需要修改代碼,進入xx\smali\裡面,需要懂一些smali語法
修改完後回到命令行,執行:apktool b xx ,會在xx文件夾裡面生成一個dist文件夾,裡面的apk就是回編譯的,這個apk是沒有簽名的
下載網上的簽名工具對apk簽名,完了就可以安裝了(如果你下載了源碼或者sdk,裡面自帶一個signapk也可以簽名)
G. android怎麼動態調試dex
1.1 安裝JDK
JAVA環境的搭建請自行查找資料,這里不做詳述。
1.2 安裝Android SDK
下載地址:http://developer.android.com/sdk/index.html。
下載完安裝包後解壓到任意一目錄,然後點擊運行SDK Manager.exe,然後選擇你需要的版本進行安裝,如圖:
1.3 安裝Eclipse集成開發環境
下載地址:http://www.eclipse.org/downloads。選擇Eclipse for Mobile Developers,解壓到任意目錄即可。
1.4 創建Android Virtual Device
動態調試可以用真實的手機來做調試環境,也可以用虛擬機來做調試環境,本文採用虛擬機環境。因此創建虛擬機步驟如下:
1打開Eclipse –>windows->Android Virtual Device
2點擊Create,然後選擇各個參數如圖:
這里Target 就是前面步驟中安裝的SDK 選擇任意你覺得喜歡的版本就可以。點擊OK 就創建完畢。
1.5 安裝 APK改之理
這個是一個很好用的輔助調試的軟體,請自行搜索下載。
1.6 安裝 IDA6.6
IDA6.6開始支持安卓APP指令的調試,現該版本已經提供免費下載安裝,請自行搜搜。
0x02 Dalvik指令動態調試
2.1 准備工作
安卓APP應用程序後綴為apk,實際上是一個壓縮包,我們把它改後綴為rar打開如圖:
其中classes.dex是應用的主要執行程序,包含著所有Dalvik指令。我們用APK改之理打開apk,軟體會自動對其進行反編譯。反編譯後會有很多smail文件,這些文件保存的就是APP的Dalvik指令。
在APK改之理里雙擊打開AndroidManifest.xml,為了讓APP可調試,需要在application 標簽里添加一句android:debuggable="true" 如圖:
然後點擊保存按鈕,然後編譯生成新的apk文件。接著打開Eclipse –>windows->Android Virtual Device,選擇剛才創建的虛擬機,然後點擊start,虛擬機便開始運行。偶爾如果Eclipse啟動失敗,報錯,可以同目錄下修改配置文件:
把配置參數原本為512的改為256 原本為1024的改為512,然後再嘗試啟動。
在SDK安裝目錄有個命令行下的調試工具adb shell,本機所在目錄為E:\adt-bundle-windows-x86-20140702\sdk\platform-tools,把adb.exe注冊到系統環境變數中,打開dos命令行窗口執行adb shell 就可以進入APP命令行調試環境,或者切換到adb所在目錄來執行adb shell。
這里先不進入adb shell,在DOS命令行下執行命令:adb install d:\1.apk 來安裝我們剛才重新編譯好的APK文件。安裝完畢會有成功提示。
2.2 利用IDA動態調試
將APP包里的classes.dex解壓到任意一目錄,然後拖進IDA。等待IDA載入分析完畢,點擊Debugger->Debugger Options如圖
按圖所示勾選在進程入口掛起,然後點擊Set specific options 填入APP包名稱和入口activity 如圖:
其中包的名稱和入口activity 都可以通過APK改之理里的AndroidManifest.xml 文件獲取:
1
2
3
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.simpleencryption">
<application android:allowBackup="true" android:debuggable="true" android:icon="@drawable/creakme_bg2" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:label="@string/app_name" android:name=".MainActivity">
然後在IDA點擊Debugger->Process Options
其他默認不變,埠這里改為8700。這里默認埠是23946,我在這里困擾了很久,就是因為這個埠沒有改為8700所致。然後我們看看這個8700埠是怎麼來的。在Android SDK里提供了一款工具DDMS,用來監視APP的運行狀態和結果。在SDK的TOOLS目錄有個DDMS.BAT的腳步,運行後就會啟動DDMS。由於我的本機安裝了SDK的ADT插件,DDMS集成到了Eclips中,打開Eclips->Open perspective->ddms就啟動了DDMS。
如圖所示:
在DDMS選中某個進程後面就會注釋出它的調試埠,本機這里是8700。
到此所有的工作就准備就緒,然後就可以下斷點來調試該APP了。我們在APK改之理中在com目錄下查看smali文件 發現MainActivity.smali里有一個感興趣的函數getPwdFromPic(),那麼我們就對它下斷以跟蹤APP的運行。
在IDA里搜索字元串getPwdFromPic,發現onClick有調用該函數
我們在onClick 函數開始位置按F2下斷如圖:
然後點擊上圖中綠色三角形按鈕啟動調試如圖:
調試過程中有一個問題出現了很多次,浪費了我大量的時間,就在寫文章的時候,操作時還是遇到了這樣的問題。就是點擊啟動後IDA提示can』t bind socket,琢磨了很久終於找到原因了,當打開過一次DDMS後 每次啟動Eclips都會啟動DDMS 而8700埠正是被這個DDMS給佔用了,然後每次都會啟動失敗,解決辦法就是 虛擬機運行起來後關閉掉Eclips,這時一切就正常了!
事例中是一個APP crackme 提示輸入密碼才能進入正確界面。這個時候我們輸入123,點擊登陸,IDA中斷在了我們設置斷點的地方,這時選中ida->debugger->use source level debugger,然後點擊ida->debugger->debugger windows->locals打開本地變數窗口,如圖:
然後按F7或F8單步跟蹤程序流程,同時可以觀察到變數值的變化,也可以在IDA右鍵選擇圖形視圖,可以看到整個APP執行的流程圖:
如上圖所示 變數窗口中我們輸入了123 被轉化成的密碼是么廣亡,pw變數也顯示出了正確的密碼,其實這個時候已經很容易判斷出正確密碼了。
0x03 Andoid原生動態鏈接庫動態調試
通常為了加密保護等措施,有時dex執行過程中會調用動態鏈接庫文件,該文件以so為後綴,存在於APP文件包里。
這里我們以動態附加的方式來調試原生庫。
3.1 准備工作
1、將IDA->dbgsrv目錄下的android_server拷貝到虛擬機里,並賦予可執行許可權
DOS命令分別為:
adb shell pull d:\ android_server /data/data/sv
adb shell chmod 755 /data/data/sv
2、啟動調試伺服器android_server
命令:adb shell /data/data/sv
伺服器默認監聽23946埠。
3、重新打開DOS窗口進行埠轉發,命令:
adb forward tcp:23946 tcp:23946 如圖:
3.2 利用IDA進行動態調試
1、虛擬機里啟動要調試的APP 2、啟動IDA,打開debugger->attach->remote Armlinux/andoid debugger
埠改為23946 其他保持不變,點擊OK
如上圖,選中要調試的APP 的數據包名,然後點擊OK。
正常情況下,IDA會把APP進程掛起。
3、由於當前程序不是在動態鏈接庫領空,這時我們要重新打開一個IDA,用它打開需要調試的so文件,找到需要下斷的位置的文件偏移,並做記錄,然後關閉後面打開的這個IDA。
4、在原IDA界面按下ctrl+s鍵,找到並找到需要調試的so,同時記錄該文件的載入基址。然後點擊OK 或者cancel按鈕關閉對話框。
5、按下快捷鍵G 輸入基址+文件偏移所得地址,點擊OK 就跳轉到SO文件需要下斷的地方,這時按下F2鍵設置斷點。當APP執行到此處時便可以斷下來。
3.3 在反調試函數運行前進行動態調試
程序載入so的時候,會執行JNI_OnLoad函數,做一系列的准備工作。通常反調試函數也會放到JNI_OnLoad函數里。進行4.2中第2步時也許會遇到如下情況:
這時APP檢測到了調試器,會自動退出,那麼這時調試策略需要有所改變。
接著4.1第3步後,在DOS命令行執行命令:
adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity
來以調試模式啟動APP 如圖:
com.yaotong.crackme是APP包名稱,com.yaotong.crackme.MainActivity是執行入口 這些可以用APK改之理查看。
這時由於APP還未運行,那麼反調試函數也起不了作用,按照4.2中第2步把APP掛起。這時IDA會中斷在某個位置
然後點擊debugger->debugger opions設置如下:
點擊OK 後按F9運行APP,然後再DOS命令下執行命令:
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
這時APP會斷下來,然後按照4.2中的3、4、5補找到JNI_OnLoad函數的地址並下斷,然後按F9 會中斷下來。然後便可以繼續動態跟蹤調試分析。
H. 如何運行Smali文件
smali 是Android 應用程序(*.apk)反編譯生成的文件格式, 是一種類似於匯編語言的底層計算機語言。閱讀和書寫smali語法都需要極大的耐心和勇氣, 本文將介紹如何反編譯和運行第三方的程序(smali)代碼。
什麼是smali 文件
Android程序文件, 即apk文件, 其實是一個zip壓縮包, 其文件結構如下:
其中, classes.dex是程序的核心文件,是java語言的代碼編譯後的二進制位元組碼程序。這種位元組碼程序是編譯專供機器閱讀的, 類似於匯編語言的機器碼。然而如果想直接閱讀這部分程序, 最好的方法就是將該文件轉化為smali文件。
apktool
著名的反編譯工具 apktool 就可以完成這部分工作。 它將classes.dex文件反編譯成一堆的smali文件, 這些文件按源碼的包結構保存在各自的文件夾中。如下所示:
另外, apktool 工具強大之處在於它不僅可以反編譯apk文件, 而且可以根據現有的smali 文件生成新的apk文件。 這就給漢化apk或者去除apk內嵌廣告提供了可能。
smali語法類似於匯編語言的語法, 涉及寄存器的直接操作, 可以直接閱讀, 但羞澀難懂, 尤其是在代碼混淆之後。
dex2jar
有人做了一個專門的工具 dex2jar 將classes.dex 轉化為jar 文件, 通過 jd-gui 閱讀。
但dex2jar 並不健全, 反編譯出的java文件大部分都有編譯錯誤。可以簡單的閱讀和分析, 但若是涉及到很細致的內容, 則還是需要依賴smali。 smali 文件的編輯器推薦使用 sublime + sublime-smali , 具體請參考文章 為Sublime Text安裝smali代碼語法高亮插件 。