您的位置:首页 > 移动开发 > Android开发

Androguard的androdd.py模块在使用过程中可能遇到的问题

2017-12-09 13:46 537 查看
androguard主要用来进行静态分析,提供了一组工具包(py文件),辅助分析人员快速分析APK文件 ,其中 androdd.py用于生成apk文件中每个类的方法的调用流程图,可以选择生成.dot格式的,另外还可以是PNG和JPG中的一种,但是在使用过程中可能会遇到如下问题:

1、AttributeError: ‘Dot’ object has no attribute ‘write_PNG’

具体如下图所示:



解决办法:在Wiki上提示的选择图形格式时“-f PNG”使用的大写字母,实际运行时发现会报如图所示的错误。这是因为选择不论png还是jpg都会和write拼成一个函数,而这个函数是小写的,所以png或者jpg必须用小写的才行。

2、IOError: [Errno 36] File name too long: ‘./out/android/support/v4/app/NotificationCompatHoneycomb/add-Landroid_content_ContextLandroid_app_NotificationLjava_lang_CharSequenceLjava_lang_CharSequenceLjava_lang_CharSequenceLandroid_widget_RemoteViewsILandroid_app_PendingIntentLandroid_app_PendingIntentLandroid_graphics_Bitmap-Landroid_app_Notification.png’

具体如下图所示:



解决办法:这是因为android自带方法生成的调用流程图文件的文件名长度过长(Linux系统的文件名长度限制为256),从而造成程序终止。可以通过修改androdd.py的代码来解决这个问题。

在androdd.py文件中,通过如下代码生成文件名:

filename = output_name + valid_class_name( method.get_class_name() )


因此,可以通过设置一个文件名长度上限,如128,并在执行前判断文件名的长度,如果文件名不超过上限,就继续操作,否则截取文件名:

if len(filename) >= 128:
filename = filename[0:128]


另外,在分析代码的时候主要分析的是应用程序的代码,因此如果只希望生成与应用程序相关的代码的调用流程图,而不希望生成android自带的代码块的调用流程图(这也很浪费时间),则可加上一句判断:

if valid_class_name( method.get_class_name() )[0:7] != "android":
......


最终代码如下图所示:



我解决上述问题之后,顺利生成的png分析图例子如下:



参考博客:

http://blog.csdn.net/clasnake/article/details/18089089
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息