日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信怎么自动加好友java_Xposed-微信自动加好友功能实现

發(fā)布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信怎么自动加好友java_Xposed-微信自动加好友功能实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本帖最后由 hjw45611 于 2019-3-14 15:23 編輯

嚴重聲明

本文的意圖只有一個就是通過分析app學習更多的逆向技術,如果有人利用本文知識和技術進行非法操作進行牟利,帶來的任何法律責任都將由操作者本人承擔,和本文作者無任何關系,最終還是希望大家能夠秉著學習的心態(tài)閱讀此文。

前兩天有人想讓我做一個微信自動加好友的功能,今天就想試一試。

以微信6.6.7版本為例,手機root與Xposed框架安裝本文不做討論,如有需要查看論壇內其他帖子,本文只用于Xposed模塊編寫。

經(jīng)壇友提醒,使用文本存儲手機號,在進行讀取for循環(huán)添加時,10個以上的時候就會產(chǎn)生操作過于頻繁的提醒,而且這個提醒大概一個小時才能解除。

經(jīng)過優(yōu)化后,增加了線程的sleep時間,可實現(xiàn)自動循環(huán)查看好友信息,但在運行到25個左右時也會觸發(fā)操作過于頻繁的提醒。

并且如果加好友的功能也增加上的話,也會由于加好友頻繁而被限制,所以最好是通過ContentProvider把大量手機號批量寫入到手機通訊錄數(shù)據(jù)庫中,然后使用微信的添加通訊錄好友的方式來添加好友,但有網(wǎng)友反應可用,也有網(wǎng)友反應加的多了收不到驗證信息,我也并未實驗, 以下分析流程就僅做參考吧。

至今(2019-03-14)微信自動加好友的分析已經(jīng)完成,主要分三步:

1.查找好友(本文)

2.自動點擊添加好友按鈕進入驗證頁面

https://www.52pojie.cn/thread-886190-1-1.html

3.自動發(fā)送驗證信息

https://www.52pojie.cn/thread-897346-1-1.html

希望喜歡Xposed的朋友能交流學習,從中獲益。

1.首先查看微信加好友的頁面

是FTSAddFriendUI這個Activity。

2.使用jadx打開app,查找FTSAddFriendUI

3.尋找突破點

屏幕快照 2019-02-18 22.13.24.png (119.18 KB, 下載次數(shù): 15)

2019-2-19 09:31 上傳

大體瀏覽后沒有類似EditView的實例對象,但發(fā)現(xiàn)一個內部類FTSAddFriendUI$5

屏幕快照 2019-02-18 17.49.34.png (307.29 KB, 下載次數(shù): 9)

2019-2-19 09:31 上傳

-1通過簡單分析,確定這個內部類是搜索好友后的結果顯示

成功的話就intent跳轉,失敗的話就顯示該用戶不存在等錯誤信息

-2直接查找它的使用

是CM方法使用到它了,分析可得這個方法的參數(shù)就是輸入框的字符串,字符串不為空后進行查詢,并顯示一個正在查詢的Dialog,有結果后回調OnCancelListener,并且觸發(fā)內部類FTSAddFriendUI$5中的結果顯示方法。

屏幕快照 2019-02-18 17.52.33.png (144.55 KB, 下載次數(shù): 8)

2019-2-19 09:32 上傳

Hook CM方法,打印string參數(shù),發(fā)現(xiàn)就是輸入框的文本數(shù)據(jù),確認CM方法就是要找的方法

-3xposed直接使用

[Java] 純文本查看 復制代碼final Class FTSAddFriendUIClass=loadPackageParam.classLoader.loadClass("com.tencent.mm.plugin.fts.ui.FTSAddFriendUI");

findAndHookMethod(FTSAddFriendUIClass,

"onCreate",Bundle.class,

new XC_MethodHook() {

@Override

protected void afterHookedMethod(final MethodHookParam param) throws Throwable {

super.afterHookedMethod(param);

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

XposedHelpers.callMethod(param.thisObject,"CM","微信號/QQ號/手機號");

}

},1000);

}

});

