当前位置:首页 > 微信运营 > 正文

hook微信,抖音小姐姐听说你单身那我能撩你吗歌名歌词

2021-06-28 19:28:29 暂无评论 微信运营

抖音小姐姐听说你单身那我能撩你吗歌名歌词

歌曲:Love U
歌手:Y U Jay
作曲 : Y U Jay
作词 : Y U Jay
Mix by ZeroMusic FungChi
Beat:scottybeamup
hook
Love U Love you baebe
Love U Love you baebe
Love U Love you baebe
Love U baebe
小姐姐听说你单身那我能撩你吗
要说些 甜言蜜语和小套路吗
小姐姐听说你单身那我能加你微信吗
我想要 给你我的heart and heart and heart
Verse
每一次和你面对面之后都会背着笑
也为你换了发型再带上个黑口罩
刻在心里的轮廓 醉心的酒窝
甜的像颗糖的蜜语希望能留住你不会走掉
一次经过就注意在你撩到我的侧颜
就像是只有自己才能看见你的特点
喜欢装可怜 但不想有遮掩
真心与否那让你看看我的双眼
你说你是手控 我有弹钢琴的双手
可是这没有用 就把你塞进口袋装走
会生气别人在你面前装的所有酷
也会找任何理由去为你吃点醋
hook
Love U Love you baebe
Love U Love you baebe
Love U Love you baebe
Love U baebe
小姐姐听说你单身那我能撩你吗
要说些 甜言蜜语和小套路吗
小姐姐听说你单身那我能加你微信吗
我想要 给你我的heart and heart and heart
Verse2
我不要不能做你哥哥不想当个配角
可能我有时候会显得没手没脚但我会学
不想把机会浪费掉 也想搂着你睡觉
每天腻歪在一起重复着我有病你有药
小套路是学的 可爱你是真的
你和猴子最大的区别是他们住在洞里
而你在心底 轻易 就能让我听你说的每一句话
都特别在意
想要学撩到你的办法但是没人告诉
去尝试改变自己脱掉那些秋衣毛裤
再自己偷偷学偷偷看那些小套路
但是学的会只是少数
傻样子还会暴露
hook
Love U Love you baebe
Love U Love you baebe
Love U Love you baebe
Love U baebe

腾讯,这些年都开源了哪些项目

腾讯作为互联网行业的一大巨头,一直都不吝啬将好的技术开放,与广大开发者共享,未来也将推出VR开放平台和AI技术。腾讯在全球合作伙伴大会披露了未来五年的发展思路,在技术共享方面,希望利用自己在新技术方面的积累,给开放平台带来更多技术合作和商业发展机会。
1. WeUI

WeUI 是由微信官方设计团队专为微信移动 Web 应用设计的 UI 库,是一套同微信原生视觉体验一致的基础样式库,为微信 Web 开发量身设计,可以令用户的使用感知更加统一。

2. JX

JX 是 JavaScript eXtension tools 的缩写,即 javascript 扩展工具套件的意思。JX 是模块化的非侵入式Web前端框架,开发于2008年,并于2009年开源于GoogleCode - ,于2012年切换到Github。

JX 框架同时适用于 Web Page 和 Web App 项目的开发,特别适合构建和组织大规模、工业级的Web App,腾讯 WebQQ
-、腾讯 Q+ 等产品都是采用JX框架开发,兼容目前所有主流浏览器。

3. Frozen UI

Frozen UI是一个开源的简单易用,轻量快捷的移动端UI框架。基于手Q样式规范,选取最常用的组件,做成手Q公用离线包减少请求,升级方式友好,文档完善,目前全面应用在腾讯手Q增值业务中。

非手Q用户不能使用离线包而直接请求核心css也仅28k,另外也可以采用cdn和combo的方式按需加载。

4. CodeTank

CodeTank(代码坦克)是全世界首个Javascript程序员的编程游戏,是由腾讯 AlloyTeam 和 HTML5 梦工场联合出品的在线坦克仿真游戏平台,CodeTank 采用 html5、Javascript、CSS3、NodeJS、MongoDB 等全新 Web 技术来构建一个基于互联网的在线智能坦克机器人战斗仿真引擎。

通过几行简单的Javascript代码和CodeTank API,每个人都可以方便的构建属于自己富有智能和个性的坦克(Tank)机器人,并通过互联网进行在线互动和竞赛!

