近期在研究视频号的采集,市面上常见的方案是PC注入和ipad协议,这两种相对来说比较稳健,但是目前未见可以参考的开源项目。
于是笔者通过对移动端安卓视频号的hook,实现了数据采集。
采用的是adb shell + frida hook来拦截消息,因为视频号目前没有主动推送的功能,频繁调用接口又会导致被检测,并且造成应用程序崩溃,所以采取hook的方式来拦截消息。经测试,相对稳定。
真机环境,安卓11,app版本8.0.43,目前的最新版。
另外要说的是为什么选择对搜索接口hook,因为视频号作品列表中没有发布时间。
通过对搜索接口的拦截,不仅仅可以获取到视频号消息,也可以捕捉公众号文章、指数、账号等信息。
先说下视频号推荐页和用户作品列表的hook,能拦截到,但是没发布时间。
主要在feedData
hook代码
接着看搜索,经过分析后我直接hook了hash map
打印堆栈
java.lang.Exception
at java.util.HashMap.put(Native Method)
at org.json.JSONObject.put(JSONObject.java:273)
at org.json.JSONTokener.readObject(JSONTokener.java:394)
at org.json.JSONTokener.nextValue(JSONTokener.java:104)
at org.json.JSONTokener.readArray(JSONTokener.java:440)
at org.json.JSONTokener.nextValue(JSONTokener.java:107)
at org.json.JSONArray.<init>(JSONArray.java:94)
at org.json.JSONArray.<init>(JSONArray.java:110)
at com.tencent.mm.plugin.websearch.f.b(SourceFile:267)
at com.tencent.mm.plugin.websearch.f$a.run(SourceFile:5)
at com.tencent.mm.plugin.websearch.m$b.run(SourceFile:90)
at rd4.c.dispatchMessage(SourceFile:11)
at com.tencent.mm.sdk.platformtools.MMHandler$3.dispatchMessage(SourceFile:10)
at rd4.c$b.dispatchMessage(Unknown Source:2)
at rd4.c$k.run(SourceFile:101)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at qd4.k.run(SourceFile:247)
at rd4.e.run(SourceFile:9)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at jd4.c.run(SourceFile:3)
at java.lang.Thread.run(Thread.java:923)
找到 com.tencent.mm.plugin.websearch.m
mMHandler负责消息处理
主要hook代码:
var websearchm = Java.use("com.tencent.mm.plugin.websearch.m");
websearchm.b.implementation = function (a, b,c,d) {
console.log(b)
return this.b(a,b,c,d);
}
打印出的b:
这里可以直接hook待响应的数据,所以到这里可以收工。
搜文章或者搜视频,搜公众号都可以拦截到。
【温馨提示:此处隐藏内容需要付费订阅后才能查看!】