2014年2月26日 星期三

[Android]TaintDroid安裝教學上[環境建制及編譯android原始碼]

    雖然網路上很多人已經寫了TaintDroid安裝流程,但最近嘗試後發現很多步驟因為版本問題所以以往的文章教學已經不適用,所以自己又寫下這篇跟大家分享,以下先介紹系統環境,或許過幾年後又不適用了。
作業系統:Ubuntu13.10(64 bit)
JDK:1.6.0_45(jdk版本最好用1.6)

一.首先安裝git

    a.sudo apt-get install git

二.Install curl

    a.sudo apt-get install curl

三.安裝repo

    a.mkdir ~/bin
    b.PATH=~/bin:$PATH
    c.curl "http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo"> ~/bin/repo
       (curl網址或許會壞掉)
    d.chmod a+x ~/bin/repo

四.Get the Android source code

    a.mkdir -p ~/tdroid/[想裝的版本]
       // 版本可到https://android.googlesource.com/platform/manifest左邊branches
       // 尋找
    b.cd ~/tdroid/[想裝的版本]
    c.repo init -u https://android.googlesource.com/platform/manifest -b [想裝的版本]
    d.為了之後repo sync能順利,需要做幾件事情
        1.vim /etc/hosts,在文件中加入以下網址
           74.125.71.82 www.googlesource.com
           74.125.71.82 android.googlesource.com
           203.208.46.172 cache.pack.google.com
           59.24.3.173cache.pack.google.com
         2.進到存放android原始碼的資料夾,裡面有一個隱藏目錄.repo修改一些東西
             1.cd ~/tdroid/[想裝的版本]/.repo
             2.打開manifest.xml,把fetch=".."改為fetch="git://Android.git.linaro.org/"
             3.存檔
    f.repo sync
        // sync要很長一段時間,大概五個小時,且如果中途網路斷線便會停止,
        // 要重新執行repo sync才會繼續,所以建議大家用腳本執行,腳本創建如下
        1.gedit
        2.加入以下內容
           #!/bin/bash
           echo "======start repo sync======"
           repo sync
           while [ $? = 1 ]; do
           echo “======sync failed, re-sync again======”
           sleep 3
           repo sync
           done
        3.將這個文件存到android原始碼目錄下,副檔名為sh
        4.sh 檔名.sh 啟動腳本
    g.執行. ./build/envsetup.sh
    h.lunch 1
    i.make -j4
        //我一開始是在32bit ubuntu上安裝,結果遇到很多問題,所以改用64bit ubuntu
        //如果是在32bit上面遇到困難的朋友可以參考以下網址
        //http://www.eoeandroid.com/home.php?mod=space&uid=23065&do=blog&id=2778
        //因為時間關係所以我直接改用64bit,沒有嘗試,有時間得朋友可以嘗試修正看看
        //在make過程中會遇到很多error,基本上都是缺東西看錯哪邊
        //就安裝哪個工具
        //以下記錄我所安裝的package及error修正過程
        1.sudo apt-get install bison flex gperf lib32z1 ia32-libs
           其中ia32-libs在Ubuntu 13.10中直接安裝的話,可能會出現錯誤
           解決方法:
           1.sudo add-apt-repository "deb http://archive.ubuntu.com/
              ubuntu/ raring main restricted universe multiverse"
           2.sudo apt-get update
           3.sudo apt-get install ia32-libs
           基本上大部份的問題google都可以找的到,如果上述沒有你的問題
           可以嘗試google看看
        2.jdk必須要安裝oracle官方版本,若make時出現
           /bin/bash: jar: command not found,表示jar沒有安裝好
           解決方法:
           1.cd /usr/bin
           2.sudo ln -s -f /usr/lib/jdk1.6.0_20/bin/jar
    j.emulator
      //啟動模擬器,如果編譯完成輸入上面指令會啟動模擬器
      //啟動模擬器時,我碰到一個error如下
      //Failed to load libGL.so error libGL.so: cannot open shared object file...
      解決方法:
      1.sudo apt-get install libgl1-mesa-dev
      //這個問題發生原因可能有多種,如果安裝上面的package沒用的話
      //可以自行google找其他的解法
   
