Xposed系列

微信是我們日常最經常使用的APP,今天我們就使用Xposed來實現自動登錄,在實現代碼之前我們要先分析微信這個app。

1.1 我們先在雷電模擬器打開微信,進入登錄界面。

Xposed系列 - 微信自動登錄

1.2 再打開佈局優化利器之 Hierarchy Viewer,通過這個利器我們可以看到微信的登錄界面對應的類是:com.tencent.mm.plugin.account.ui.LoginUI。

Xposed系列 - 微信自動登錄

2、通過jadx-gui反編譯微信Apk,查找相應的代碼,並查找賬號、密碼、登錄按鈕對應的字段。

Xposed系列 - 微信自動登錄

通過代碼分析,我們可以定位到:gZC為賬號輸入框,gZD為密碼輸入框,gZG為登錄按鈕。

Xposed系列 - 微信自動登錄

3、監聽登錄界面,並設置賬號與密碼,並自動登錄。

if(packageName.equals("com.tencent.mm"))
{
findAndHookMethod("com.tencent.mm.plugin.account.ui.LoginUI", loadPackageParam.classLoader, "onCreate",
Bundle.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
Class c = loadPackageParam.classLoader.loadClass("com.tencent.mm.plugin.account.ui.LoginUI");
//設置賬號
Field uaserName = c.getDeclaredField("gZC");
uaserName.setAccessible(true);
EditText uaserNameEditText = (EditText) uaserName.get(param.thisObject);
uaserNameEditText.setText("weixin");
//設置密碼
Field password = c.getDeclaredField("gZD");
password.setAccessible(true);
EditText passwordEditText = (EditText) password.get(param.thisObject);
passwordEditText.setText("123456");
//登錄
Field login = c.getDeclaredField("gZG");
login.setAccessible(true);
Button loginButton = (Button) login.get(param.thisObject);
loginButton.callOnClick();
}
});
}
Xposed系列 - 微信自動登錄

這樣就可以實現微信自動登錄功能,有2個地方要注意的:

1、Hierarchy Viewer在真機上,只有root才能連接。

2、我們通過Hierarchy Viewer看到的登錄界面對應的類是:com.tencent.mm.plugin.account.ui.LoginUI,但反編譯出來的對應是:com.tencent.p194mm.plugin.account.p316ui.LoginUI,這個要注意下。


分享到:


相關文章: