diff --git a/examples/multiple-apps.ts b/examples/multiple-apps.ts index df49fdd..910bf14 100644 --- a/examples/multiple-apps.ts +++ b/examples/multiple-apps.ts @@ -29,9 +29,7 @@ import { pause, startAnalysis } from '../src/index'; // so you can easily loop through an array of apps. const apks = await readdir(apkFolder); for (const apkFile of apks) { - const appAnalysis = await analysis.startAppAnalysis({ - main: path.join(apkFolder, apkFile), - }); + const appAnalysis = await analysis.startAppAnalysis(path.join(apkFolder, apkFile)); await analysis.resetDevice(); await analysis.ensureTrackingDomainResolution(); diff --git a/package.json b/package.json index 0ae93db..92d2772 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ }, "prettier": "@baltpeter/prettier-config", "dependencies": { - "appstraction": "^0.0.0", + "appstraction": "^0.1.2", "cross-fetch": "^3.1.5", "execa": "^7.0.0", "p-timeout": "^6.1.1", diff --git a/src/index.ts b/src/index.ts index dd34d06..3e0f828 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,8 +9,6 @@ import { dirname, join } from 'path'; import process from 'process'; import { temporaryFile } from 'tempy'; import { fileURLToPath } from 'url'; -import type { AppPath } from './path'; -import { getAppPathAll, getAppPathMain } from './path'; import { awaitMitmproxyEvent, awaitProcessClose, dnsLookup, killProcess } from './util'; /** A capability supported by this library. */ @@ -71,7 +69,7 @@ export type Analysis< * @returns An object to control the analysis of the specified app. */ startAppAnalysis: ( - appPath: AppPath, + appPath: Platform extends 'android' ? string | string[] : string, options?: { resetApp?: boolean; noSigint?: boolean } ) => Promise>; /** Stop the analysis. This is important for clean up, e.g. stopping the emulator if it is managed by this library. */ @@ -333,7 +331,11 @@ export function startAnalysis< }); }, startAppAnalysis: async (appPath, options) => { - const appPathMain = getAppPathMain(appPath); + if (typeof appPath !== 'string' && analysisOptions.platform !== 'android') + throw Error('Could not install app: Split app files are only supported on Android.'); + + // This might not be the main APK, but we don‘t care because we should get the same meta information out of all the APKs + const appPathMain = typeof appPath === 'string' ? appPath : appPath[0] ?? ''; const appMeta = await parseAppMeta(appPathMain); if (!appMeta) throw new Error(`Could not start analysis with invalid app: "${appPathMain}"`); @@ -342,7 +344,7 @@ export function startAnalysis< traffic: {}, }; - const installApp = () => platform.installApp(getAppPathAll(appPath).join(' ')); + const installApp = () => platform.installApp(appPath); const uninstallApp = () => platform.uninstallApp(appMeta.id); let inProgressTrafficCollectionName: string | undefined; @@ -517,4 +519,3 @@ export type { SupportedPlatform, SupportedRunTarget, } from 'appstraction'; -export { AppPath, getAppPathAll, getAppPathMain }; diff --git a/src/path.ts b/src/path.ts deleted file mode 100644 index 845a3a3..0000000 --- a/src/path.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The path to the installation files for an app. - * - * Can either be a string if the app is a single file, or an object specifying a main file and additional files (for - * split APKs on Android). - */ -export type AppPath = string | { main: string; additional?: string[] }; - -/** Utility function to get the main file from an {@link AppPath}. */ -export const getAppPathMain = (appPath: AppPath) => (typeof appPath === 'string' ? appPath : appPath.main); -/** Utility function to get an array of all files from an {@link AppPath}. */ -export const getAppPathAll = (appPath: AppPath) => - typeof appPath === 'string' ? [appPath] : [appPath.main, ...(appPath.additional ?? [])]; diff --git a/yarn.lock b/yarn.lock index e2ed574..6a4d790 100644 --- a/yarn.lock +++ b/yarn.lock @@ -246,6 +246,90 @@ resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.0.tgz#03c6bfcd3acb179ea69546c20d50895b9d623ada" integrity sha512-Wg0+9615kHKlr9iLVcG5I+/CHnf6w3x5UADRv8Ad16yA0Bu5l9eVOROjV7aHPG6uC8ZPFIVVaoSjDChD+Y0pzg== +"@napi-rs/lzma-android-arm-eabi@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-android-arm-eabi/-/lzma-android-arm-eabi-1.1.2.tgz#3866356a277ead52c6a04abff3600ad52e45d2e6" + integrity sha512-b30+yEjSU1XucdTu2V8pGvpCVlFYlXMFHn89OjV+RhkQj4z3DwSPTZu17iea7MRSuP4bZzZkUG7t18lNDD9O4Q== + +"@napi-rs/lzma-android-arm64@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-android-arm64/-/lzma-android-arm64-1.1.2.tgz#6a4dcd77909c45710a598d99a769382356779ca9" + integrity sha512-SW83wFds4AK4+eNnFl8bN25ypZU12/dae3h4wxz4l1czNsxomr4zN/feuymDzRURFU1nJti4lLK6fmRJW4ej5g== + +"@napi-rs/lzma-darwin-arm64@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-darwin-arm64/-/lzma-darwin-arm64-1.1.2.tgz#7074cf0ce8a2d805b163d57f321df7f93c8ea70a" + integrity sha512-YM3SDU5Stt+M5tR8FQke5Puk6KIWOnSb+cfNbaM4zRvASpJVqdCEpblaSsgyuhsCfC8VjeEfohL4hkuAq5Ovzw== + +"@napi-rs/lzma-darwin-x64@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-darwin-x64/-/lzma-darwin-x64-1.1.2.tgz#9d1e51fd4037eb0722f9cae9c8b51b5c6e17c36a" + integrity sha512-CO+mXmUIyUZZcQngGK5vY71xBNMbgfA3tu4QVkExlQE/JfeQ+JiIOB/ksOMNMkBJdK12nSrFitCUyuZ0eS8JXQ== + +"@napi-rs/lzma-freebsd-x64@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-freebsd-x64/-/lzma-freebsd-x64-1.1.2.tgz#08b98cbc19e3e6db8ce81a95b1a791243bf32995" + integrity sha512-Za+QobA52xOMSlT2n30TFtA200qfZKPgSuDjVqURc+DyzcQLgG94n+C+J1YoY0iyfvlRdK0P32MBPHSq5fN/Fw== + +"@napi-rs/lzma-linux-arm-gnueabihf@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm-gnueabihf/-/lzma-linux-arm-gnueabihf-1.1.2.tgz#6119d1718d82ac61ccfbb6413c24d9deef87f32b" + integrity sha512-DBLyr61rcsmjbBPiUag0O2CDUZ/g+puCqRQdgXIQkH6pDV+Mn7ey2xq12eBwmoB4qASL1xU1SVChBWjO7HIwdg== + +"@napi-rs/lzma-linux-arm64-gnu@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm64-gnu/-/lzma-linux-arm64-gnu-1.1.2.tgz#2da3ee85b9fb1a6e8dd13dd09e29975abc9e433e" + integrity sha512-nR5nnc3tnXZyd1jn9dHarj8RQeUJmvm83Z46mfWFKBv/TtlP4U7eyg9n3A0eEyBTifPzuR5ZjVdaMXg0hrX9cA== + +"@napi-rs/lzma-linux-arm64-musl@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm64-musl/-/lzma-linux-arm64-musl-1.1.2.tgz#be737c17646d5088a430ca6df0146f43aa05c63e" + integrity sha512-N4gC6VJds/wL6PY23Cc8Z3QuztIMpNfBo++zLu2uHdRV67/XkM7JXfsgTCaZVR59lSZw+Pvi01w5i00BhmEZ/g== + +"@napi-rs/lzma-linux-x64-gnu@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.1.2.tgz#7e7b890e4a8b8917d7733dff036e962b8cbafd7b" + integrity sha512-xfSXofZnDlbSik64AayKj5xgSVmYMsK1cmRPQGBDcpwK4qnFd+Sy/qa39+x+GT2pip9QnT6stb72BT69asTRbw== + +"@napi-rs/lzma-linux-x64-musl@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-x64-musl/-/lzma-linux-x64-musl-1.1.2.tgz#47d0b6d7deb17b3a35b9293ae9231325aec314a8" + integrity sha512-wfrv3zRK+qw3+GT3o4FPGZWb8L0gtqpjAQgPiz91EtGyHWKZjvRz31zERUkU9DKEwSBZSxYoFu5zCVsvilQekA== + +"@napi-rs/lzma-win32-arm64-msvc@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-arm64-msvc/-/lzma-win32-arm64-msvc-1.1.2.tgz#2582d99f20baf693bb609d0ddcaf69e49f2fdf16" + integrity sha512-9lwYWz4g3FMxt5Pu33jfGuoHvAnXaonXYMbjWCVq3t+ReHV38rEVnueWtJD2GQcrnV2Elu0zxU4zON1PwJ1KqQ== + +"@napi-rs/lzma-win32-ia32-msvc@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-ia32-msvc/-/lzma-win32-ia32-msvc-1.1.2.tgz#d38dbb8f48b3050a17a0dd3c33a8197341624370" + integrity sha512-p9ZuF/5osCKES5oz5ZKyMck9jbVBhZ/zH4uD6fsKjLtp0VYBlvmfqSGUYQALkF6bqvL7xBeJz7qby416pnWqPg== + +"@napi-rs/lzma-win32-x64-msvc@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-x64-msvc/-/lzma-win32-x64-msvc-1.1.2.tgz#dbc715b85e8f15363959af1dbb08844e2214c177" + integrity sha512-EwNN9eH05KkeqO300UEYqZEbqzRD3R4anUJMIvhmJI1E3a/9mUbzEByrSBsjyPfYcHF5+KYenEpuPoup9a4eHQ== + +"@napi-rs/lzma@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma/-/lzma-1.1.2.tgz#09ce791390d819918182fe9382a7075e90d21d55" + integrity sha512-WJLn/td0F7RQmQ0mhtGVQXjfXQND8CE9hAdHJovPm6fM3aNW68chn7DCAyhs7rmhX95PovTEP0iu9TZVUtnl3w== + optionalDependencies: + "@napi-rs/lzma-android-arm-eabi" "1.1.2" + "@napi-rs/lzma-android-arm64" "1.1.2" + "@napi-rs/lzma-darwin-arm64" "1.1.2" + "@napi-rs/lzma-darwin-x64" "1.1.2" + "@napi-rs/lzma-freebsd-x64" "1.1.2" + "@napi-rs/lzma-linux-arm-gnueabihf" "1.1.2" + "@napi-rs/lzma-linux-arm64-gnu" "1.1.2" + "@napi-rs/lzma-linux-arm64-musl" "1.1.2" + "@napi-rs/lzma-linux-x64-gnu" "1.1.2" + "@napi-rs/lzma-linux-x64-musl" "1.1.2" + "@napi-rs/lzma-win32-arm64-msvc" "1.1.2" + "@napi-rs/lzma-win32-ia32-msvc" "1.1.2" + "@napi-rs/lzma-win32-x64-msvc" "1.1.2" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -943,6 +1027,11 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/retry@0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" + integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== + "@types/semver@^7.3.12": version "7.3.13" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" @@ -1145,15 +1234,21 @@ ap@~0.2.0: resolved "https://registry.yarnpkg.com/ap/-/ap-0.2.0.tgz#ae0942600b29912f0d2b14ec60c45e8f330b6110" integrity sha512-ImdvquIuBSVpWRWhB441UjvTcZqic1RL+lTQaUKGdGEp1aiTvt/phAvY8Vvs32qya5FJBI8U+tzNBYzFDQY/lQ== -appstraction@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/appstraction/-/appstraction-0.0.0.tgz#85171227d3583a133907e6706605cf87088631d0" - integrity sha512-8ubEEPBEbmaxFNQhKumtIfES5vAbh83KZFPI9FzcPKe43iQzIM4X0djeyBb891TdRcgSd42AlT8//W361KwoxQ== +appstraction@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/appstraction/-/appstraction-0.1.2.tgz#45eb3a48b866c2a37a7f2c2e804a0c30dc864d0a" + integrity sha512-hzt2sP0xH+oBxsIkpN9/yPquWNYKunEeQKamw4850lGELHyL1c77H0fACm1F9UMxkft0WTa4rJ3svBqcIlKLlA== dependencies: + "@napi-rs/lzma" "^1.1.2" + cross-fetch "^3.1.5" execa "^6.1.0" frida "^16.0.8" fs-extra "^11.1.0" ipa-extract-info "^1.2.6" + p-retry "^5.1.2" + pkijs "^3.0.14" + semver "^7.3.8" + tempy "^3.0.0" ts-node "^10.9.1" arg@^4.1.0: @@ -1202,6 +1297,15 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +asn1js@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" + integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== + dependencies: + pvtsutils "^1.3.2" + pvutils "^1.1.3" + tslib "^2.4.0" + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -1348,6 +1452,11 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +bytestreamjs@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" + integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3635,6 +3744,14 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-retry@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-5.1.2.tgz#c16eaee4f2016f9161d12da40d3b8b0f2e3c1b76" + integrity sha512-couX95waDu98NfNZV+i/iLt+fdVxmI7CbrrdC2uDWfPdUAApyxT4wmDlyOtR5KtTDmkDO0zDScDjDou9YHhd9g== + dependencies: + "@types/retry" "0.12.1" + retry "^0.13.1" + p-timeout@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.1.tgz#bcee5e37d730f5474d973b6ff226751a1a5e6ff1" @@ -3739,6 +3856,17 @@ pkg-dir@^5.0.0: dependencies: find-up "^5.0.0" +pkijs@^3.0.14: + version "3.0.14" + resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.0.14.tgz#92571f61122fd1e0ccdbc328b6efab9467b0bc30" + integrity sha512-Fi9++44BaOY0VcOEJql27D/HzHIeMU9R48XclfL98Cp8Wh/gGfPbuS1RUwReHQHRIUfzW32eoNO1izxoBMZi6w== + dependencies: + asn1js "^3.0.5" + bytestreamjs "^2.0.0" + pvtsutils "^1.3.2" + pvutils "^1.1.3" + tslib "^2.4.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -3843,6 +3971,18 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pvtsutils@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.2.tgz#9f8570d132cdd3c27ab7d51a2799239bf8d8d5de" + integrity sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ== + dependencies: + tslib "^2.4.0" + +pvutils@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" + integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -3982,6 +4122,11 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -4059,7 +4204,7 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.5, semver@^7.3.7: +semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==