集成病毒数据查询
发布日期:2021-06-30 18:39:35 浏览次数:3 分类:技术文章

本文共 3927 字,大约阅读时间需要 13 分钟。

1、把(手机归属地数据库)在assets目录中。

2、在SplashActivity.java(应用启动时显示的动画界面)中把antivirus.db拷贝到应用的files目录下。

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //拷贝数据库    copyDB("address.db");}/** * 把assert目录下文件拷贝到本地(/data/data/包名/files) * @param dbName *      assert目录下的文件名 * @throws IOException  */private void copyDB(final String dbName)  {    new Thread(){        public void run() {            //判断文件是否存在,如果存在不需要拷贝            File file = new File("/data/data/"+getPackageName() + "/files/" + dbName);            if (file.exists()) {
//文件存在 return; } // 文件的拷贝 try { filecopy(dbName); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start();}private void filecopy(String dbName) throws IOException, FileNotFoundException { //io流来拷贝 //输入流 AssetManager assets = getAssets(); //读取assert的文件,转换成InputStream InputStream is = assets.open(dbName); //输出流 FileOutputStream fos = openFileOutput(dbName, MODE_PRIVATE ); //流的拷贝 //定义缓冲区大小10k byte[] buffer = new byte[10240]; //读取的长度 int len = is.read(buffer); int counts = 1; //循环读取,如果读到文件尾部,返回-1 while (len != -1) { //把缓冲区的数据写到输出流 fos.write(buffer,0,len); //每次100k的时候刷新缓冲区的数据到文件中 if (counts % 10 == 0) { fos.flush();//刷新缓冲区 } //继续读取 len = is.read(buffer); counts++; } fos.flush(); fos.close(); is.close();}

3、操作病毒数据库的Dao类实现

import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.widget.SlidingDrawer;/** * 病毒的业务类 * @author Administrator * */public class AntiVirusDao {
/** * @param version * 传递的服务器的病毒库版本 * @return * 病毒库版本是否一致,true说明目前本地的病毒库是最新的 */ public static boolean isNewVirus(int version){ boolean res = false; SQLiteDatabase database = SQLiteDatabase.openDatabase( "/data/data/"+getPackageName()+ "/files/antivirus.db", null, SQLiteDatabase.OPEN_READWRITE); Cursor cursor = database.rawQuery("select 1 from version where subcnt=?", new String[]{version+""}); if (cursor.moveToNext()) { res = true; } cursor.close(); database.close(); return res; } /** * @param md5 病毒文件的md5 * desc 病毒的描述信息 * */ public static void addVirus(String md5,String desc){ //获取数据库 SQLiteDatabase database = SQLiteDatabase.openDatabase( "/data/data/"+getPackageName()+ "/files/antivirus.db", null, SQLiteDatabase.OPEN_READWRITE); ContentValues values = new ContentValues(); values.put("md5", md5); values.put("type", 6); values.put("name", "Android.Hack.CarrierIQ.a"); values.put("desc", desc); database.insert("datable", null, values); database.close(); } /** * @param md5 * 文件的md5值 * @return * 是否是病毒文件 */ public static boolean isVirus(String md5){ boolean res = false; SQLiteDatabase database = SQLiteDatabase.openDatabase( "/data/data/"+getPackageName()+ "/files/antivirus.db", null, SQLiteDatabase.OPEN_READWRITE); Cursor cursor = database.rawQuery("select 1 from datable where md5=?", new String[]{md5}); if (cursor.moveToNext()) { res = true; } cursor.close(); database.close(); return res; }}

4、判断应用是否是病毒

//根据应用的apk路径得到apk对应的文件md5(即特征码)String md5 = Md5Utils.getFileMD5(appBean.getApkPath());//根据文件md5判断该应用是否是病毒dao.isVirus(md5)

Md5Utils的源码:

AppBean 的源码:

转载地址:https://linqiarui.blog.csdn.net/article/details/51174670 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:自定义ProgressBar样式
下一篇:手机总流量统计

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月11日 01时15分43秒