用于提取Android apk机密的DeStringCare

DeStringCare的Python项目详细描述


破坏性护理

这是什么?在

它是一个用于提取Android apk文件中的StringCare模糊机密的工具。 其中一些受StringCare保护的机密可能包含API地址和API密钥。在

Warning:不建议在客户端存储重要的API密钥,尤其是第三方服务的密钥。 更好的方法是拥有自己的API服务,并为每个应用程序用户创建唯一的API密钥。 这允许撤销API密钥并在必要时禁止用户使用。在

安装

pip install DeStringCare

使用

用法:destringcare.py [-h] [-r] [-o] apk [replaced]

从Android APK中提取StringCare秘密。在

位置参数:

  • apk-apk的路径
  • replaced-被替换值的路径

可选参数:

  • -h--help显示此帮助消息并退出
  • -r--resign辞职并保存xml文件
  • -o--other包括其他机密的列表

示例:

^{pr2}$

替换值

创建mapped.json

{"firebase_database_url":"https://some-path.somewhere.io","google_storage_bucket":"another-path.appspot.com"}

然后使用附加参数运行destringcare

destringcare --resign Appname_v1.0.2494.apk mapped.json

打印其他额外属性

某些公共属性键可能不由Stringcare编码。 这些可以是明文形式,因此包含在输出中。在

destringcare --other Appname_v1.0.2494.apk

如何使用它?哪里可以得到apk?在

  1. 首先下载一个Android apk。在

    • 使用像https://apkpure.com/这样的网站(注意应用程序可能被篡改,因此不建议使用)。在
    • 使用GPlayCli/GPlayWeb使用自己的Gmail凭据下载。在
    • 使用adb工具从Android设备或模拟器中提取apk
      1. 通过Google Play store将应用程序下载到Android设备或模拟器上。在
      2. 列出软件包并找到你想要的应用程序。
        adb shell pm list packages
        
      3. apk文件的打印路径。
        adb shell pm path
        
      4. 拉出apk文件。
        adb pull /full/path/to/the.apk
        
  2. 提取StringCare的秘密。在

    destringcare Appname_v1.0.2494.apk
    

    您将得到一个JSON文件的输出:

    {"mixpanel_api_key":"7b23daa71cdbb9e6d07f29a36de960f3"}

如何放弃StringCare的秘密?在

^{pr2}$

它从密钥库文件~/.android/debug.keystore加载第一个密钥。在

然后它重新加密apk机密,并将其作为xml文件保存在resigned-strings.xml中。在

用您自己的密钥重新命名StringCare机密允许您重新打包应用程序并在Android设备中使用它。 您需要将原始的strings.xml替换为resigned-strings.xml文件。在

哪里可以使用辞职版本?在

使用apktool可以对应用程序进行解码,然后再重新打包。在

因为为了让它在Android上正常工作,必须放弃应用程序, 还需要使用新的签名密钥更新StringCare保护的文件。在

典型工作流程:

  1. 使用apktool将apk解码到apk目录中。在

    apktool d Appname_v1.0.2494.apk -o apk
    
  2. 运行DeStringCare以提取包含机密的{}并将其放弃。在

    ^{pr2}$ 在
  3. 替换路径apk/res/values/strings.xml处受StringCare保护的xml文件。在

    它可能包含如下行:

    <stringname="mixpanel_api_key">367E864309B5E7E3E6642483AF380497...</string>
  4. 重建apk。在

    apktool b -d apk -o app-unsigned.apk
    
  5. 辞去apk的职务。在

    jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android app-unsigned.apk androiddebugkey
    
  6. 用拉链把apk打开。在

    zipalign -v 4 app-unsigned.apk app.apk
    

如何贡献?在

如果您有问题或改进意见,打开一个问题。在

如果您对代码进行了改进,请创建一个merge request。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从同步请求中获取响应代码   具有深度复制的类中的Java oop getter/setter   java LDAP“简单”用户身份验证(JNDI Tomcat)不稳定?   java将Jenkins jnlp代理设置为通过API以编程方式使用WebSocket   java如何获取在servlet筛选器的静态块中启动的静态类的实例?   前两个数字的java charAt循环不能循环它   java在Spring引导执行器中是否有检查子服务运行状况的标准方法?   java我可以将jacksonmapped@JsonProperties推到“顶层”吗?   json JAVA:opencsv随机读取CSV单元格   无第三方应用程序的java捆绑包JRE   使用openidConnectClient功能的WAS Liberty中出现java无效cookie标头错误   java如何在Restful Web服务中从Http Post获取数组?   java如何读取安卓开发的JSON url?   如何在java IO中打开包含汉字的文件?