searchUserErr.gif (709.39 KB, 下載次數(shù): 8)

2019-2-19 09:33 上傳

-4解決問題

結果可以看到只有dialog,dialog結束后并沒有反應,但dialog能顯示說明代碼執(zhí)行了,那就來看一下FTSAddFriendUI$5這個結果處理類里的方法有沒有執(zhí)行吧。

[Java] 純文本查看 復制代碼findAndHookMethod("com.tencent.mm.plugin.fts.ui.FTSAddFriendUI$5",loadPackageParam.classLoader,

"a",int .class, int .class,String.class,XposedHelpers.findClass("com.tencent.mm.ab.l",loadPackageParam.classLoader) ,

new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

super.beforeHookedMethod(param);

log("FTSAddFriendUI$5--0="+param.args[0]+"=1="+param.args[1]+

"=2="+param.args[2]);

}

});

打印結果如下:

2019-02-18 17:55:19.347 3872-3872/? I/Xposed: [17:55:19]:??FTSAddFriendUI$5--0=0=1=0=2=Everything is OK

搜索結果處理的方法執(zhí)行了,說明問題不在CM方法,而是在處理方法中因為某個問題而停止了。

那就來分析一下這個a方法里的哪段代碼是有問題的吧。a方法完整代碼如下,

[Java] 純文本查看 復制代碼public final void mo2331a(int i, int i2, String str, C0879l c0879l) {

C1261g.m2963DF().mo8629b(106, (C0874e) this);

FTSAddFriendUI.this.aQA();

if (i == 0 && i2 == 0) {

FTSAddFriendUI.this.iJw = ((C9339f) c0879l).bcS();

if (FTSAddFriendUI.this.iJw.rHb > 0) {

if (FTSAddFriendUI.this.iJw.rHc.isEmpty()) {

C35785h.m67602a(FTSAddFriendUI.this, C8733g.search_contact_not_found, 0, true, null);

return;

}

Intent intent = new Intent();

intent.putExtra("add_more_friend_search_scene", 3);

if (FTSAddFriendUI.this.iJw.rHc.size() > 1) {

try {

intent.putExtra("result", FTSAddFriendUI.this.iJw.toByteArray());

C36379d.m70344b(FTSAddFriendUI.this.mController.tml, "subapp", ".ui.pluginapp.ContactSearchResultUI", intent);

return;

} catch (Throwable e) {

C3327x.printErrStackTrace("MicroMsg.FTS.FTSAddFriendUI", e, "", new Object[0]);

return;

}

}

((C33521h) C1261g.m2977l(C33521h.class)).mo24028a(intent, (biy) FTSAddFriendUI.this.iJw.rHc.getFirst(), FTSAddFriendUI.this.jvZ);

}

FTSAddFriendUI.this.jvX = 1;

FTSAddFriendUI.m48692g(FTSAddFriendUI.this);

} else {

switch (i2) {

case DownloadResult.CODE_CONNECTION_EXCEPTION /*-24*/:

C29477a eV = C29477a.m50825eV(str);

if (eV == null) {

FTSAddFriendUI.this.jvQ.setText(C8733g.no_contact_result);

break;

} else {

FTSAddFriendUI.this.jvQ.setText(eV.desc);

break;

}

case -4:

if (i != 4) {

FTSAddFriendUI.this.jvQ.setText(FTSAddFriendUI.this.getString(C8733g.search_contact_err_no_code));

break;

}

default:

FTSAddFriendUI.this.jvQ.setText(C8733g.no_contact_result);

break;

}

FTSAddFriendUI.this.jvX = -1;

FTSAddFriendUI.this.jvY = 1;

}

FTSAddFriendUI.m48693h(FTSAddFriendUI.this);

}

因為上面打印log時前兩個參數(shù)都是0,所以精簡后如下