5. AlloyImage

AlloyImage是一个基于Html5技术的专业级图像处理引擎(简称AI),一个在线Web图像处理平台——AlloyPhoto(简称AP)。

AlloyImage是一个使用Javascript语言开发的,基于Web的在线图像处理引擎,除了核心底层图像处理引擎,还同时集成了一些方便快捷的图像处理API,您可以将它简单快捷的引用到您的Web网页中,做出与PhotoShop一样的优美效果。甚至,你可以用AlloyImage来开发一个Web在线图像处理软件。

AlloyPhoto在线演示:

6. Livepool

LivePool 是一个基于 NodeJS,类似 Fiddler 支持抓包和本地替换的 Web 开发调试工具,是 Tencent AlloyTeam 在开发实践过程总结出的一套的便捷的 WorkFlow 以及调试方案。

7. WeFlow

WeFlow是一个基于 tmt-workflow 前端工作流的开发工具。目前已支持了:微信游戏、微信广告等项目的第三方合作团队的前端构建工作,如果你更习惯命令行操作,可以直接使用 WeFlow 的核心:基于 Gulp 开发的 tmt-workflow。

8. RapidJSON

Rapidjson 是一个 C++ 的快速 JSON 解析器和生成器,使用 SAX/DOM 风格的 API 设计。

9. MT

MT是手机腾讯网前端团队开发维护的一个专注于移动端的、带有增量更新特色的js模块管理框架。

MT项目架构一般如下图所示,release文件夹存放本地打包生成的内容,build.conf为打包配置文件。

10. AlloyDesktop

AlloyDesktop 是 HTML5 本地 App
开发引擎,是一个能将网页像软件一样运行在桌面上的app开发引擎。该引擎实现了对网页的透明渲染,使网页不再局限于浏览器的框框。同时,提供强大的api支持,使你能轻松实现许多传统网页实现不了的功能,诸如窗口控制,文件IO,图像处理……可以这样说,一般软件所能实现的大部分功能,利用AlloyDesktop开发的app也能实现,而且实现起来更快更容易。另外,它还具备传统软件所不具备的优势,那就是强大的界面渲染能力。利用html5和css3的新特性,你可以轻轻松松实现阴影透明等特效。相对于市面上许多软件界面开发引擎,网页开发的门槛相对来说要低得多,而且是一个通用的标准。利用该引擎,可以开发诸如QQ,浏览器,播放器,PS等软件。

11. Rythem

Rythem是一个与Fiddler同类的软件,和Fiddler一样具有 代理抓包/替换 功能,与Fiddler最大的不同是Rythem是跨平台&开源的。

12. Behaviac

Behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持行为树BT,状态机FSM,HTN等多种范式,方便的编辑和调试。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。

编辑器可以运行在PC上,操作方便直观可靠,支持实时和离线调试;编辑器可以导出xml,bson等多种格式,更可以导出C++,C#源码,提供最高效率。

运行时支持全平台,有C++和C#两个版本,原生支持Unity。

13. tsf

tsf (Tencent Server Framework) 是腾讯公司推出的 PHP 协程方案,基于 Swoole+php Generator 实现的 Coroutine。Tencent Server Framework 是快速服务器部署框架,PHP 现在可以像 Golang 一样用协程实现高并发服务器,同时支持同步阻塞,异步非阻塞回调,协程这 3 种 IO 模型。

14. Nuclear

Nuclear 是腾讯 AlloyTeam 团队开发的一款形似 React 的超轻量级框架(大小16k,gzip后6k)。

15. PhxSQL

PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下,可自身实现自动Master切换,且保证数据一致性。

PhxSQL 结构:

16. QMUI
Web

QMUI Web 是一个专注 Web UI 开发,帮助开发者快速实现特定的一整套设计的框架。通过 QMUI Web,开发者可以很轻松地提高 Web UI 开发的效率,同时保持了项目的高可维护性与稳健。

17. AlloyLever

AlloyLever是腾讯AlloyTeam团队开源的一款Web 开发调试工具。

18. PhxPaxos

PhxPaxos是腾讯公司微信后台团队自主研发的一套基于Paxos协议的多机状态拷贝类库。它以库函数的方式嵌入到开发者的代码当中,使得一些单机状态服务可以扩展到多机器,从而获得强一致性的多副本以及自动容灾的特性。

