コンピューターで複数の 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 行を開始できました:

その後、インターネットで検索してみると、このトリックは昔、他の人が使っていたことがわかり、まるで火星にいるような気分になりました。しかし、なぜこのようにしてさらに多くの扉を開けることができるのでしょうか?その謎を知りたいです。
ヒント: テクニカル分析の部分に興味がない場合は、スキップして最後の真実の部分に直接進んでください。
WeChat のシングルトン モード
通常の状況では、WeChat アイコンを直接ダブルクリックして開始できます。後で開始されるプロセスにより、グローバル シングルトン モード チェックが実行されます。プロセスがすでに存在する場合は、対応するプロセスの WeChat ウィンドウを直接アクティブ化し、デスクトップの前面に配置してから終了します。
しかし、なぜ上記の方法を使用して両方を開始できるのでしょうか?確認してみましょう。
まず、上記の WeChat の単一インスタンスがどのように実装されているかを分析しましょう。
Windows プラットフォーム アプリケーションの開発を行ったことのある友人はこれに精通しているかもしれません。通常、プロセスの開始後に、グローバルに一意な名前を持つミューテックスが作成されます。作成が成功すると、通常どおりに起動します。作成に失敗した場合は、ミューテックスが同じであるかどうかが判断されます。リペラはすでに存在します。すでに存在する場合は、対応するプログラムが以前に起動されたことを意味します。
この推測により、ツール procexp を使用して、WeChat プロセスによって開かれたすべてのカーネル オブジェクトをチェックし、ミューテックス部分を見つけます:

案の定、_WeChat_App_Instance_Identity_Mutex_Name という名前のミューテックスがあります。この名前から、これは間違いなく WeChat のシングルトン モードに関連していると推測できます。
次に、アーティファクト APIMonitor を起動します。これは、指定されたプロセスの API 呼び出しを監視するのに役立ち、2 つの Windows API 関数 CreateMutex と GetLastError を確認します。 WeChat がすでに実行されている場合は、このツールを使用して別の WeChat プロセスを開始し、関数呼び出しを確認します:

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

はすでに存在することを意味します。
この CreateMutex 呼び出しのスタックを見て、コードがこのグローバル ミューテックスを作成している場所を確認してみましょう:

スタックから、呼び出しが WeChat ディレクトリ内のダイナミック ライブラリ WeChatWin.dll から行われていることがわかります。特定の場所は、オフセット 0x8e271b にある前の命令です。
次に、成果物中の成果物、有名な逆アセンブリ ソフトウェア IDA を紹介します。この男は、x86、x64、ARM、MIPS などのプロセッサ アーキテクチャと、Windows、Linux、Android、MacOS、JVM のプログラム解析をサポートしています。さまざまなシステムプラットフォーム上で。
IDA を使用して WeChatWin.dll ファイルを開き、オフセット 0x8e271b を見つけます。

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

上の図は、ミューテックス作成後の判定ロジックを示しています。
sub_108e26d0 の戻り値が 0 の場合、エラーがないことを意味し、現在の関数は直接0を返します。
如果sub_108e26d0的返回值不为0,表示出现了错误,则依次判断 WeChatMainWndForPC和 WeChatLoginWndForPC两个窗口是否存在,如果存在则使用 BringWindowToTop函数将其置顶弹出。这两个窗口分别代表的是微信的主界面窗口和登陆界面窗口,如果一个微信实例已经存在,则势必处于这两种状态之一。
问题就出在上面这个判断中,汇编代码看起来有点辣眼睛,咱们F5来还原一下C代码(还原效果只能凑合看,能看清楚逻辑就行):

上面图片的注解已经说明了,函数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 で複数のアカウントを開くにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Javaは、プラットフォームの独立性により、エンタープライズレベルのアプリケーションで広く使用されています。 1)プラットフォームの独立性は、Java Virtual Machine(JVM)を介して実装されているため、Javaをサポートする任意のプラットフォームでコードを実行できます。 2)クロスプラットフォームの展開と開発プロセスを簡素化し、柔軟性とスケーラビリティを高めます。 3)ただし、パフォーマンスの違いとサードパーティライブラリの互換性に注意を払い、純粋なJavaコードやクロスプラットフォームテストの使用などのベストプラクティスを採用する必要があります。

javaplaysasificanificantduetduetoitsplatformindepence.1)itallowscodetobewrittendunonvariousdevices.2)java'secosystemprovidesutionforiot.3)そのセキュリティフィートルセンハンス系

TheSolution to HandlefilepathsaCrosswindossandlinuxinjavaistousepaths.get()fromthejava.nio.filepackage.1)usesystem.getProperty( "user.dir")およびhearterativepathtoconstructurctthefilepath.2)

java'splatformentepenceissificAntiveSifcuseDeverowsDevelowSowRitecodeOdeonceantoniTONAnyPlatformwsajvm.これは「writeonce、runanywhere」(wora)adportoffers:1)クロスプラットフォームの複雑性、deploymentacrossdiferentososwithusisues; 2)re

Javaは、クロスサーバーWebアプリケーションの開発に適しています。 1)Javaの「Write and、Run Averywhere」哲学は、JVMをサポートするあらゆるプラットフォームでコードを実行します。 2)Javaには、開発プロセスを簡素化するために、SpringやHibernateなどのツールを含む豊富なエコシステムがあります。 3)Javaは、パフォーマンスとセキュリティにおいて優れたパフォーマンスを発揮し、効率的なメモリ管理と強力なセキュリティ保証を提供します。

JVMは、バイトコード解釈、プラットフォームに依存しないAPI、動的クラスの負荷を介してJavaのWORA機能を実装します。 2。標準API抽象オペレーティングシステムの違い。 3.クラスは、実行時に動的にロードされ、一貫性を確保します。

Javaの最新バージョンは、JVMの最適化、標準的なライブラリの改善、サードパーティライブラリサポートを通じて、プラットフォーム固有の問題を効果的に解決します。 1)Java11のZGCなどのJVM最適化により、ガベージコレクションのパフォーマンスが向上します。 2)Java9のモジュールシステムなどの標準的なライブラリの改善は、プラットフォーム関連の問題を削減します。 3)サードパーティライブラリは、OpenCVなどのプラットフォーム最適化バージョンを提供します。

JVMのバイトコード検証プロセスには、4つの重要な手順が含まれます。1)クラスファイル形式が仕様に準拠しているかどうかを確認し、2)バイトコード命令の有効性と正確性を確認し、3)データフロー分析を実行してタイプの安全性を確保し、検証の完全性とパフォーマンスのバランスをとる。これらの手順を通じて、JVMは、安全で正しいバイトコードのみが実行されることを保証し、それによりプログラムの完全性とセキュリティを保護します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
