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文件中,通过如下代码生成文件名:
因此,可以通过设置一个文件名长度上限,如128,并在执行前判断文件名的长度,如果文件名不超过上限,就继续操作,否则截取文件名:
另外,在分析代码的时候主要分析的是应用程序的代码,因此如果只希望生成与应用程序相关的代码的调用流程图,而不希望生成android自带的代码块的调用流程图(这也很浪费时间),则可加上一句判断:
最终代码如下图所示:
我解决上述问题之后,顺利生成的png分析图例子如下:
参考博客:
http://blog.csdn.net/clasnake/article/details/18089089
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
相关文章推荐
- (原)使用 memcache 使用过程中可能遇到的问题
- [转]TensorFlow 在使用过程中可能遇到的问题及解决办法
- git 使用过程中可能遇到的问题(遇到更新)
- TensorFlow 初学者在使用过程中可能遇到的问题及解决办法(转)
- IG NZT 安装使用过程中可能遇到的问题解决办法
- FileZilla 使用过程中可能遇到问题 及 解决办法
- ubuntu 使用过程中可能遇到的问题,和所需要用到的情况设置
- 在使用Struts的过程中也遇到了一些问题,现在总结一下
- [转]演示过程可能遇到的问题和应急预案
- 使用母板页过程中遇到的图片地址问题
- 使用busybox-1.9.2制作CRAMFS问题系统过程中遇到的问题及解决的办法
- 使用BDC连接MySql可能遇到的问题
- Eclipse RCP使用Spring时遇到的问题及解决过程
- VC6使用过程中遇到的问题收集(1)
- 使用webchart过程中遇到的一些问题
- 在 appclient 中使用注射 EJB (injected EJB) 可能遇到的问题
- Tomcat6.0启动过程中可能遇到的一些问题及解决方案
- 转帖:使用BDC连接MySql可能遇到的问题
- 使用Linux过程中遇到的问题以及解决方案
- 从MPG切割,合并到转换成FLV视频过程中可能遇到的一些问题(主要用到mencoder ffmpeg flvtool2)