Android如何获取QQ与微信的聊天记录并保存到数据库详解

  


  

  

提前说明下:(该方法只适用于监控自己拥有的微信或者QQ,无法监控或者盗取其他人的聊天记录。本文只写了如何获取聊天记录,服务器落地程序并不复杂,不做赘述。写的仓促,有错别字还请见谅。)

  

为了获取黑产群的动态,有同事潜伏在大量的黑产群(QQ微信)中,干起了无间道的工作,随着黑产群数量的激增,同事希望能自动获取黑产群的聊天信息,并交付风控引擎进行风险评估。于是,我接到了这么一个工作……

  

分析了一通需求说明,总结一下:

  
      <李>能够自动获取微信和QQ群的聊天记录   <李>只要文字记录,图片和表情包,语音之类的不要李   <李>后台自动运行,非实时获取记录   
  


  

  

参阅很多相关的文章之后,对这个需求有了大致的想法,开始着手准备:

  
      <李>一个有根权限的手机,我用的是红米5(强调必须要有根)   <李> android的开发环境李   <李> android相关的开发经验(我是个PHP,第一次写android程序,踩了不少坑)   
  


  

  

说明:   

微信的聊天记录保存在“/数据/数据/com.tencent.mm/MicroMsg/c5fb89d4729f72c345711cb */EnMicroMsg.db”

  

该文件是加密的数据库文件,需要用到sqlcipher来打开。密码为:MD5(手机的IMEI +微信印尼的前七位。文件所在的那个乱码文件夹的名称也是一段加密MD5值:MD5(“毫米”+微信印尼。微信的印尼存放在微信文件夹/数据/数据/com.tencent.mmshared_prefs system_config_prefs.xml中。(这个减号一定要带着!)

  

 Android如何获取QQ与微信的聊天记录并保存到数据库详解“> <br/>
  </p>
  <p>另外,如果手机是双卡双待,那么会有两个IMEI号,默认选择IMEI1,如果不行,可以尝试一下字符串1234567890六边形abcdef。早期的微信会去判定你的IMEI,如果为空默认选择这个字符串。</p>
  <p> <img src=   在媒介="/数据/数据/com.tencent.mm/MicroMsg/c5fb89d4729f72c345711cb * * * * * \/EnMicroMsg.db”;   newPath="/数据/数据/com。你的项目/EnMicroMsg.db”;   拷贝文件(媒介、newPath);//代码见部分源码      

第二步,拿到文件的密码:

        字符串密码=(MD5Until.md5 (“IMEI +微信印尼”)。substring (0, 7) .toLowerCase ());      

第三步,打开文件,执行SQL:

        SQLiteDatabase.loadLibs(上下文);   SQLiteDatabaseHook钩=new SQLiteDatabaseHook () {   公共空间preKey (SQLiteDatabase数据库){   }      公共空间postKey (SQLiteDatabase数据库){   数据库。rawExecSQL(“杂注cipher_migrate; ");//很重要   }   };   SQLiteDatabase db=openDatabase (newPath、密码为空,NO_LOCALIZED_COLLATORS钩);   现在长=System.currentTimeMillis ();   日志。e (“readWxDatabases”、“读取微信数据库:" +);   int数=0;   如果(是否!=" 0 "){   字符串sql=皊elect * from信息”;   日志。e (sql、sql);   光标c=db。rawQuery (sql, null);   而(c.moveToNext ()) {   长_id=c.getLong (c.getColumnIndex("是否"));   字符串内容=c.getString (c.getColumnIndex(“内容”));   int类型=c.getInt (c.getColumnIndex(“类型”));   字符串说话=c.getString (c.getColumnIndex("说话"));   长时间=c.getLong (c.getColumnIndex (createTime "));   JSONObject tmpJson=handleJson (_id、内容类型、说话、时间);   returnJson。把(“数据”+数,tmpJson);   数+ +;   }   c.close ();   db.close ();   日志。e (“readWxDatanases”、“读取结束:”+ System.currentTimeMillis() +“,数:”+数量);   }      

到此,就可以拿到微信的聊天记录了,之后可以直接将整理好的JSON通过帖子请求发到服务器就可以了。(忍不住吐槽:写服务器落地程序用了30分钟,写上面这一坨花了三四天了,还不包括搭建开发环境,下载SDK,折腾亚行什么的)

Android如何获取QQ与微信的聊天记录并保存到数据库详解