19. Typhoon
Blade

Blade 是一个现代构建系统,期望的目标是强大而好用,把程序员从构建的繁琐中解放出来。

Blade主要定位于Linux下的大型C++项目,密切配合研发流程,比如单元测试,持续集成,覆盖率统计等。但像unix下的文本过滤程序一 样,保持相对的独立性,可以单独运行。目前重点支持i386/x86_64 linux,未来可以考虑支持其他的类Unix系统。

20. PhxRPC

PhxRPC是微信后台团队推出的一个非常简洁小巧的RPC框架,编译生成的库只有450K。

21. iWeibo

腾讯微博为帮助各位站长快速搭建自己的微博系统,并为广大开发者提供基于腾讯微博开放平台API开发各项微博功能代码demo,腾讯微博开放平台发布开源微博系统—iWeibo.

22. Pro

Pro 是腾讯移动Web前端框架。它的性能高,仅支持移动端,支持Accessibility,支持自定义构建。

示例: 。

23. Tencent
Webtop

这是个用web开发桌面app的引擎,或者你可以简单的认为它是一个透明浏览器。可是它能做的不仅仅如此,它提供了大量的本地api,使web的能力得到从所未有的提升,也使开发桌面app变得如此轻松简单。

24. AlloyGameEngine

AlloyGameEngine 让游戏制作变得超级容易,超快的 2d 渲染引擎,支持 webgl 和 canvas 渲染。

25. msec

毫秒服务引擎(msec, 取英文名Mass Service Engine in
Cluster的首字母组合)是腾讯的一个开源框架(将于12月左右开源),适用于在廉价机器组成的集群上开发和运营分布式后台服务。毫秒服务引擎集RPC、名字发现服务、负载均衡、业务监控、灰度发布、容量管理、日志管理、key-value存储于一体,目的是提高开发与运营的效率和质量。

毫秒服务引擎的创作冲动和构建经验,来自QQ后台团队超过10年的运营思考。它是一整套解决方案,但也可以拆分的来使用其中的监控、key-value存储单品。

26. TDW

腾讯分布式数据仓库项目,在Hadoop和Hive的基础上开发的腾讯内部最大的离线数据处理平台。TDW支持Oracle功能兼容的SQL语法,支持PB级的存储和TB级的计算等。

27. vConsole

vConsole是一款由微信公众平台前端团队打造的前端调试面板,专治手机端看log难题。目前vConsole自带有2个面板,默认为“日志”面板,负责展示log。

28. Mod.js

绝大部分童鞋都称 Mod 是一个构建工具:一个用来把源代码编译为可发布代码版本的工具,过程中自动进行预处理,优化,编译等操作。也有童鞋会说
Mod 是一个更复杂的东西:一个流程管理工具,我们可以在Mod构建前后用Mod做更多流水工作,前可以生成项目的脚手架,后可以部署测试环境等等。

29. Javascript Mobile
Framework

JM(Javascript Mobile Framework) 是新一代轻量级高性能移动web框架,由腾讯前端团队AlloyTeam经项目实践积累沉淀而成。为拥抱移动互联网全新设计,专注为移动web项目,整个框架压缩后只有36K。

30. Mars

Mars(mobile need a hero)面向亿万用户级的移动端Web解决方案。

31. JMUI

JMUI,建立在JM的UI组件库,基于HTML5与CSS3,涵盖了目前互联网上各类常见的UI组件,可方便地投入项目使用。

32. GoPng

Go!Png:目前实现的功能如下:

· 支持图片文件拖拽

· 支持生成png图片与css文件

· 支持两种自动排列的模式

· 放大镜功能

· 磁力吸附对齐功能

· 工作状态导出功能,可以方便导出文件,在下一次操作通过拖放改文件来恢复工作状态(包括图片数据跟参数设置)

· 支持Mac(Chrome)

33. Tinker

微信开源的 Android 热修复框架 Tinker,支持在无需升级APK的前提下更新 dex, library and resources 文件。

34. Spirit

Spirit 是腾讯移动 Web 开发规范,基于日常开发的沉淀,总结了字体、交互、性能等方面的最佳实践,是移动Web开发的指导标准。

35. AlloyDesigner

AlloyDesigner 是一款致力于提高前端生产效率的浏览器内运行工具,AlloyDesigner + Chrome F12(Especially with WorkSpace) 打造前端新的开发和测试模式。

