apk文件伪加密

有时候遇到apk文件zip加密了,classes.dex有密码保护,无法解压出来(应当说是三个文件被密码保护 AndroidManifest.xml classes.dex resources.arsc)

怎么做到classes.dex有密码保护这个效果呢?

使用了伪加密,修改zip的头,把文件的加密标志设置为ture,还原就把加密标志设置为false.利用了Android处理zip文件不判断头里的加密信息,其他压缩软件,java默认实现的zip api都有检测zip头中的加密信息。



第一步:脚本和app.apk放在相同目录下,进入目录,用命令行:unpack.py app.apk AndroidManifest.xml classes.dex resources.arsc解压。

第二步:把assets、META-INF、res三个文件夹从apk文件中拖出来,和用脚本解压出的三个文件一起压缩成apk文件,一切ok。

注释:1.因为python脚本有版本2.x和3.x的差异,建议用2.7.5版本

有时候提示 argparse 包找不到,这样的话找到官方把包导入即可。argparse 包下载地址 https://pypi.python.org/pypi/argparse 

2. usage: unpack [-h] apk [file[file ...]]

[python]  view plain copy print ?
  1. #!/usr/bin/env python  
  2. # Copyright (C) 2013 thuxnder <patrick@bluebox.com>  
  3. #  
  4. # Licensed under the Apache License, Version 2.0 (the 'License');  
  5. # you may not use this file except in compliance with the License.  
  6. # You may obtain a copy of the License at  
  7. #  
  8. # http://www.apache.org/licenses/LICENSE-2.0  
  9. #  
  10. # Unless required by applicable law or agreed to in writing, software  
  11. # distributed under the License is distributed on an 'AS IS' BASIS,  
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  13. # See the License for the specific language governing permissions and  
  14. # limitations under the License.  
  15.   
  16. import argparse  
  17. from zipfile import ZipFile, ZipInfo  
  18.   
  19. class ApkFile(ZipFile):  
  20.     def extract(self, member, path=None, pwd=None):  
  21.         if not isinstance(member, ZipInfo):  
  22.             member = self.getinfo(member)  
  23.         member.flag_bits ^= member.flag_bits%2  
  24.         ZipFile.extract(self, member, path, pwd)  
  25.         print 'extracting %s' % member.filename  
  26.                   
  27.   
  28.     def extractall(self, path=None, members=None, pwd=None):  
  29.         map(lambda entry: self.extract(entry, path, pwd), members if members is not None  and len(members)>0 else self.filelist)  
  30.                   
  31. if __name__ == '__main__':  
  32.     parser = argparse.ArgumentParser(description='unpacks an APK that contains files which are wrongly marked as encrypted')  
  33.     parser.add_argument('apk', type=str)  
  34.     parser.add_argument('file', type=str, nargs='*')  
  35.     args = parser.parse_args()  
  36.   
  37.     apk = ApkFile(args.apk,'r')  
  38.     apk.extractall(members=args.file)  

伪加密扩展阅读:Apk伪加密实现与破解JAVA源码  

地址:http://bbs.pediy.com/showthread.php?t=174874 很好的解释了伪加密算法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值