目次
コンピューターで複数の WeChat アカウントを開くこともできます
WeChat のシングルトン モード
真相只有一个
小发现
ホームページ Java &#&チュートリアル Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

Apr 21, 2023 pm 03:04 PM
java

コンピューターで複数の WeChat アカウントを開くこともできます

昨日、親友のシャオ リン (WeChat 公開アカウント: シャオ リン コーディング) から、彼のコンピューターが実際にログインできることを偶然知りました。同時に 2 つの WeChat ID。

携帯電話で WeChat を起動します。Huawei や Xiaomi などの携帯電話システムがこれをサポートしていることは知っています。しかし、Windows システムを実行しているコンピュータで 2 つの WeChat を起動するにはどうすればよいでしょうか? これは本当に懸念を呼び起こしました。興味深いです。

Xiao Lin は、これを実行してバッチ プロセスを作成したと私に言いました:

<code>start D:\WeChat\WeChat.exe<br>start D:\WeChat\WeChat.exe</code> 
ログイン後にコピー

次に、バッチ ファイルを直接ダブルクリックして 2 つの WeChat プロセスを開始しました。

試してみたら、本当にその通りでした!

次に別の行を追加すると、さらに 3 行を開始できました:

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

その後、インターネットで検索してみると、このトリックは昔、他の人が使っていたことがわかり、まるで火星にいるような気分になりました。しかし、なぜこのようにしてさらに多くの扉を開けることができるのでしょうか?その謎を知りたいです。

ヒント: テクニカル分析の部分に興味がない場合は、スキップして最後の真実の部分に直接進んでください。

WeChat のシングルトン モード

通常の状況では、WeChat アイコンを直接ダブルクリックして開始できます。後で開始されるプロセスにより、グローバル シングルトン モード チェックが実行されます。プロセスがすでに存在する場合は、対応するプロセスの WeChat ウィンドウを直接アクティブ化し、デスクトップの前面に配置してから終了します。

しかし、なぜ上記の方法を使用して両方を開始できるのでしょうか?確認してみましょう。

まず、上記の WeChat の単一インスタンスがどのように実装されているかを分析しましょう。

Windows プラットフォーム アプリケーションの開発を行ったことのある友人はこれに精通しているかもしれません。通常、プロセスの開始後に、グローバルに一意な名前を持つミューテックスが作成されます。作成が成功すると、通常どおりに起動します。作成に失敗した場合は、ミューテックスが同じであるかどうかが判断されます。リペラはすでに存在します。すでに存在する場合は、対応するプログラムが以前に起動されたことを意味します。

この推測により、ツール procexp を使用して、WeChat プロセスによって開かれたすべてのカーネル オブジェクトをチェックし、ミューテックス部分を見つけます:

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

案の定、_WeChat_App_Instance_Identity_Mutex_Name という名前のミューテックスがあります。この名前から、これは間違いなく WeChat のシングルトン モードに関連していると推測できます。

次に、アーティファクト APIMonitor を起動します。これは、指定されたプロセスの API 呼び出しを監視するのに役立ち、2 つの Windows API 関数 CreateMutexGetLastError を確認します。 WeChat がすでに実行されている場合は、このツールを使用して別の WeChat プロセスを開始し、関数呼び出しを確認します:

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

この名前でミューテックスを作成した後、GetLastError 関数が呼び出され、0x000000b7 が返されたことがわかります。その意味についてはマニュアルを確認してください:

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

はすでに存在することを意味します。

この CreateMutex 呼び出しのスタックを見て、コードがこのグローバル ミューテックスを作成している場所を確認してみましょう:

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

スタックから、呼び出しが WeChat ディレクトリ内のダイナミック ライブラリ WeChatWin.dll から行われていることがわかります。特定の場所は、オフセット 0x8e271b にある前の命令です。

次に、成果物中の成果物、有名な逆アセンブリ ソフトウェア IDA を紹介します。この男は、x86、x64、ARM、MIPS などのプロセッサ アーキテクチャと、Windows、Linux、Android、MacOS、JVM のプログラム解析をサポートしています。さまざまなシステムプラットフォーム上で。

IDA を使用して WeChatWin.dll ファイルを開き、オフセット 0x8e271b を見つけます。

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

#上の図に示すように、ミューテックスを作成するアクションは、次の場所で発生します。関数sub_108e26d0。

上位層は、それを呼び出す sub_108e2660 関数です:

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

上の図は、ミューテックス作成後の判定ロジックを示しています。

  • sub_108e26d0 の戻り値が 0 の場合、エラーがないことを意味し、現在の関数は直接0を返します。

  • 如果sub_108e26d0的返回值不为0,表示出现了错误,则依次判断     WeChatMainWndForPC和     WeChatLoginWndForPC两个窗口是否存在,如果存在则使用     BringWindowToTop函数将其置顶弹出。这两个窗口分别代表的是微信的主界面窗口和登陆界面窗口,如果一个微信实例已经存在,则势必处于这两种状态之一。

问题就出在上面这个判断中,汇编代码看起来有点辣眼睛,咱们F5来还原一下C代码(还原效果只能凑合看,能看清楚逻辑就行):

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?  

上面图片的注解已经说明了,函数sub_108e2660的返回值将决定是否启动微信实例进程,还是直接退出。 

真相只有一个

事情到这里就真相大白了,来总结一下。

微信判断是否启动的2个条件:

  • 如果能成功创建互斥体对象,则启动微信

  • 如果不能创建互斥体:

    • 如果找到对应窗口,则置顶之,自己退出

    • 如果没有找到,则启动微信

用伪代码来表示一下:

<code>if (CreateMutex() == SUCCESS) {<br>  启动微信<br>} else {<br>  if (FindWindow() == SUCCESS) {<br>    将已有窗口置顶<br>  } else {<br>    启动微信<br>  }<br>}</code> 
ログイン後にコピー

而直接使用脚本启动的多个进程,虽然操作系统内核层面保证了互斥体的唯一,但由于启动速度相差不大,相应的窗口还没有来得及创建出来,导致走入上面的第二个启动逻辑,从而可以启动多个实例。 

小发现

在分析的过程中,发现了一个有趣的事情:

在WeChatWin.dll中,上面的创建互斥体再上一级函数名字叫StartWaChat,也是作为导出函数被该DLL导出:

Java を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?

以上がJava を使用して WeChat PC で複数のアカウントを開くにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

See all articles