36. TEditor

TEditor 是腾讯的 HTML5 富编辑器。

37. Libco

libco 是腾讯开源的一个有趣的协程基础库,仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll,可以支持同步或者异步的写法,如线程库一样轻松,库里面提供了socket族函数的hook。

38. TNote

TNote 是腾讯的 HTML5 云笔记应用。

39. APT

APT(android Performance Testing Tools)安卓平台高效性能测试工具,适用于开发自测和定位性能瓶颈,测试人员完成性能基准测试、竞品测试。

DEMO:

40. webvoice

webvoice 是一个 Web TTS 工具。

41. AlloyTimer

AlloyTimer 定时器 - 番茄工作法的时间管理应用。

42. JX.Animate

JX.Animate 是一个开源的轻量级的CSS3动画库。动画可以使用标准的CSS3关键帧动画(KeyFrame)制作,也可以使用JavaScript制作,而且还可以支持在JavaScript中动态生成动画关键帧。

JX.Animate将关键帧与动画播放选项分开控制。不仅可以灵活控制动画播放的效果,还可以将关键帧当做资源重用。

43. Python_sdk

Python_sdk是一款用于腾讯优图人脸识别服务的sdk文件,优图人脸识别(Face Recognition),
是由腾讯优图团队研发的,基于人的脸部特征信息进行身份识别的一种生物识别技术。它提供了"人脸检测与分析"、"人脸比对"、"人脸验证"、"人脸识别"等一整套技术方案。

44. StreetFighter

StreetFighter 是街头霸王游戏,有 90 年代的感觉。

45. Koala跨平台图形编译工具

Koala是一款预处理器语言图形编译工具,支持Less、Sass、CoffeeScript、Compass framework 的即时编译。 无需手动输入命令去编译,后台监听文件是否有改变,如有修改会自动进行编译。能够大大提升 Web 开发中的工作效率。

46. seamSearch

这几年nodejs越来越火爆,js程序员们终于可以不局限于浏览器那一亩三分地了,很多以前由Java,c等实现的东西纷纷有了nodejs版本,我也随波逐流一把,写了一个nodejs的搜索引擎addon

这个开源addon其实是对我几年前写的c++ 版的luyfsearch(github:)进行的一个nodejs封装。

47. AlloyStick

AlloyStick 是采用HTML5技术开发的一个骨骼动画引擎,可以用于HTML5动画开发、HTML5游戏开发;AlloyStick
主要由骨骼动画引擎和骨骼动画编辑器两部分组成,骨骼动画编辑器提供强大的骨骼动画编辑功能,通过设置动画关键帧,依靠强大的自动补间和骨骼关系,就可以制作出逼真、生动的Canvas骨骼动画,可以畅快的运行在PC、手机、平板等设备里。

48. Qing

Qing是一套基础开发模版,来源于我们在手机与PC端上的大量工程实践。Qing所提供不是冷冰冰的文件,
而是一套Web前端解决方案,所以Qing不只是关注项目的初始状态,而是整体的工作流程,
这是Qing与现有开源的开发模版显著差异的一点。Qing的体验必须是高效且愉悦的,拒绝繁琐与重复。
其足够的Qing量,只需30分钟内即可掌握最先进的Web开发技能。

下载Qing模版包

49. JXUI组件库

JXUI 是 JX 的 UI 组件库。

UI组件包括css组件和javascript插件两部分,css组件只需引入相应的css,并使用相应的样式即可。Javascript插件需要引入相关的js和并且下载相应的图片,再加一些代码调用就OK了。

50. CTaxis

云排序,又名CTaxis,是腾讯云计算平台提供的排序服务。

云排序系统采用可扩展的分布式存储方案,具有支持海量数据,排序规则可灵活调整,数据上报和查询方便等特点。

51. Laro

Laro 是一个基于html5 canvas的用于平面2d或者2.5d游戏制作的轻量级游戏引擎。

Laro出现的目的是为了简化使用canvas制作游戏时的api调用。同时提供了一套“有限状态机”的开发模式,这种模式在对于游戏这一类的典型的“事件驱动”的模型的开发上。能够很好的做到模块间的低耦合,利于开发者梳理整个开发逻辑。

52. AlloyClip

AlloyClip 是基于 AlloyImage 的图片裁切组件。

