上学期一直用androguard生成字节码,根据字节码的特征分析得到函数调用图。以为这是很easy的事,以为就一个深度优先遍历。后来仔细检查一个有源码的camera的例子,发现并不像如此简单。
比如这种调用:
private void
takePicture()
{
if (mCamera01 != null && bIfPreview)
{
//调用takePicture()方法拍照
mCamera01.takePicture
(shutterCallback, rawCallback, jpegCallback);
}
}
jpegCallback对应的初始化的地方:
private PictureCallback jpegCallback = new
PictureCallback()
{
public void onPictureTaken(byte[] _data, Camera _camera)
{
// TODO Handle JPEG image data
// onPictureTaken传入的第一个参数即为相片的byte 。。。。}
}
这种情况onPictureTaken就没有被分析进onTakePicture()子函数,问了下师兄,说这种情况还挺复杂的。建议我用一个现有的工具soot,但是soot是基于java的,我对java工程的导入,重新编译很头疼。每次都会遇到各种问题。于是在网上找到APKinspector这个基于python的android静态分析工具。
运行它的install.sh好久还没安装完成。看来安装自动化是要付出时间代价的。在它的install.sh中发现只支持Your
Ubuntu Version is $line, please install 11.10/12.04 in order to run
APKinspector
于是简单修改,判断若为10.04(我现在的ubuntu版本)就可通过。也不知道10.04会不会有兼容问题。另外一方面,之前clone了一个10.04,现在正在将其在线升级到12.04.速度也很慢。 以后编写的软件最好多做件事情,告诉用户约摸还要多少时间。