在學習Android軟體安全的過程中,經常要用到Android的動態調試。但是呢,一般的Android應用在發佈的時候都是發佈版的不能直接被調試,為了能使Android應用能夠支持調試就需要對Android應用進行解包以及打包加android:debuggable="true"屬性處理,比較煩的是有 ...
在學習Android軟體安全的過程中,經常要用到Android的動態調試。但是呢,一般的Android應用在發佈的時候都是發佈版的不能直接被調試,為了能使Android應用能夠支持調試就需要對Android應用進行解包以及打包加android:debuggable="true"屬性處理,比較煩的是有時候一些Android應用加了對抗的處理,並不能順利打包處理,這就糾結了。
@根據android的官方文檔,如果要調試一個App裡面的dex代碼,必須滿足以下兩個條件中的任何一個:
1.App的AndroidManifest.xm中Application標簽必選包含屬性android:debuggable="true";
2./default.prop中ro.debuggable的值為1。
由於正常的軟體發佈時都不會把android:debuggable設置為true,所以要達成條件1)需要對app進行重新打包,這不僅每次分析一個App都重覆操作,而且很多軟體會對自身進行校驗,重打包後執行會被檢測到,所以想辦法滿足第2)個條件是個一勞永逸的辦法,我實際使用的方法就是滿足第二個條件。由於default.prop是保存在boot.img的ramdisk中,這部分每次重新啟動都會重新從rom中載入,所以要到目的必須修改boot.img中的ramdisk並重新刷到設備中。我測試使用的設備為Hornor8,具體的刷機包為
https://cn.club.vmall.com/thread-15621449-1-1-4007.html
依賴的工具:
Linux環境:
unpackbootimg 解包
mkbootimg 打包
clone https://github.com/huaixzk/unpackbootimg 執行make得到以上兩個命令
具體步驟如下:
sain@Linux ~/ftp $ mkdir boot2 1. 解包boot.img sain@Linux ~/ftp $ ./unpackbootimg -i boot.img -o boot2 BOARD_KERNEL_CMDLINE loglevel=4 page_tracker=on slub_min_objects=12 unmovable_isolate1=2:192M,3:224M,4:256M androidboot.selinux=enforcing BOARD_KERNEL_BASE 00478000 BOARD_NAME BOARD_PAGE_SIZE 2048 BOARD_HASH_TYPE unknown BOARD_KERNEL_OFFSET 00008000 BOARD_RAMDISK_OFFSET 07b88000 BOARD_SECOND_OFFSET 00e88000 BOARD_TAGS_OFFSET 07588000 BOARD_OS_VERSION 7.0.0 BOARD_OS_PATCH_LEVEL 2018-01 2. 繼續解包boot.img-ramdisk.gz sain@Linux ~/ftp $ cd boot2 sain@Linux ~/ftp/boot2 $ mkdir ramdisk sain@Linux ~/ftp/boot2 $ cd ramdisk/ sain@Linux ~/ftp/boot2/ramdisk $ gzip -dc ../boot.img-ramdisk.gz | cpio -i 24153 blocks 3. 編輯 default.prop 並保存 4. 重新生成boot.img-ramdisk.gz, 這裡改了個名 cd .. sain@Linux ~/ftp/boot2 $ /home/sain/aosp/a2h_dev_prd/out/host/linux-x86/bin/mkbootfs ramdisk | gzip > ramdisk-new.gz 5. 重新生成boot.img cd .. sain@Linux ~/ftp $ ./mkbootimg --kernel boot2/boot.img-zImage --ramdisk boot2/ramdisk-new.gz --cmdline "oglevel=4 page_tracker=on slub_min_objects=12 unmovable_isolate1=2:192M,3:224M,4:256M androidboot.selinux=permissive" --pagesize 2048 --base 00478000 --kernel_offset 00008000 --ramdisk_offset 07b88000 --second_offset 00e88000 --tags_offset 07588000 --os_version 7.0.0 --os_patch_level 2018-01 --output ../aosp/share/boot.img 6. 刷機 fastboot flash boot boot.img fastboot reboot
default.prop需要修改兩處
ro.secure=0
security.perf_harden=1
ro.adb.secure=1
ro.allow.mock.location=0
ro.debuggable=1
註意ro.adb.secure=1這裡不要修改,保持預設, 因為我們並不是真正的userdebug模式
否則adb 認證談框不出來, 就完全用不了adb
sudo adb root
error: device unauthorized.
This adbd's $ADB_VENDOR_KEYS is not set; try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.
有機會再研究下如何root