53. util.js

util.js 是轻量基础库 用时可直接拷贝 拆卸式使用 适用于mobile端简单页面。

util.js旨在聚集前端已有的大量优秀方法,打造单一方法库与目录,并且提供方法的打包与构建解决方案,使项目中基础库可大可小,适应于项目场景,达到100%的代码利用率。

54. Fanvas

Fanvas是一个把swf转为html5 canvas动画的系统,由两部分组成:Actionscript实现的解析器、js运行库。

55. Abstract.js

Abstract.js 是来自腾讯兴趣部落的前端框架。Abstract.js基于严格的抽象数学理论模型,它把一些新的理念带入到web开发中去。

56. MNA

QcloudMna 移动加速是腾讯云针对移动端应用(APP、游戏)推出的加速产品。

57. Mobug

Mobug 是一款运行在Windows平台上的移动Web远程调试工具,由Alloyteam自行研发。Mobug参考了Chrome Inspector调试工具的界面,可调试移动设备上的Web页面以及App中的Webview页面,功能强大,使用方便。

58. Stepify

Stepify(node-stepify) 是一个简单易扩展的Node.js流程控制引擎,采用方法链(methods chain)的方式定制异步任务,使得node.js工作流易于理解和维护。

目标是将复杂的任务进行拆分成多步完成,使得每一步的执行过程更加透明,化繁为简。

59. hcSpriteCuter.js

在学习和研究别人程序的过程中,我们需要从一个由多张小图合并而成的雪碧图中抠出其中一张或者几张图片,传统的做法是用ps直接进行抠图。 hcSpriteCuter是一个用nodejs写的一个雪碧图拆分工具。

60. TscanCode

TscanCode是一款静态代码扫描工具,TscanCode旨在助力开发与测试人员从代码层面挖掘问题,将那些长期困扰项目的诸如空指针宕机等问题,扼杀于萌芽阶段。支持用户根据不同需求自定义配置检查项,有极强的扩展性和可维护性。平均扫描速度10W行/分钟。

61. SodaRender

SodaRender 是轻量级的模板引擎。当前只支持 IE9,Chrome 和移动端的所有浏览器。

SodaRender语法源自于AngularJS,前端框架Abstract.js已经内置SodaRender引擎,SodaRender引擎应用于腾讯手机QQ中,已被证实是一款优秀的模板引擎。

62. hcliuLoad

用来支持css,js在本地存储的一个开源项目,并可以增量更新css,js代码。

63. GT

GT(随身调)是APP的随身调测平台。利用GT,仅凭一部手机,无需连接电脑,您即可对APP进行快速的性能测试、 开发日志的查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。

64. DanceRequest

DanceRequest 是 AJAX 异步队列工具。

65. js本地存储和增量更新 rstoreinc

js本地存储和增量更新requirejs插件使用。

66. AlloyAnimation

AlloyAnimation Editor 动画编辑器,将支持骨骼动画、精灵动画、网格动画等主流动画构建体系。

67. 前端框架 Soda

已更名为Abstract.js,请参考Abstract.js

Puppet (OR Soda) 是基于逻辑层抽像的前端框架,致力于更高效,便捷,优雅的构建 开发复杂的前端工程。Puppet是基于MVC的传统架框方法,抽象所有的前端模型进行封装。

68. AlloyPhoto

AlloyPhoto 是基于 AlloyImage 图像处理库的应用。

69. Pebble-RPC

Pebble是一个分布式开发框架。基于该框架,可以让开发者只需专注于业务逻辑的实现,而不需要关注基础功能的开发,如网络通信,数据存储,集群管理等。使用pebble配套的运营系统,可方便的进行游戏开区开服,版本升级,扩容缩容等操作。

70. KNVProtoEngine

KNV是一个模式自由的高性能树型协议处理引擎,是对Key-Value的一个通用结构化扩展。

71. AlloyTicker

AlloyTicker,时间旅行者。

72. storeinc

一个seajs插件

73. AlloyFinger

AlloyFinger是腾讯AlloyTeam团队开源的超轻量级 Web 手势库。

74. WeTest-Assistant

WeTest助手是由WeTest(质量开放平台)自主研发的基于手机端的辅助测试工具,目前包括性能测试和远程调试两大功能, 可为手游等项目发现CPU、内存、FPS等性能问题,并提供云端真机用于问题在线调试。

