androguard补完计划提取字符串.pdfVIP

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Androguard补完——提取加密字符串

点击上方蓝字关注0X01概述上篇分析了Androguard如何dex,而且还提到Androguard很适合进行扩展或者

移植成为自己项目的某一模块。

本篇文章就来研究一下如何在Androguard基础上进行扩展。

App对抗静态分析的方法之一就是利用反射,如果对反射的字符串进行加密会得到更好的效果,而且不但反射可以

通过加密字符串,凡是动态、加载都可以通过加密字符串提高隐蔽性,对抗静态分析。

比如这样:或者这样:下面我们就给Androguard补充一个功能,提取dex文件中经过加密的字符串。

要提取dex文件中的加密字符串,主要两个步骤:

1、提取dex文件中的字符串池,获取全部字符串;

2、判断是否为加密字符串。0X02提取首先如何提取?上篇提到Androguarddex文件对各个item进行处理,

处理逻辑在MapItem.next函数中看一下源码,找到跟字符串相关的Item,有两处。

一个是StringIdItem:主要记录String的偏移:一个是StringDataItem:看看代码:重点在self.data,通过

utf8_to_string函数将字节码转换为字符串。

我们知道了每个字符串保存在每个StringDataItem.data中,那我们如何获得它们呢。回到next函数,

MapItem.Item保存所有StringDataItem组成的列表:

而这个MapItem会被加入到MapList.map_item这个队列以及self.CM中,当然加入到ClassManager中的过程更复

杂。如果从map_item中获取到字符串,需要首先找到处理StringDataItem的mi,然后遍历map_item中的所有

MapItem对象,依次拿到MapItem.data,这无疑很复杂。那就让我们把目光放到ClassManager上,看看

add_type_item:

咦,似乎有了意外的发现,当处理到StringDataItem时,会设置一个标志位。当标志位为真时,self.strings_off这

个字典才会保存数据,也就是StringDataItem相关的数据。

我们来仔细研究一下这段代码,先理解参数。type_item表示Item的类型,c_item则是mi=MapItem(buff,self.CM)

的mi,也就是一个完整的MapItem对象。参数中的item则是mi.get_item(),也就是MapItem.item。所以当type

为StringDataItem时item就是保存StringDataItem对象的列表。

整理一下思路,现在的情况是我们可以从ClassManager中的strings_off字典根据偏移得到每个StringDataItem。

但是悲催的是ClassManager当中并没有获得strings_off的方法,我们只能自己先加一个:

只要遍历strings_off,拿到每个Item,获取data就可以得到字符串了。

类似如下处理:str_list就会保存dex文件中的所有字符串了。

0X03判断加密字符串得到所有字符串,我们就依次判断它是否是加密字符串。如何判断呢?公司倒是有一个判

断随机字符串的工具(也就是人类无法识别的字符串),但毕竟是公司的东⻄,也没有源码。搞一个字典太费劲,

而且字典越大也会影响运行时间。我暂时想了一个办法来判断随机字符串。

首先,先

文档评论(0)

+ 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档