// Copyright (C) 2023 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. cc_binary { name: "shell-as", cflags: [ "-Wall", "-Werror", "-Wextra", ], srcs: [ "*.cpp", ":shell-as-test-app-apk-cpp", ], header_libs: ["libcutils_headers"], static_executable: true, static_libs: [ "libbase", "libcap", "liblog", "libseccomp_policy", "libselinux", ], arch: { arm: { srcs: ["shell-code/*-arm.S"] }, arm64: { srcs: ["shell-code/*-arm64.S"] }, x86: { srcs: ["shell-code/*-x86.S"] }, x86_64: { srcs: ["shell-code/*-x86_64.S"] } } } // A simple app that requests all non-system permissions and contains no other // functionality. This can be used as a target for shell-as to emulate the // security context of the most privileged possible non-system app. android_app { name: "shell-as-test-app", manifest: ":shell-as-test-app-manifest", srcs: ["app/**/*.java"], sdk_version: "9", certificate: ":shell-as-test-app-cert", } // https://source.android.com/docs/core/ota/sign_builds#release-keys // Generated by running: // $ANDROID_BUILD_TOP/development/tools/make_key \ // shell-as-test-app-key \ // '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com android_app_certificate { name: "shell-as-test-app-cert", certificate: "shell-as-test-app-key", } genrule { name: "shell-as-test-app-manifest", srcs: [ ":permission-list-normal", "AndroidManifest.xml.template" ], cmd: "$(location gen-manifest.sh) " + "$(location AndroidManifest.xml.template) " + "$(location :permission-list-normal) " + "$(out)", out: ["AndroidManifest.xml"], tool_files: ["gen-manifest.sh"], } // A source file that contains the contents of the above shell-as-test-app APK // embedded as an array. cc_genrule { name: "shell-as-test-app-apk-cpp", srcs: [":shell-as-test-app"], cmd: "(" + " echo '#include ';" + " echo '#include ';" + " echo '';" + " echo 'namespace shell_as {';" + " echo 'const uint8_t kTestAppApk[] = {';" + " $(location toybox) xxd -i < $(in);" + " echo '};';" + " echo 'void GetTestApk(uint8_t **apk, size_t *length) {';" + " echo ' *apk = (uint8_t*) kTestAppApk;';" + " echo ' *length = sizeof(kTestAppApk);';" + " echo '}';" + " echo '} // namespace shell_as';" + ") > $(out)", out: ["test-app-apk.cpp"], tools: ["toybox"] }