[待續...]
     

       
       

2014年2月23日 星期日

[Android]ADB指令操作模擬器

首先必須先架好android開發環境,之後可使用命令提示字元進入到Android/platform-tools,利用adb.exe連接模擬器並進行操作,adb功能如下

#ADB 連結工具:
adb devices (顯示目前有多少個模擬器正在執行)
adb shell (Android 模擬器啟動命令列模式)
adb -s <serialNumber> <command> (指定模擬器來操作)(有多台機器的話需要指定端口號)
     -ex:adb -s emulator-5554 install email.apk

# 使用 adb+push 上載檔案到SD記憶卡:
使用push指令需將檔案移到Android\platform-tools資料夾下
adb push <target_file> /<destination_path>/<filename> (<filename>可以隨意取名)       
    -ex:adb push test.apk /sdcard/rename.apk (複製檔案到 /sdcard目錄下,可重新命名)

# 使用 adb+pull 從 SD 記憶卡下載檔案
使用pull指令會將檔案複製到到Android\platform-tools資料夾下,並可重新命名
adb pull /<target_path/filename> <destination_filename> (<destination_filename>可以隨意取名)

# 安裝 APK 應用程式 
adb install <test.apk> (安裝test.apk) 
adb install -r <test.apk> (保留已設定資料,重新安裝filename.apk)
adb -s emulator-5554 (指定安裝 APK 套件在 5554 的 Android 模擬器中)

# 移除 APK 應用程式
adb uninstall <package_name>  (需要知道package的名稱)
adb uninstall -k <package_name> (移除程式時,保留資料) 此package名稱不是安裝APK套裝時的檔名或顯示在模擬器中的應用程式名稱 可以先到/data/data目錄下,查詢想移除的package名稱,指令如下
  1. adb shell ls /data/data (查詢 Package 名稱) 
  2. exit adb 
  3. uninstall package (移除查詢到的 Package)
# 啟動APP程式
利用指令啟動APP需要知道package_name和activity_name
所以需要先用aapt dump APP的資料,指令如下
$aapt dump badging <path-to-apk>
      -ex:aapt dump badging com.google.android.apps.maps-1.apk      
之後會獲得以下資訊
package: name='com.google.android.apps.maps' versionCode='704001112' versionName='7.4.0' sdkVersion:'17' targetSdkVersion:'17' uses-permission:'android.permission.INTERNET' uses-permission:'com.google.android.providers.gsf.permission.READ_GSERVICES' ... launchable-activity: name='com.google.android.maps.MapsActivity'  label='Maps' icon=''

把剛剛的 package_name 還有 launchable-activity 搭配以下指令
# adb shell am start -n <package_name>/<launchable-activity>
      -ex:$ adb shell am start -n com.google.android.apps.maps/com.google.android.maps.MapsActivity
#模擬 Keyevent
基本的使用如下此為模擬按 Home 鍵
# adb shell input <keycode>
    -ex:$ adb shell input 3
