bananalyzer
Version:
A simple tool for windows 10, that downloads APKs from Google playstore, analyzes them, and lists all the Google and Huawei SDKs (kits) that are integrated, along with other metadata
183 lines (182 loc) • 9.78 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// import Bananalyzer from '../src/index';
var build_1 = __importDefault(require("../build"));
var debug_1 = __importDefault(require("debug"));
var keepApks = true;
var useExisting = true;
debug_1.default.enable('bananalyzer:*');
(function () { return __awaiter(void 0, void 0, void 0, function () {
var psDetails;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, build_1.default.getPlayStoreDetails('com.facebook.lite')];
case 1:
psDetails = _a.sent();
console.log('playstore details', psDetails);
// const details = await Bananalyzer.getAppGalleryDetails('C100734965');
// console.log('details', details);
// const dl = await Bananalyzer.getDownloadLink('com.facebook.lite');
// console.log('dl', dl);
// const dl = await Bananalyzer.getDownloadLink('com.Etisalat.ETIDA', false);
// const dl2 = await Bananalyzer.getDownloadLink('com.Etisalat.ETIDA', true);
// console.log('dl split:', dl);
// console.log('dl merge: ', dl2);
// const decompileApk = await Bananalyzer.decompileApk({
// filePath: './tests/samples/com.twitter.android.lite.apk'
// });
// console.log('decompileApk', decompileApk);
// // const start = Date.now();
// const result = await Bananalyzer.analyzeAPKs(
// [
// {
// // filePath: downloadAPK.filePath,
// filePath: './tests/samples/com.el_grocer.shopper.apk'
// },
// ],
// true
// );
// console.log('result', result);
// fs.writeFileSync('test_dev_analyzer_res.json', JSON.stringify(result), 'utf-8');
// await saveResult(result, 'com.ubercab.uberlite.xlsx');
//***** sdk analyzer */
// const decompilePath = 'D:\\CODE\\_huawei\\Bananalyzer\\decompile\\sample_2.apk';
// if (!fs.existsSync(decompilePath)) {
// return console.warn('path does not exist, see test/dev.ts');
// }
// const sdksRes = await analyzeSdks(decompilePath);
// console.log(JSON.stringify(sdksRes));
// ******************************
// todo: test getInnerApk (xapk)
// const path = await getInnerApk('D:\\__tasks__\\_analyze\\_toolss\\Bananalyzer\\downloads\\com.ahleen.voice.apk');
// console.log('Paht == ', path);
// ******************************
// decompile apk
// const appDetails = await decompileApk(
// {
// packageName: 'com.twitter.android.lite',
// filePath: './tests/samples/com.twitter.android.lite.apk',
// }
// );
// console.log('appDetails', appDetails);
//**************************
// todo: test download
// const res = await downloadAPK('com.almowafir.app', false);
// const res = await getDownloadLink("com.facebook.lite")
// console.log("res", res)
// ******************************
// todo: test analyze apks
// const d = await analyzeAPKs([testApks[0]], true);
// console.log(d);
// ******************************
// todo: test get apkinfo
// const d = await getApkInfo('D:\\__tasks__\\_analyze\\_toolss\\Bananalyzer\\downloads\\com.ucare.we.apk');
// writeFileSync('manifest.json', JSON.stringify(d));
// await getApkInfo('D:\\__tasks__\\_analyze\\_toolss\\Bananalyzer\\downloads\\com.instagram.android.apk');
// console.log('asdfljasl;fn done');
// ******************************
// todo: test analyzer
// const analyzerRes = {
// 'com.instagram.android': {
// version: '⚠',
// 'upload date': '20 Mar, 2022',
// GMS: ['sdk (Sign in)', 'sdk (FCM)', 'location', 'sdk (fitness)', 'sdk (places)'],
// HMS: [],
// 'huawei App Id': '⚠',
// 'AndroidMarket metadata': '⚠',
// },
// };
// const finalHeaders = [
// 'package name',
// 'version',
// 'upload date',
// 'GMS kits',
// 'HMS kits',
// 'huawei App Id',
// 'AndroidMarket metadata',
// ];
// const data = [];
// Object.keys(analyzerRes).forEach((pn) => {
// const appAnalyzerRes = analyzerRes[pn];
// console.dir(appAnalyzerRes);
// data.push({
// 'package name': pn,
// version: appAnalyzerRes.version,
// 'upload date': appAnalyzerRes.uploadDate,
// 'GMS kits': appAnalyzerRes['GMS'].join(' , '),
// 'HMS kits': appAnalyzerRes['HMS'].join(' , '),
// 'huawei App Id': appAnalyzerRes['huawei App Id'],
// 'androidMarket metadata': appAnalyzerRes['androidMarket metadata'],
// });
// });
// ******************************
// todo: test write excel
// const resultFileName = 'fff';
// const analyzerRes = {
// 'com.a': {
// GMS: ['push', 'maps'],
// HMS: ['push', 'maps'],
// version: '1.0.0.0',
// 'huawei App Id': 'NOT FOUND',
// 'androidMarket metadata': 'NOT FOUND',
// 'APK creation date': '2020',
// uploadDate: '2022',
// permissions: 'com.per1,com.perm2',
// },
// 'com.b': {
// GMS: ['push', 'maps'],
// HMS: ['adf', 'asdf'],
// version: '30.0.0',
// 'huawei App Id': 'NOT FOUND',
// 'androidMarket metadata': 'NOT FOUND',
// 'APK creation date': '2020',
// uploadDate: '2022',
// permissions: 'com.per1,com.perm2',
// },
// };
// saveResult(analyzerRes, resultFileName);
// saveResult(analyzerRes, resultFileName);
process.exit(0);
return [2 /*return*/];
}
});
}); })();