#COMPILE EXE "APK-CERT-INFO.exe" #DIM ALL $VER = "(1.0)" '------------------------------------------------------------------------------ ' ** Constants ** '------------------------------------------------------------------------------ %IDC_LABEL1 = 1000 %IDC_LABEL2 = 1001 %IDC_TEXTBOX1 = 1002 %IDC_TEXTBOX2 = 1003 %IDC_TEXTBOX3 = 1004 %IDC_TEXTBOX4 = 1005 %IDC_TEXTBOX5 = 1006 %IDC_TEXTBOX6 = 1007 %IDC_TEXTBOX7 = 1008 '------------------------------------------------------------------------------ GLOBAL file, KSCommonName, KSOrgName, KSOrgUnit AS STRING GLOBAL KSLocality, KSState, KSCountry, SHA1 AS STRING '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Includes & Resources ** '------------------------------------------------------------------------------ #INCLUDE ONCE "WIN32API.INC" #INCLUDE ONCE "AndroCertif.inc" #INCLUDE ONCE "LiteZip.inc" #RESOURCE ICON, 101, "icon3.ico" #RESOURCE MANIFEST, 1, "XPTheme.xml" '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Main Application Entry Point ** '------------------------------------------------------------------------------ FUNCTION PBMAIN () AS LONG LOCAL apk, tmprsa, r AS STRING IF MissingTools() THEN EXIT FUNCTION r = TRIM$(COMMAND$, $DQ) IF EXIST(r) THEN apk = r ELSE DISPLAY OPENFILE %HWND_DESKTOP,,, "Open APK", "", _ CHR$("Android PacKage",0,"*.APK",0), "", "", _ %OFN_FILEMUSTEXIST TO apk END IF IF apk = "" THEN EXIT FUNCTION ' cancelled by user file = apk : IF INSTR(file, "\") > 0 THEN file = MID$(file, INSTR(-1, file, "\") + 1) tmprsa = ENVIRON$("TEMP") + "\CERT.RSA" KILL tmprsa IF ISFALSE UnzipOne(apk, "META-INF\CERT.RSA", tmprsa) THEN ?"Invalid APK!"+$CR+$CR+"Cannot find META-INF\CERT.RSA", _ %MB_ICONERROR,EXE.NAME$+$SPC+$VER EXIT FUNCTION END IF r = BATCH(toolsPath + "\keytool -printcert -file " + PDQ(tmprsa)) KILL tmprsa KSCommonName = ParsePrintCert(r, "CN") KSOrgName = ParsePrintCert(r, "O") KSOrgUnit = ParsePrintCert(r, "OU") KSLocality = ParsePrintCert(r, "L") KSState = ParsePrintCert(r, "ST") KSCountry = ParsePrintCert(r, "C") SHA1 = ParsePrintCert(r, "SHA1 :") IF SHA1 = "" THEN SHA1 = ParsePrintCert(r, "SHA1:") END IF ShowKSInfo %HWND_DESKTOP END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** CallBacks ** '------------------------------------------------------------------------------ CALLBACK FUNCTION ProcKSInfo() IF CB.MSG = %WM_COMMAND AND CB.CTL = %IDOK THEN ' OK BUTTON DIALOG END CB.HNDL END IF END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Dialogs ** '------------------------------------------------------------------------------ FUNCTION ShowKSInfo(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG LOCAL hDlg AS DWORD DIALOG NEW PIXELS, hParent, EXE.NAME$+$SPC+$VER, , , 280, 220, %WS_POPUP OR %WS_BORDER _ OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME _ OR %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT OR %WS_CAPTION, %WS_EX_WINDOWEDGE _ OR %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, _ TO hDlg CONTROL ADD LABEL, hDlg, %IDC_LABEL1, $DQ+file+$DQ+" was signed by :", 8, 6, 200, 16 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "Full name :", 8, 31, 120, 16 CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX1, KSCommonName, 128, 27, 141, 18 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "Organization name :", 8, 52, 120, 16 CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX2, KSOrgName, 128, 48, 141, 18 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "Organization unit :", 8, 73, 118, 16 CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX3, KSOrgUnit, 128, 69, 141, 18 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "City / locality :", 8, 94, 118, 16 CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX4, KSLocality, 128, 90, 141, 18 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "State / province :", 8, 116, 118, 16 CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX5, KSState, 128, 112, 141, 18 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "2-letter country code :", 8, 137, 158, 16 CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX6, KSCountry, 128, 133, 42, 18 CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "SHA1 :", 189, 137, 80, 16, %SS_RIGHT CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX7, SHA1, 8, 159, 261, 18 CONTROL ADD BUTTON, hDlg, %IDOK, "OK", 176, 186, 72, 24 DIALOG SET ICON hDlg, "#101" DIALOG SHOW MODAL hDlg, CALL ProcKSInfo TO lRslt FUNCTION = lRslt END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ FUNCTION UnzipOne(zip AS STRING, src AS STRING, tgt AS STRING) AS LONG ' Extract from 'zip' exactly 1 file, of path+name 'src', saved as 'tgt' LOCAL hUnzip AS DWORD LOCAL ze AS ZIPENTRY LOCAL numitems AS DWORD LOCAL idx AS DWORD UnzipOpenFile(hUnzip, (zip), BYVAL %NULL) IF hUnzip THEN ze.Index = &HFFFFFFFF UnzipGetItem(hUnzip, ze) numitems = ze.Index FOR idx = 0 TO numitems - 1 ze.Index = idx UnzipGetItem(hUnzip, ze) IF RIGHT$(ze.szName, LEN(src)) = src THEN UnzipItemToFile(hUnzip, (tgt), ze) UnzipClose(hUnzip) FUNCTION = -1 ' Sucess EXIT FUNCTION END IF NEXT UnzipClose(hUnzip) END IF END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ FUNCTION ParsePrintCert(response AS STRING, identifier AS STRING) AS STRING LOCAL i, j AS LONG i = INSTR(response, $SPC + identifier + IIF$(ISFALSE INSTR(identifier, ":"),"=","")) IF ISFALSE i THEN EXIT FUNCTION j = INSTR(i, response, ANY ","+$CRLF) IF ISFALSE j THEN EXIT FUNCTION i += LEN($SPC + identifier) + 1 FUNCTION = MID$(response, i, j-i) END FUNCTION '------------------------------------------------------------------------------