2016-07-11 22 views
1

この質問は、ブロックデバイスの透過的な整合性チェックを提供するdevice-mapper-verity(dm-verity)カーネル機能に関連しています。 dm-verityは、ルート権限を保持してデバイスを侵害する永続的なルートキットを防ぐのに役立ちます。アンドロイドデバイスでdmの有効性を有効または無効にする方法は?

次のコマンドは、userdebugビルドでverityを無効にしたり有効にしたりするのに問題ありません。

adb disable-verity 
adb enable-verity 

しかし、これらのコマンドはユーザービルドでは機能しません。ユーザービルドには何か別の方法がありますか?

答えて

1

要するに、私はあなたにまだこれに対する解決策を与えることはできません。

(グーグルで検索人々がここ^探して^いくつかの正確なテキストも重要である)

C:\Users\Test>adb remount 
dm_verity is enabled on the system and vendor partitions. 
Use "adb disable-verity" to disable verity. 
If you do not, remount may succeed, however, you will still not be able to write to these volumes. 
remount of system failed: Permission denied 
remount failed 

: 私が得たエラーです。しかし、ここで

は、いくつかの有用なヒントですリバースエンジニアリング/逆コンパイル時に '\ sbin \ adbd'とIDA 16進数で認識される場合 adbdこのエラーを出力するソースコードはnet:

void remount_service(int fd, void *cookie) 
{ 
    char buffer[200]; 
    char prop_buf[PROPERTY_VALUE_MAX]; 

    bool system_verified = false, vendor_verified = false; 
    property_get("partition.system.verified", prop_buf, "0"); 
    if (!strcmp(prop_buf, "1")) { 
     system_verified = true; 
    } 

    property_get("partition.vendor.verified", prop_buf, "0"); 
    if (!strcmp(prop_buf, "1")) { 
     vendor_verified = true; 
    } 

    if (system_verified || vendor_verified) { 
     // Allow remount but warn of likely bad effects 
     bool both = system_verified && vendor_verified; 
     snprintf(buffer, sizeof(buffer), 
       "dm_verity is enabled on the %s%s%s partition%s.\n", 
       system_verified ? "system" : "", 
       both ? " and " : "", 
       vendor_verified ? "vendor" : "", 
       both ? "s" : ""); 
     write_string(fd, buffer); 
     snprintf(buffer, sizeof(buffer), 
       "Use \"adb disable-verity\" to disable verity.\n" 
       "If you do not, remount may succeed, however, you will still " 
       "not be able to write to these volumes.\n"); 
     write_string(fd, buffer); 
    } 

    if (remount("/system", &system_ro)) { 
     snprintf(buffer, sizeof(buffer), "remount of system failed: %s\n",strerror(errno)); 
     write_string(fd, buffer); 
    } 

    if (hasVendorPartition()) { 
     if (remount("/vendor", &vendor_ro)) { 
      snprintf(buffer, sizeof(buffer), "remount of vendor failed: %s\n",strerror(errno)); 
      write_string(fd, buffer); 
     } 
    } 

    if (!system_ro && (!vendor_ro || !hasVendorPartition())) 
     write_string(fd, "remount succeeded\n"); 
    else { 
     write_string(fd, "remount failed\n"); 
    } 

    adb_close(fd); 
} 

http://www.contrib.andrew.cmu.edu/~rjkohler/android-tools-5.0.1+git20141213/core/adb/remount_service.c ところで私はdecomileするために使用さADBデーモンは、Android 5.1.1からです。

だからここに要点は、をpartition.vendor.verifiedとをpartition.system.verifiedあります。 「1」に設定すると、エラーが発生します。

次に、なぜ、どのようにこれらが設定されているかを調べることになります。これを防ぐにはどうすればいいですか?

しかしADB再マウントが何をするか、すべては/システム(そしておそらく/ベンダー)が再マウントされます。また、あなた自身もこれを行うことができます:

adb shell su mount -o remount /system 

この小さな行は、通常私を助け、同じことを達成します。 su - それはやってみましょう。 (お使いのデバイスが「根ざし」されている場合しかし、はいSUコマンドのみが存在します。)

1

ADB無効-VerityがADBバージョン1.0.33以上でのみ動作します。 adbのバージョンをアップグレードしてください