zoukankan      html  css  js  c++  java
  • AutoHotkey结合 7z 和 keytool 一键查看apk文件的签名信息

    网上下载的 apk,想核实是否被修改过,可以通过签名信息来查看,常规操作比较复杂,于是有了此文。

    1、压缩软件打开apk,解压到临时文件夹 c: mp

      7z 用命令行可直接完成 7z.exe x c: esk.apk d:aa.7z -oc: mp

    2、用Java jdk自带的 keytool 查看信息。用命令行 keytool.exe -printcert -file c: mpMETA-INFCERT.RSA 来获取

    (附上最新的jdk官方下载地址,keytool在 jdk-15in目录下,keytool 本想单独提取出来,简单尝试后失败了

    此步骤用 AutoHotkey 执行,可直接用 msgbox 显示结果,效果如下:

    3、删除解压的临时文件夹c: mp

    代码如下(AutoHotkey v2 a102版):

    #SingleInstance Force
    ;定义几个文件路径
    fpApk := "c:UsersAdministratorDesktop	candroid3.apk"
    fp7z := "d:AATCsoft7-Zip7z.exe"
    fpKeytool := "d:Softjdk-15inkeytool.exe"
    dir := "c:	mp" ;临时解压目录
    
    ;解压
    RunWait(format("{1} x {2} -o{3}", fp7z,fpApk,dir))
    ;keytool 执行并返回签名信息
    fpRsa := dir . "META-INFCERT.RSA"
    res := cmdExec(format("{1} -printcert -file {2}", fpKeytool,fpRsa))
    ;删除临时文件夹
    DirDelete(dir, 1)
    ;显示签名信息
    msgbox(res)
    return
    
    cmdExec(strCode, callback:="", encode:="CP936")
    { ;  GAHK32 ; Modified version : SKAN 05-Jul-2013  http://goo.gl/j8XJXY
        dllcall("CreatePipe", "uintp",hPipeRead, "uintp",hPipeWrite, "uint",0, "uint",0)
        dllcall("SetHandleInformation", "uint",hPipeWrite, "uint",1, "uint",1)
        ; STARTUPINFO          http://goo.gl/fZf24
        VarSetCapacity(STARTUPINFO, 68, 0 )
        numput(68,         STARTUPINFO,  0)      ; cbSize
        numput(0x100,      STARTUPINFO, 44)      ; dwFlags    =>  STARTF_USESTDHANDLES = 0x100
        numput(hPipeWrite, STARTUPINFO, 60)      ; hStdOutput
        numput(hPipeWrite, STARTUPINFO, 64)      ; hStdError
        ; PROCESS_INFORMATION  http://goo.gl/b9BaI
        VarSetCapacity(PROCESS_INFORMATION, 16)
        if !dllcall("CreateProcess", "uint",0, "uint",&strCode, "uint",0, "uint",0, "uint",1, "uint",0x08000000, "uint",0, "uint",0, "uint",&STARTUPINFO, "uint",&PROCESS_INFORMATION)
        { ;http://goo.gl/USC5a
            dllcall("CloseHandle", "uint",hPipeWrite)
            dllcall("CloseHandle", "uint",hPipeRead)
            dllcall("SetLastError", "int",-1)
            return ""
        }
        hProcess := numget(PROCESS_INFORMATION, 0)
        hThread := numget(PROCESS_INFORMATION, 4)
        dllcall("CloseHandle", "uint",hPipeWrite)
        VarSetCapacity(Buffer, 4096, 0), nSz := 0
        while(dllcall("ReadFile", "uint",hPipeRead, "uint",&Buffer, "uint",4094, "uintp",nSz, "uint",0))
        {
            sThis := strget(&Buffer, nSz, encode)
            sRes .= sThis
            if isobject(callback)
                callback.call(A_Index,sThis)
        }
        dllcall("GetExitCodeProcess", "uint",hProcess, "uintp",ExitCode)
        dllcall("CloseHandle", "uint",hProcess )
        dllcall("CloseHandle", "uint",hThread  )
        dllcall("CloseHandle", "uint",hPipeRead)
        dllcall("SetLastError", "uint",ExitCode)
        return isobject(callback) ? callback.call(0,sRes) : sRes
    }
  • 相关阅读:
    ubuntu环境下快速搭建开发环境
    Ubuntu安装mysql及设置远程访问方法
    lua 获取指定目录下指定后缀文件名
    DLL远程注入及卸载实现
    c字符检测函数
    数据库bcp导入导出批处理工具
    Schtasks命令详解(计划任务DOS批处理)
    lmathlib文件
    Github常用命令【转】
    Github上传代码菜鸟超详细教程【转】
  • 原文地址:https://www.cnblogs.com/hyaray/p/13843935.html
Copyright © 2011-2022 走看看