DEMO:

75. QT4i

iOS 开发自动化测试工具

76. QT4A

QT4A (Quick Test for Android),基于QTA提供面向Android应用的UI测试自动化测试解决方案。

钉钉群里怎么送花?

点表情然后慢慢找找到有花的包再点一下然后就发送就行了还有直播的时候点赞没能看到送话费的容易找图就可到

python可以爬微信吗

主要思路
从UI获取文本信息是最为简单的方法,于是应该优先逆向UI代码部分。
逆向微信apk
首先解包微信apk,用dex2jar反编译classes.dex,然后用JD-GUI查看jar源码。当然,能看到的源码都是经过高度混淆的。但是,继承自安卓重要组件(如Activity、Service等)的类名无法被混淆,于是还是能从中看到点东西。
首先定位到微信APP package。我们知道这个是 com.tencent.mm。
在 com.tencent.mm
中,我们找到一个 ui
包,有点意思。
展开 com.tencent.mm.ui
,发现多个未被混淆的类,其中发现 MMBaseActivity直接继承自 Activity
, MMFragmentActivity
继承自 ActionBarActivity
, MMActivity
继承自 MMFragmentActivity
,并且 MMActivity
是微信中大多数Activity的父类:
public class MMFragmentActivity
extends ActionBarActivity
implements SwipeBackLayout.a, b.a {
...
}
public abstract class MMActivity
extends MMFragmentActivity {
...
}
public class MMBaseActivity
extends Activity {
...
}
现在需要找出朋友圈的Activity,为此要用Xposed hook MMActivity。
创建一个Xposed模块
参考 [TUTORIAL]Xposed module devlopment,创建一个Xposed项目。
简单Xposed模块的基本思想是:hook某个APP中的某个方法,从而达到读写数据的目的。
小编尝试hook com.tencent.mm.ui.MMActivity.setContentView这个方法,并打印出这个Activity下的全部TextView内容。那么首先需要遍历这个Activity下的所有TextView,遍历ViewGroup的方法参考了SO的以下代码:
private void getAllTextViews(final View v) {if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {View child = vg.getChildAt(i);
getAllTextViews(child);
}
} else if (v instanceof TextView ) {
dealWithTextView((TextView)v); //dealWithTextView(TextView tv)方法:打印TextView中的显示文本}
}
Hook MMActivity.setContentView
的关键代码如下:
findAndHookMethod("com.tencent.mm.ui.MMActivity", lpparam.classLoader, "setContentView", View.class, new XC_MethodHook() {...
});
在findAndHookMethod方法中,第一个参数为完整类名,第三个参数为需要hook的方法名,其后若干个参数分别对应该方法的各形参类型。在这里, Activity.setContentView(View view)方法只有一个类型为 View
的形参,因此传入一个 View.class

