Infer在Linux上搭建与Android应用安全分析教程

需积分: 23 4 下载量 54 浏览量 更新于2024-07-18 收藏 34KB DOCX 举报
Infer是一款由Facebook内部开发并开源的静态程序分析工具,专用于检测Java、C和Objective-C代码中的潜在问题。它的初衷是为了在移动应用发布前进行全面的代码审查,特别是在Android和iOS应用的开发过程中,比如Facebook Messenger和Instagram。Infer特别关注空指针访问、资源和内存泄漏等可能导致应用程序崩溃或性能严重下降的问题。 为了在Linux环境下搭建并使用Infer,你需要遵循以下步骤: 1. 环境准备: - 操作系统选择:Infer目前仅支持在MacOSX和Linux平台上运行,因此推荐使用Ubuntu作为虚拟机。你可以通过安装VirtualBox或其他虚拟机软件创建一个Ubuntu虚拟机。 2. 基础软件安装: - Git:作为版本控制系统,Git对于任何开发工作都是必不可少的。在Ubuntu中,可以通过添加PPA并使用apt命令来安装: ``` sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git ``` - SUN JDK:Infer需要JDK(Java Development Kit),推荐安装Oracle官方提供的SUN JDK,如jdk-8u77-linux-x64版本,解压后替换默认的openjdk环境: ``` 下载并解压JDK安装包 sudo update-alternatives --install /usr/bin/java java /home/your_username/jdk1.8/bin/java 300 ``` 3. Android开发工具: - Android Studio & Android SDK:虽然Infer主要用于非Android系统代码的分析,但如果你需要分析与Android相关的代码,安装Android Studio和SDK也是必要的,以便于处理Android项目。 4. 下载和分析项目: - 获取待检测的app项目代码:从GitHub或其他源获取需要分析的项目代码,并将其导入到虚拟机中。 - 配置环境变量:确保Infer的路径被添加到系统路径中,以便于命令行操作。 5. 编译安装Infer: - 从Infer的GitHub仓库下载源码,并按照文档指示进行编译和安装。这通常涉及设置构建脚本、依赖项安装以及定制配置。 6. 执行分析: - 清理项目(如有必要),然后在终端中使用Infer的命令行工具进行分析。分析结果会提供有关潜在问题的报告。 7. 结果查看与解读: 分析完成后,阅读和理解Infer生成的报告,根据提示修复发现的问题以提高代码质量。 搭建Infer在Linux上的过程包括安装必要的开发工具、JDK、设置环境变量,以及进行项目的下载、分析和结果解读。这个过程旨在确保代码质量,减少潜在的错误和性能问题。

def unzip_infer_data(src_path,target_path): ''' 解压预测数据集 ''' if(not os.path.isdir(target_path)): z = zipfile.ZipFile(src_path, 'r') z.extractall(path=target_path) z.close() def load_image(img_path): ''' 预测图片预处理 ''' img = Image.open(img_path) if img.mode != 'RGB': img = img.convert('RGB') img = img.resize((224, 224), Image.BILINEAR) img = np.array(img).astype('float32') img = img.transpose((2, 0, 1)) # HWC to CHW img = img/255 # 像素值归一化 return img infer_src_path = '/home/aistudio/data/data55032/archive_test.zip' infer_dst_path = '/home/aistudio/data/archive_test' unzip_infer_data(infer_src_path,infer_dst_path) para_state_dict = paddle.load("MyCNN") model = MyCNN() model.set_state_dict(para_state_dict) #加载模型参数 model.eval() #验证模式 #展示预测图片 infer_path='data/archive_test/alexandrite_6.jpg' img = Image.open(infer_path) plt.imshow(img) #根据数组绘制图像 plt.show() #显示图像 #对预测图片进行预处理 infer_imgs = [] infer_imgs.append(load_image(infer_path)) infer_imgs = np.array(infer_imgs) label_dic = train_parameters['label_dict'] for i in range(len(infer_imgs)): data = infer_imgs[i] dy_x_data = np.array(data).astype('float32') dy_x_data=dy_x_data[np.newaxis,:, : ,:] img = paddle.to_tensor (dy_x_data) out = model(img) lab = np.argmax(out.numpy()) #argmax():返回最大数的索引 print("第{}个样本,被预测为:{},真实标签为:{}".format(i+1,label_dic[str(lab)],infer_path.split('/')[-1].split("_")[0])) print("结束") 以上代码进行DNN预测,根据这些写GUI页面,实现输入图片并安装CNN训练结果进行对比识别,最终输出识别结果

2023-05-25 上传