仿朋友圈源碼
❶ 如何完美實現微信自動發朋友圈&自動添加好友&等等
要實現微信自動化,大致有這么幾種辦法
這些方法各有利弊,綜合看來,第一種實現總會有一天微信說要關閉web服務,那豈不是很慘,第二種風險在於被封號,只有第三種目前看來最合適,想要自動發送朋友圈,AccessibilityService是最完美的實現。知其然知其所以然,我們要想用好AccessibilityService,就要明白其原理,這樣能更好的理解每一步操作的含義,少走彎路,避免考慮不周導致成功率不足。
在做的過程中,也遇到很多問題,例如經常拿不到
AccessibilityNodeInfo實例,如果拿不到就無法操作當前界面的元素,等於是無法再執行下去了,這里有幾個關鍵點需要注意的,只要注意這幾個就可以完美拿到。賣個關子,下面會提到,請往下看。
先大致了解下原理,對你的使用更是事半功倍。
類圖源於 here
該類又繼承了 IAccessibilityServiceClient.Stub ,並實現了 HandlerCaller.Callback 介面。看到這分析出,這是一個跨進程通信Service,在構造函數中看到 Callbacks 回調介面
看到這里再回頭看看onBind函數的具體實現如圖
而這個函數又是誰調的呢,這里就到了進程間通信的邏輯,看一下外部邏輯,上面是倒推邏輯,下面正推一下。
AccessibilityService跟一個監控一樣,界面的所有的事件都可以收到,那它的源頭肯定在View上,肯定在View的事件處理上,跟著這個邏輯去找一下
在performClick函數中發現有一個AccessibilityEvent事件傳遞,再往裡面跟蹤發現了這個有用的信息
這裡面可以清晰的看到,你收到的AccessibilityEvent事件所有的欄位賦值邏輯就在這里。那它是如何發出去交給AccessibilityService呢,肯定是通過AIDL,進一步查找源碼
發現在函數中,調用了
getParent().requestSendAccessibilityEvent(this, event),接著看看這個getParent()幹了什麼,找了一圈找到具體實現在哪,最終在ViewRootImpl中找到這個方法實現
可以看到是mAccessibilityManager.sendAccessibilityEvent 發出了事件,再看下這個函數的實現邏輯
IAccessibilityManager 是個aidl介面,最終通過他發送給了服務
看到這是不是明白了其中的原理。在AccessibilityService你還可以拿到Activity的一些信息,同樣的道理,你在源碼中肯定能找到那個實現,你可以試著自己去搜一下。
上面賣的關子,現在可以圓滿了,在使用中遇到過很多種情況拿不到RootInActiveWindow 也就是AccessibilityNodeInfo(表示窗口內容的節點),當窗口能拿到這個節點時,你才能通過他去findView,所以你知道它的重要性了,但為什麼很多時候拿不到呢
如果在TYPE_WINDOWS_CHANGED中就會拿不到
當你不在當前頁面(com.tencent.mm.ui.LauncherUI是微信的主頁)時同樣也有可能獲取不到,有可能是在其他頁面。
讀到這是不是想看如何實現呢,這里直接提供項目源碼,並沒有寫如何使用的教程,推薦給你們幾個寫的特別詳細的教程,希望對你有幫助,使用起來相對很簡單的,看完這些文章基本夠用
Android自動化模擬操作開源庫源碼解析
你真的理解AccessibilityService嗎
AccessibilityService分析與防禦
A complete guide to Accessibility Service Part 1 — Android
A Complete Guide to Accessibility Service Part 2 — Android
本項目源碼完善中,功能上會加入
❷ 付費進群源碼微信封嗎
封。
付費進群屬於一種欺詐手段,群聊是根據大眾意見所開創的娛樂活動如果有付費進群需要源碼的,都屬於犯罪,輕者罰款處罰解散群聊,重者將依司法程序進行2到3年有期徒刑。
微信是騰訊公司於2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造,微信支持跨通信運營商、跨操作系統平台通過網路快速發送免費(需消耗少量網路流量)語音簡訊、視頻、圖片和文字,同時,也可以使用通過共享流媒體內容的資料和基於位置的社交插件搖一搖、朋友圈、公眾平台、語音記事本等服務插件。
❸ 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 mole 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上的源碼。
❹ 如何實現類似微信朋友圈的點贊和評論功能
我想你是在說微信朋友圈的評論。微信的朋友圈一般來講,如果是你的好友評論你的照片或者文字,你可以看到,你的好友如果和那個給你評論的好友是好友的話,也能看到。如果沒有共同好友,就看不到。假如你回復別人的評論,同理可得,前提是你要點你要回復評論人的名字,然後回復別人,否則沒有共同好友的人可以看到你在講什麼,而且看起來會覺得你一個人在莫名其妙自言自語的感覺。如果你不想讓某人看到你的照片文字以及照片文字下的評論,可以在設置裡面的功能里點朋友圈,然後點朋友圈黑名單,設置黑名單。也可以在那裡設置不想看到的人的朋友圈新鮮事。在設置裡面有一項{隱私}的選項。點擊隱私,然後也可以進入朋友圈許可權。這裡面還可以設置是否允許陌生人查看十張你的照片。如果你不啟用那個功能,陌生人就無法看到你的朋友圈照片。而如果啟用那個功能,陌生人只能看到你最近的十張照片(包括文字),但是看不到評論以及點「贊」。也無法評論和點「贊」。(朋友圈發文字只要點擊發照片的那個照相機按鈕,長按數秒。)