现在,期望的结果是运行时可以从Log中读取到每个Activity中的所有的TextView的显示内容。
但是,因为View中的数据并不一定在 setContentView()时就加载完毕,因此小编的实验结果是,log中啥都没有。
意外的收获
当切换到朋友圈页面时,Xposed模块报了一个异常,异常源从 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI这个类捕捉到。从类名上看,这个很有可能是朋友圈首页的UI类。展开这个类,发现更多有趣的东西:
这个类下有个子类 a
(被混淆过的类名),该子类下有个名为 gyO的 ListView
类的实例。我们知道, ListView
是显示列表类的UI组件,有可能就是用来展示朋友圈的列表。
顺藤摸瓜
那么,我们先要获得一个 SnsTimeLineUI.a.gyO的实例。但是在这之前,要先获得一个 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a的实例。继续搜索,发现 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI有一个名为 gLZ
的 SnsTimeLineUI.a
实例,那么我们先取得这个实例。
经过测试, com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a(boolean, boolean, String, boolean)这个方法在每次初始化微信界面的时候都会被调用。因此我们将hook这个方法,并从中取得 gLZ。
findAndHookMethod("com.tencent.mm.plugin.sns.ui.SnsTimeLineUI", lpparam.classLoader, "a", boolean.class, boolean.class, String.class, boolean.class, new XC_MethodHook() {@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedBridge.log("Hooked. ");
Object currentObject = param.thisObject;
for (Field field : currentObject.getClass().getDeclaredFields()) { //遍历类成员field.setAccessible(true);
Object value = field.get(currentObject);
if (field.getName().equals("gLZ")) {
XposedBridge.log("Child A found.");
childA = value;
//这里获得了gLZ
...
}
}
}
});
现在取得了 SnsTimeLineUI.a
的一个实例 gLZ
,需要取得这个类下的 ListView
类型的 gyO
属性。
private void dealWithA() throws Throwable{if (childA == null) {
return;
}
for (Field field : childA.getClass().getDeclaredFields()) { //遍历属性field.setAccessible(true);
Object value = field.get(childA);
if (field.getName().equals("gyO")) { //取得了gyOViewGroup vg = (ListView)value;
for (int i = 0; i < vg.getChildCount(); i++) { //遍历这个ListView的每一个子View...
View child = vg.getChildAt(i);
getAllTextViews(child); //这里调用上文的getAllTextViews()方法,每一个子View里的所有TextView的文本...
}
}
}
}
现在已经可以将朋友圈页面中的全部文字信息打印出来了。我们需要根据TextView的子类名判断这些文字是朋友圈内容、好友昵称、点赞或评论等。
private void dealWithTextView(TextView v) {String className = v.getClass().getName();String text = ((TextView)v).getText().toString().trim().replaceAll("n", " ");if (!v.isShown())
return;
if (text.equals(""))
return;
if (className.equals("com.tencent.mm.plugin.sns.ui.AsyncTextView")) {//好友昵称
...
}
else if (className.equals("com.tencent.mm.plugin.sns.ui.SnsTextView")) {//朋友圈文字内容
...
}
else if (className.equals("com.tencent.mm.plugin.sns.ui.MaskTextView")) {if (!text.contains(":")) {
//点赞
...
} else {
//评论
...
}
}
}
自此,我们已经从微信APP里取得了朋友圈数据。当然,这部分抓取代码需要定时执行。因为从 ListView中抓到的数据只有当前显示在屏幕上的可见部分,为此需要每隔很短一段时间再次执行,让用户在下滑加载的过程中抓取更多数据。
剩下的就是数据分类处理和格式化输出到文件,受本文篇幅所限不再赘述,详细实现可参考作者GitHub上的源码。

xposed + python 怎么爬取微信朋友圈的数据

有JAVA的,你参考一下
主要思路

从UI获取文本信息是最为简单的方法,于是应该优先逆向UI代码部分。

逆向微信apk

首先解包微信apk,用dex2jar反编译classes.dex,然后用JD-GUI查看jar源码。当然,能看到的源码都是经过高度混淆的。但是,继承自安卓重要组件(如Activity、Service等)的类名无法被混淆,于是还是能从中看到点东西。

首先定位到微信APP package。我们知道这个是 com.tencent.mm

在 com.tencent.mm
中,我们找到一个 ui
包,有点意思。
展开 com.tencent.mm.ui
,发现多个未被混淆的类,其中发现 MMBaseActivity
直接继承自 Activity
, MMFragmentActivity
继承自 ActionBarActivity
, MMActivity
继承自 MMFragmentActivity
,并且 MMActivity
是微信中大多数Activity的父类:

public class MMFragmentActivity
extends ActionBarActivity
implements SwipeBackLayout.a, b.a {
...
}
public abstract class MMActivity
extends MMFragmentActivity {
...
}
public class MMBaseActivity
extends Activity {
...
}

现在需要找出朋友圈的Activity,为此要用Xposed hook MMActivity


创建一个Xposed模块

参考 [TUTORIAL]Xposed module devlopment
,创建一个Xposed项目。

简单Xposed模块的基本思想是:hook某个APP中的某个方法,从而达到读写数据的目的。

小编尝试hook com.tencent.mm.ui.MMActivity.setContentView
这个方法,并打印出这个Activity下的全部TextView内容。那么首先需要遍历这个Activity下的所有TextView,遍历ViewGroup的方法参考了SO的以下代码:

private void getAllTextViews(final View v) {
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
getAllTextViews(child);
}
} else if (v instanceof TextView ) {
dealWithTextView((TextView)v); //dealWithTextView(TextView tv)方法:打印TextView中的显示文本
}
}

Hook MMActivity.setContentView
的关键代码如下:

findAndHookMethod("com.tencent.mm.ui.MMActivity", lpparam.classLoader, "setContentView", View.class, new XC_MethodHook() {
...
});