keycode 的對應如下表
0 -> "KEYCODE_UNKNOWN"
1 -> "KEYCODE_MENU"
2 -> "KEYCODE_SOFT_RIGHT"
3 -> "KEYCODE_HOME"
4 -> "KEYCODE_BACK"
5 -> "KEYCODE_CALL"
6 -> "KEYCODE_ENDCALL"
7 -> "KEYCODE_0"
8 -> "KEYCODE_1"
9 -> "KEYCODE_2"
10 -> "KEYCODE_3"
11 -> "KEYCODE_4"
12 -> "KEYCODE_5"
13 -> "KEYCODE_6"
14 -> "KEYCODE_7"
15 -> "KEYCODE_8"
16 -> "KEYCODE_9"
17 -> "KEYCODE_STAR"
18 -> "KEYCODE_POUND"
19 -> "KEYCODE_DPAD_UP"
20 -> "KEYCODE_DPAD_DOWN"
21 -> "KEYCODE_DPAD_LEFT"
22 -> "KEYCODE_DPAD_RIGHT"
23 -> "KEYCODE_DPAD_CENTER"
24 -> "KEYCODE_VOLUME_UP"
25 -> "KEYCODE_VOLUME_DOWN"
26 -> "KEYCODE_POWER"
27 -> "KEYCODE_CAMERA"
28 -> "KEYCODE_CLEAR"
29 -> "KEYCODE_A"
30 -> "KEYCODE_B"
31 -> "KEYCODE_C"
32 -> "KEYCODE_D"
33 -> "KEYCODE_E"
34 -> "KEYCODE_F"
35 -> "KEYCODE_G"
36 -> "KEYCODE_H"
37 -> "KEYCODE_I"
38 -> "KEYCODE_J"
39 -> "KEYCODE_K"
40 -> "KEYCODE_L"
41 -> "KEYCODE_M"
42 -> "KEYCODE_N"
43 -> "KEYCODE_O"
44 -> "KEYCODE_P"
45 -> "KEYCODE_Q"
46 -> "KEYCODE_R"
47 -> "KEYCODE_S"
48 -> "KEYCODE_T"
49 -> "KEYCODE_U"
50 -> "KEYCODE_V"
51 -> "KEYCODE_W"
52 -> "KEYCODE_X"
53 -> "KEYCODE_Y"
54 -> "KEYCODE_Z"
55 -> "KEYCODE_COMMA"
56 -> "KEYCODE_PERIOD"
57 -> "KEYCODE_ALT_LEFT"
58 -> "KEYCODE_ALT_RIGHT"
59 -> "KEYCODE_SHIFT_LEFT"
60 -> "KEYCODE_SHIFT_RIGHT"
61 -> "KEYCODE_TAB"
62 -> "KEYCODE_SPACE"
63 -> "KEYCODE_SYM"
64 -> "KEYCODE_EXPLORER"
65 -> "KEYCODE_ENVELOPE"
66 -> "KEYCODE_ENTER"
67 -> "KEYCODE_DEL"
68 -> "KEYCODE_GRAVE"
69 -> "KEYCODE_MINUS"
70 -> "KEYCODE_EQUALS"
71 -> "KEYCODE_LEFT_BRACKET"
72 -> "KEYCODE_RIGHT_BRACKET"
73 -> "KEYCODE_BACKSLASH"
74 -> "KEYCODE_SEMICOLON"
75 -> "KEYCODE_APOSTROPHE"
76 -> "KEYCODE_SLASH"
77 -> "KEYCODE_AT"
78 -> "KEYCODE_NUM"
79 -> "KEYCODE_HEADSETHOOK"
80 -> "KEYCODE_FOCUS"
81 -> "KEYCODE_PLUS"
82 -> "KEYCODE_MENU"
83 -> "KEYCODE_NOTIFICATION"
84 -> "KEYCODE_SEARCH"
85 -> "TAG_LAST_KEYCODE"

如果想要模擬 click 或是 swipe 的手勢
可以使用以下的指令
$ adb shell input tap <x> <y>       # 模擬 click 
$ adb shell input swipe <x1> <y1> <x2> <y2>     # 模擬 swipe
#其他指令
$ls
$dmesg (查看 Android Linux Kernel 運作訊息)
ls - 顯示檔案目錄
cd - 進入目錄
rm - 刪除檔案
mv - 移動檔案
mkdir - 產生目錄
rmdir - 刪除目錄
$adb logcat (監控模擬器運作紀錄,以Ctrl + c 離開監控模式)
$adb bugreport (產生 adb 除錯報告)
$adb get-state (獲得 adb 伺服器運作狀態)
$adb start-server (啟動 adb 伺服器)
$adb kill-server (關掉 adb 伺服器)
$adb forward tcp:6100 tcp:7100 (更改模擬器網路 TCP 通訊埠)
$adb shell ps -x (顯示 Android 上所有正在執行的行程)
$adb version (顯示 adb 版本)
$adb help (顯示 adb 指令參數)