注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

apk文件伪加密  

2014-02-26 10:24:23|  分类: Android开发与逆 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

有时候遇到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 ...]]

  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 很好的解释了伪加密算法。



脚本下载地址:https://github.com/blueboxsecurity/DalvikBytecodeTampering/blob/master/unpack.py
  评论这张
 
阅读(422)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017