在findAndHookMethod方法中,第一个参数为完整类名,第三个参数为需要hook的方法名,其后若干个参数分别对应该方法的各形参类型。在这里, Activity.setContentView(View view)
方法只有一个类型为 View
的形参,因此传入一个 View.class


现在,期望的结果是运行时可以从Log中读取到每个Activity中的所有的TextView的显示内容。

但是,因为View中的数据并不一定在 setContentView()
时就加载完毕,因此小编的实验结果是,log中啥都没有。

意外的收获

当切换到朋友圈页面时,Xposed模块报了一个异常,异常源从 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI
这个类捕捉到。从类名上看,这个很有可能是朋友圈首页的UI类。展开这个类,发现更多有趣的东西:

这个类下有个子类 a
(被混淆过的类名),该子类下有个名为 gyO
的 ListView
类的实例。我们知道, ListView
是显示列表类的UI组件,有可能就是用来展示朋友圈的列表。

顺藤摸瓜

那么,我们先要获得一个 SnsTimeLineUI.a.gyO
的实例。但是在这之前,要先获得一个 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a
的实例。继续搜索,发现 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI
有一个名为 gLZ
的 SnsTimeLineUI.a
实例,那么我们先取得这个实例。

经过测试, com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a(boolean, boolean, String, boolean)
这个方法在每次初始化微信界面的时候都会被调用。因此我们将hook这个方法,并从中取得 gLZ


findAndHookMethod("com.tencent.mm.plugin.sns.ui.SnsTimeLineUI", lpparam.classLoader, "a", boolean.class, boolean.class, String.class, boolean.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("Hooked. ");
Object currentObject = param.thisObject;
for (Field field : currentObject.getClass().getDeclaredFields()) { //遍历类成员
field.setAccessible(true);
Object value = field.get(currentObject);
if (field.getName().equals("gLZ")) {
XposedBridge.log("Child A found.");
childA = value;
//这里获得了gLZ
...
}
}
}
});

现在取得了 SnsTimeLineUI.a
的一个实例 gLZ
,需要取得这个类下的 ListView
类型的 gyO
属性。

private void dealWithA() throws Throwable{
if (childA == null) {
return;
}
for (Field field : childA.getClass().getDeclaredFields()) { //遍历属性
field.setAccessible(true);
Object value = field.get(childA);
if (field.getName().equals("gyO")) { //取得了gyO
ViewGroup vg = (ListView)value;
for (int i = 0; i < vg.getChildCount(); i++) { //遍历这个ListView的每一个子View
...
View child = vg.getChildAt(i);
getAllTextViews(child); //这里调用上文的getAllTextViews()方法,每一个子View里的所有TextView的文本
...
}
}
}
}

现在已经可以将朋友圈页面中的全部文字信息打印出来了。我们需要根据TextView的子类名判断这些文字是朋友圈内容、好友昵称、点赞或评论等。

private void dealWithTextView(TextView v) {
String className = v.getClass().getName();
String text = ((TextView)v).getText().toString().trim().replaceAll("n", " ");
if (!v.isShown())
return;
if (text.equals(""))
return;
if (className.equals("com.tencent.mm.plugin.sns.ui.AsyncTextView")) {
//好友昵称
...
}
else if (className.equals("com.tencent.mm.plugin.sns.ui.SnsTextView")) {
//朋友圈文字内容
...
}
else if (className.equals("com.tencent.mm.plugin.sns.ui.MaskTextView")) {
if (!text.contains(":")) {
//点赞
...
} else {
//评论
...
}
}
}

自此,我们已经从微信APP里取得了朋友圈数据。当然,这部分抓取代码需要定时执行。因为从 ListView
中抓到的数据只有当前显示在屏幕上的可见部分,为此需要每隔很短一段时间再次执行,让用户在下滑加载的过程中抓取更多数据。

剩下的就是数据分类处理和格式化输出到文件,受本文篇幅所限不再赘述,详细实现可参考作者GitHub上的源码。

博客主人破茧短视频培训
破茧短视频为你分享抖音、快手等短视频平台的视频拍摄、剪辑和运营技巧,另有短视频培训学习教程,海量干货助你玩转短视频运营!。
  • 51952 文章总数
  • 4876728访问次数
  • 2205建站天数