[Java] 純文本查看 復制代碼public final void mo2331a(int i, int i2, String str, C0879l c0879l) {

C1261g.m2963DF().mo8629b(106, (C0874e) this);

FTSAddFriendUI.this.aQA();

if (i == 0 && i2 == 0) {

FTSAddFriendUI.this.iJw = ((C9339f) c0879l).bcS();

if (FTSAddFriendUI.this.iJw.rHb > 0) {

if (FTSAddFriendUI.this.iJw.rHc.isEmpty()) {

C35785h.m67602a(FTSAddFriendUI.this, C8733g.search_contact_not_found, 0, true, null);

return;

}

Intent intent = new Intent();

intent.putExtra("add_more_friend_search_scene", 3);

if (FTSAddFriendUI.this.iJw.rHc.size() > 1) {

try {

intent.putExtra("result", FTSAddFriendUI.this.iJw.toByteArray());

C36379d.m70344b(FTSAddFriendUI.this.mController.tml, "subapp", ".ui.pluginapp.ContactSearchResultUI", intent);

return;

} catch (Throwable e) {

C3327x.printErrStackTrace("MicroMsg.FTS.FTSAddFriendUI", e, "", new Object[0]);

return;

}

}

((C33521h) C1261g.m2977l(C33521h.class)).mo24028a(intent, (biy) FTSAddFriendUI.this.iJw.rHc.getFirst(), FTSAddFriendUI.this.jvZ);

}

FTSAddFriendUI.this.jvX = 1;

FTSAddFriendUI.m48692g(FTSAddFriendUI.this);

}

FTSAddFriendUI.m48693h(FTSAddFriendUI.this);

}

前面代碼分析后無問題,但 if (FTSAddFriendUI.this.iJw.rHb > 0) 判斷時不知rHb的值,此處需要hook一下。

[Java] 純文本查看 復制代碼findAndHookMethod("com.tencent.mm.plugin.fts.ui.FTSAddFriendUI$5",loadPackageParam.classLoader,

"a",int .class, int .class,String.class,XposedHelpers.findClass("com.tencent.mm.ab.l",loadPackageParam.classLoader) ,

new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

super.beforeHookedMethod(param);

log("FTSAddFriendUI$5--0="+param.args[0]+"=1="+param.args[1]+

"=2="+param.args[2]+ "=rHb="+XposedHelpers.findField(XposedHelpers.findClass("com.tencent.mm.protocal.c.bja",loadPackageParam.classLoader),"rHb").get(XposedHelpers.callMethod((param.args[3]),"bcS"))

);

}

打印得知rHb=0,所以不會走if語句內的代碼,只有兩個方法m48692g與m48693h有可能有問題,按順序檢查參數(shù)

最終發(fā)現(xiàn)是這兩個方法中使用了FTSAddFriendUI的變量bWm,而在輸入框使用addTextChangedListener進行綁定后,bWm存儲了輸入的字符串,所以如果直接調用CM方法的話,導致bWm變量為空,所以解決方法如下:

[Java] 純文本查看 復制代碼final Class FTSAddFriendUIClass=loadPackageParam.classLoader.loadClass("com.tencent.mm.plugin.fts.ui.FTSAddFriendUI");

findAndHookMethod(FTSAddFriendUIClass,

"onCreate",Bundle.class,

new XC_MethodHook() {

@Override

protected void afterHookedMethod(final MethodHookParam param) throws Throwable {

super.afterHookedMethod(param);

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

XposedHelpers.setObjectField(param.thisObject,"bWm","微信號/QQ號/手機號");

XposedHelpers.callMethod(param.thisObject,"CM","微信號/QQ號/手機號");

}

},1000);

}

});

2019-02-19 09_24_57.gif (739.03 KB, 下載次數(shù): 8)

2019-2-19 09:34 上傳

可以看到進入加好友界面后不需要輸入,直接進入好友詳情界面。

當然如果輸入數(shù)據(jù)搜索不到好友,結果處理方法的參數(shù)是

2019-02-18 17:58:34.082 3872-3872/? I/Xposed: [17:58:34]:??FTSAddFriendUI$5--0=4=1=-4=2=User do not exist

總結

以上是生活随笔為你收集整理的微信怎么自动加好友java_Xposed-微信自动加好友功能实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。