<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>教程 on MoeJue&#39;s Blog</title>
    <link>https://en.moejue.cn/ja/tags/%E6%95%99%E7%A8%8B/</link>
    <description>Recent content in 教程 on MoeJue&#39;s Blog</description>
    <generator>Hugo -- 0.151.2</generator>
    <language>ja</language>
    <lastBuildDate>Sun, 06 Jul 2025 14:25:09 +0000</lastBuildDate>
    <atom:link href="https://en.moejue.cn/ja/tags/%E6%95%99%E7%A8%8B/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[メモ] Git よく使うコマンド大全（シーン別）</title>
      <link>https://en.moejue.cn/ja/posts/264/</link>
      <pubDate>Mon, 02 Jun 2025 06:58:42 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/264/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;日常の開発でよく使われるGitの操作をまとめたものです。カテゴリ別に整理されているため、すぐに使い始めたい方や、コマンドを確認したい時に役立ちます。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-基本コマンド&#34;&gt;📦 基本コマンド&lt;/h2&gt;
&lt;p&gt;コマンド&lt;/p&gt;
&lt;p&gt;役割&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Gitリポジトリを初期化します（&lt;code&gt;.git&lt;/code&gt;フォルダを作成）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;リモートリポジトリをローカルにクローンします。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;現在のワーキングディレクトリの状態（ファイルの変更、ステージングなど）を確認します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git add &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ファイルをステージングエリアに追加します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git commit -m &amp;quot;message&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ステージングエリアのファイルをローカルリポジトリにコミットし、コミットメッセージを追加します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;コミット履歴を表示します。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-ブランチ管理&#34;&gt;🌱 ブランチ管理&lt;/h2&gt;
&lt;p&gt;コマンド&lt;/p&gt;
&lt;p&gt;役割&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git branch&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ローカルブランチの一覧を表示します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git branch &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;新しいブランチを作成します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git checkout &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;指定したブランチに切り替えます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git switch &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;指定したブランチに切り替えます（推奨される新しいコマンド）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git merge &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;指定したブランチを現在のブランチにマージします。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git branch -d &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;マージ済みのブランチを削除します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git branch -D &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ブランチを強制的に削除します。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-リモートリポジトリ操作&#34;&gt;🌍 リモートリポジトリ操作&lt;/h2&gt;
&lt;p&gt;コマンド&lt;/p&gt;
&lt;p&gt;役割&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;リモートリポジトリのURLを表示します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git remote add &amp;lt;name&amp;gt; &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>敗者復活戦に勝って、生き返った</title>
      <link>https://en.moejue.cn/ja/posts/206/</link>
      <pubDate>Thu, 03 Oct 2024 02:48:02 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/206/</guid>
      <description>&lt;h3 id=&#34;近況&#34;&gt;近況&lt;/h3&gt;
&lt;p&gt;前回の雑談からもう2ヶ月以上も経ってしまいました。そろそろ自分の考えを整理する時が来たようです。前回は色々と感慨を述べたきり音沙汰がなかったので、少し急ぎすぎたかもしれません。その後の作業が追いつかなくなってしまいました。&lt;/p&gt;
&lt;p&gt;また国慶節の季節がやってきました。やはり私の国慶節は「独身の日（ダブルイレブン）」のようなものです。以前所有していた3つのドメイン（52ecy.cn, moeins.cn, moeins.com）は、復活戦には勝ったものの、装備がなくなってしまいました。&lt;/p&gt;
&lt;p&gt;そのため、ドメインを新規購入するしかありませんでした。同時にもブログを復旧させました。やはり自分でいじりたいのでしょう。博客园（cnblogs）に間借りするのは、どうも居心地が悪く感じます。&lt;/p&gt;
&lt;p&gt;以前からずっと使っていたemlogですが、この機会に思い切ってシステムをWordPressに移行し、同時に新しいテーマに切り替えました。このテーマは&lt;a href=&#34;https://www.boxmoe.com/&#34;&gt;专收爆米花&lt;/a&gt;さんが21年頃にリリースしたもので、当時locで見かけてすぐにstarを付け、私のGitHubで4年間眠っていました&lt;a href=&#34;https://github.com/iAJue/lolimeow&#34;&gt;lolimeow&lt;/a&gt;。当時はずっとemlogを使っていたので、いじるのが面倒だったのです。この機会に乗じて、徹底的にやろうと決め、データの移行やテーマの調整など、かなりの手間をかけました。&lt;/p&gt;
&lt;p&gt;作者の方がずっとテーマの更新を積極的に進めてくれていたおかげで、使用中に大きな問題はありませんでした。しかし、私が以前使っていたシステムの機能がいくつか欠けていたので、私もこのテーマを更新し、元のリポジトリにプルリクエストを送りました。上に貼ったGitHubのリンクは私が更新した後のものです。&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu90no7xm8j20w414kdue.jpg&#34;&gt; 最も面倒だったデータ移行の部分ですが、ネットで長いこと探し回ってもexe版しか見つかりませんでした。exe版はなんとなく不安な感じがする上に、私は今Macを使っているので、直接実行することもできません。「ないなら自分で作ればいい」ということで、時間をかけて移行スクリプトを自作するしかありませんでした。GitHubのアドレスは記事の最後に載せてあります。emlogのデータをWordPressに完璧に移行できます。さすが俺！&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu86bsccndj21hc0u0gr1.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;画像はこれまで通り、一部はバックアップとして七牛云（Qiniu Cloud）に、もう一部は新浪图床（Sina Image Hosting）に保存しています。移行してみると、市場には私に適した使いやすい七牛云プラグインがなかったので、また自分で一つ作りました。&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu8aervippj20z608i0ws.jpg&#34;&gt; &lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn/large/78350c19ly8hu8aexj66gj20zw12yk01.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;新ドメイン&#34;&gt;新ドメイン&lt;/h3&gt;
&lt;p&gt;あまり気は進みませんでしたが、またドメインを変更するしかありませんでした。以前のドメインは他人の肥やしになってしまいました。萌音シリーズ：MoeKot.cn。「萌音ノート」「萌音カード」「萌音コミュニティ」「萌音ストア」などを含む萌音シリーズは、今後このドメインの下に置かれます。メインサイトシリーズ：MoeJue.cn。これは私のメインサイトで、ブログやシリーズに属さないプロジェクトなどがこのドメインの下に置かれます。&lt;/p&gt;
&lt;h4 id=&#34;解説&#34;&gt;解説&lt;/h4&gt;
&lt;p&gt;Moe: 日本語の「萌え」の読み方で、ローマ字表記です。中国語では一般的に「萌」と訳されます。
Kot: 日本語の「声（こえ）」を意味する言葉で、ローマ字表記です。
Jue: 阿珏（A Jue）ちゃんの簡単な音訳です。&lt;/p&gt;
&lt;h3 id=&#34;ブログ&#34;&gt;ブログ&lt;/h3&gt;
&lt;p&gt;私はとても昔を懐かしむ情に厚い人間なので、以前のブログもすべて残してあります。&lt;a href=&#34;http://xlog.moejue.cn/&#34;&gt;Xlog&lt;/a&gt; &lt;a href=&#34;https://www.cnblogs.com/Ajue&#34;&gt;cnblogs&lt;/a&gt; &lt;a href=&#34;https://log.MoeJue.cn&#34;&gt;emlog&lt;/a&gt; &lt;a href=&#34;https://blog.moejue.cn&#34;&gt;Blog&lt;/a&gt; 関連サイトのドメインも移行しましたが、すべてをリストアップするのはやめておきます。もちろん、一部のリンクが完全に置換されていない可能性もあります。&lt;/p&gt;
&lt;p&gt;すべてのデータは元のままで、誰一人のデータも欠けていません。ブログの登録ユーザーのデータさえも一緒に移行したので、新しいシステムで直接ログインできます。パスワードも同じです。&lt;/p&gt;
&lt;h5 id=&#34;ぜひstarを付けてください&#34;&gt;ぜひstarを付けてください！&lt;/h5&gt;
&lt;p&gt;使い方もREADME.mdに書いておきました。何か問題があれば、直接issueを立ててください。&lt;/p&gt;
&lt;h4 id=&#34;emlogからwordpressへの移行スクリプト&#34;&gt;&lt;a href=&#34;https://github.com/iAJue/migrate_emlog_to_wp&#34;&gt;emlogからWordPressへの移行スクリプト&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;私のブログは間もなくTencent Cloud開発者コミュニティにも同期される予定です。皆さんのご参加をお待ちしています：&lt;a href=&#34;https://cloud.tencent.com/developer/support-plan?invite_code=15kxzzid10tgx&#34;&gt;https://cloud.tencent.com/developer/support-plan?invite_code=15kxzzid10tgx&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web3.0とは何か？ブロックチェーンとの関係は？</title>
      <link>https://en.moejue.cn/ja/posts/202/</link>
      <pubDate>Mon, 17 Jun 2024 12:59:22 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/202/</guid>
      <description>&lt;p&gt;また一つ、よくわからない言葉が出てきましたね-_-。以下に要点をまとめてみました。&lt;/p&gt;
&lt;h2 id=&#34;web30とは何か&#34;&gt;web3.0とは何か&lt;/h2&gt;
&lt;p&gt;Web 3.0（Web3）は、次世代のインターネットの発展方向であり、より分散化され、ユーザーがコントロールし、データが保護されるネットワーク環境を構築することを目指しています。これまでのWeb 1.0（静的なウェブページ）やWeb 2.0（動的でインタラクティブなウェブページやソーシャルメディア）とは異なり、Web 3.0の核心的な理念と技術には以下の側面が含まれます。&lt;/p&gt;
&lt;h3 id=&#34;非中央集権化&#34;&gt;非中央集権化：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ブロックチェーン技術：Web 3.0の核心はブロックチェーン技術であり、すべての取引やデータの変更を記録する分散型台帳を提供します。これは、データが単一の中央サーバーによって管理されるのではなく、複数のノードに分散されることを意味します。&lt;/li&gt;
&lt;li&gt;分散型アプリケーション（DApps）：これらのアプリケーションはブロックチェーンネットワーク上で実行され、中央集権的な管理者が存在しません。DAppsのユーザーは、仲介機関を介さずに直接取引や対話を行うことができます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ユーザーコントロールとデータ保護&#34;&gt;ユーザーコントロールとデータ保護：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;自己主権型アイデンティティ：Web 3.0では、ユーザーは自身のデジタルアイデンティティとデータを完全にコントロールできます。暗号技術を通じて、ユーザーは誰が自分のデータにアクセスできるか、またそのデータをどのように使用するかを決定できます。&lt;/li&gt;
&lt;li&gt;データ所有権：ユーザーのデータは分散型ネットワーク上に保存され、大手企業による集中管理ではなく、ユーザー自身がデータの所有権を持ちます。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;スマートコントラクト&#34;&gt;スマートコントラクト：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;自動実行プロトコル：スマートコントラクトは、ブロックチェーン上で実行される自動化されたプロトコルであり、特定の条件が満たされると自動的に実行されます。この技術は、金融取引、サプライチェーン管理、法的な契約など、さまざまなシーンで利用できます。&lt;/li&gt;
&lt;li&gt;相互運用性：Web 3.0は、異なるブロックチェーンや分散型ネットワーク間の相互運用性を実現し、データや資産が異なるプラットフォーム間でシームレスに移動できるようにすることを目指しています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;トラストレスと透明性&#34;&gt;トラストレスと透明性：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;トラストレスなメカニズム：Web 3.0はブロックチェーン技術を通じてトラストレスなメカニズムを実現します。つまり、参加者はお互いを信頼したり、第三者の仲介者に依存したりすることなく、安全な取引や対話を行うことができます。&lt;/li&gt;
&lt;li&gt;透明性：すべての取引やデータの変更はブロックチェーン上に記録され、公開され透明であり、改ざん不可能です。これにより、信頼性とセキュリティが向上します。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;web-30の応用シーン&#34;&gt;Web 3.0の応用シーン&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;分散型金融（DeFi）：スマートコントラクトとブロックチェーン技術を通じて、貸付、取引、投資などの仲介者を必要としない金融サービスを提供します。&lt;/li&gt;
&lt;li&gt;デジタルアイデンティティ：ユーザーは自身のデジタルアイデンティティを作成・管理し、個人データのアクセスと使用をコントロールできます。&lt;/li&gt;
&lt;li&gt;サプライチェーン管理：ブロックチェーン技術を通じて、サプライチェーンの透明性と追跡可能性を実現し、偽造や詐欺を防止します。&lt;/li&gt;
&lt;li&gt;コンテンツ制作と配信：アーティスト、ミュージシャン、作家は、直接視聴者と対話し取引を行うことで、より公平な収益分配を得ることができます。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;ではブロックチェーンとは何か&#34;&gt;では、ブロックチェーンとは何か？&lt;/h2&gt;
&lt;p&gt;ブロックチェーン技術は、分散型台帳技術（Distributed Ledger Technology, DLT）の一種であり、取引や情報を記録するための改ざん不可能で非中央集権的なデータベースです。ブロックチェーン技術の核心的な考え方は、非中央集権的な方法でデータの安全性、透明性、信頼性を実現することです。&lt;/p&gt;
&lt;h3 id=&#34;ブロックチェーンの基本原理&#34;&gt;ブロックチェーンの基本原理&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ブロック（Block）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブロックは取引記録を含むデータパッケージです。各ブロックには複数の取引と、そのブロックを一位に識別するためのハッシュ値が含まれています。&lt;/li&gt;
&lt;li&gt;ブロックには前のブロックのハッシュ値も含まれており、これによりすべてのブロックが鎖のようにつながり、ブロックチェーンを形成します。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;チェーン（Chain）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブロックはハッシュ値によって相互に連結され、チェーン構造を形成します。各ブロックが前のブロックのハッシュ値を含むため、ブロックチェーン内のデータを改ざんすることは非常に困難です。&lt;/li&gt;
&lt;li&gt;あるブロックのデータを変更しようとすると、そのブロックおよびそれに続くすべてのブロックのハッシュ値が変化するため、これらすべてのブロックのハッシュ値を再計算する必要があり、これはほぼ不可能です。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;非中央集権化（Decentralization）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブロックチェーンネットワーク内のすべてのノード（コンピュータ）は、ブロックチェーンの完全なコピーを保持しており、これらのコピーはコンセンサスメカニズムによって一貫性が保たれています。&lt;/li&gt;
&lt;li&gt;中央機関がブロックチェーンを管理・制御することはなく、データはすべてのノードによって共同で維持されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;コンセンサスメカニズム（Consensus Mechanism）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブロックチェーンネットワークは、すべてのノードがブロックチェーンの状態について合意に達することを保証するためにコンセンサスメカニズムを使用します。一般的なコンセンサスメカニズムには、プルーフ・オブ・ワーク（Proof of Work, PoW）やプルーフ・オブ・ステーク（Proof of Stake, PoS）があります。&lt;/li&gt;
&lt;li&gt;プルーフ・オブ・ワーク（PoW）：マイナーが複雑な数学的問題を解くことで取引を検証し、ブロックチェーンに追加します。問題を解くには大量の計算能力が必要であり、これによりブロックチェーンのセキュリティが確保されます。&lt;/li&gt;
&lt;li&gt;プルーフ・オブ・ステーク（PoS）：バリデーターが保有する暗号資産の量やその他の要因に基づいて取引を検証し、それに応じた報酬を得ます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;暗号技術（Cryptography）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブロックチェーンは、データの安全性とプライバシーを確保するために暗号技術を使用します。各取引は公開鍵と秘密鍵を使用して署名・検証され、正当な所有者のみが取引を開始できるようにします。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;ブロックチェーンのメリット&#34;&gt;ブロックチェーンのメリット&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;セキュリティ：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データは複数のノードに分散されているため、単一障害点がなく、攻撃者がデータを改ざんすることは困難です。各ブロックには前のブロックのハッシュ値が含まれており、一つのブロックを改ざんするにはチェーン全体を変更する必要があるため、コストが非常に高くなります。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;透明性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブロックチェーン上のすべての取引記録は公開されており、誰でも閲覧できます。取引記録は改ざん不可能であり、システムの透明性と信頼性を高めます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;非中央集権化：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中央管理機関が存在せず、すべてのノードが平等にネットワークの維持・管理に参加するため、単一の支配や権力の集中を防ぎます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;改ざん耐性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データが一度ブロックチェーンに書き込まれると、それを改ざんすることは非常に困難であり、データの完全性と真正性が保証されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;ブロックチェーンの応用シーン&#34;&gt;ブロックチェーンの応用シーン&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;暗号資産（仮想通貨）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ビットコイン（Bitcoin）は、最初で最も有名なブロックチェーンアプリケーションであり、非中央集権的な方法でピアツーピアの電子現金システムを実現します。&lt;/li&gt;
&lt;li&gt;イーサリアム（Ethereum）は、暗号資産の取引だけでなく、スマートコントラクトの実行もサポートしており、ブロックチェーンの応用範囲を広げています。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;サプライチェーン管理：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web3.0ベースのブロックチェーン画像アップロード</title>
      <link>https://en.moejue.cn/ja/posts/201/</link>
      <pubDate>Mon, 17 Jun 2024 12:57:43 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/201/</guid>
      <description>&lt;p&gt;始める前に、まず基本的な概念を簡単に理解しましょう。以下のいくつかの点にまとめました。&lt;a href=&#34;https://www.cnblogs.com/Ajue/p/18252827&#34;&gt;Web3.0とは何か、ブロックチェーンとどのような関係があるのか？&lt;/a&gt;（前回の記事がここで役立ちますね）&lt;/p&gt;
&lt;p&gt;要件：PythonベースのWeb 3.0画像アップロードシステムを開発します。このシステムは、ユーザーが画像をアップロードし、その画像を分散型ネットワークに保存し、同時にトランザクション情報をブロックチェーンに記録することを可能にします。もともとは遊びで書いていたもので、ユーザー認証やファイル操作を統合した完全な管理システムにして、「画像アップロードサービスの最終的な解決策」にしようと考えたこともありましたが、実際にやってみるとあまり現実的ではないことに気づき、断念しました。しかし、私は昔から画像にこだわりがあるのです。&lt;/p&gt;
&lt;h3 id=&#34;ステップの概要&#34;&gt;ステップの概要&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;環境設定&lt;/strong&gt;：Pythonを使用して開発し、必要なPythonライブラリをインストールします。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IPFS統合&lt;/strong&gt;：画像をIPFSにアップロードし、画像のCID（Content Identifier）を取得します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ブロックチェーン統合&lt;/strong&gt;：IPFSのCIDをブロックチェーンに記録します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webインターフェース&lt;/strong&gt;：Flaskを使用して、ユーザーが画像をアップロードできるWebインターフェースを作成します。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;詳細なステップ&#34;&gt;詳細なステップ&lt;/h3&gt;
&lt;h4 id=&#34;1-環境設定&#34;&gt;1. 環境設定&lt;/h4&gt;
&lt;p&gt;必要なPythonライブラリをインストールします：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pip install flask web3 ipfshttpclient
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;2-ipfs統合&#34;&gt;2. IPFS統合&lt;/h4&gt;
&lt;p&gt;IPFS（InterPlanetary File System）は、ピアツーピアのファイルストレージプロトコルです。&lt;code&gt;ipfshttpclient&lt;/code&gt;ライブラリを使用してIPFSネットワークと対話できます。&lt;/p&gt;
&lt;p&gt;まず、IPFSノードをインストールして実行していることを確認してください。まだIPFSをインストールしていない場合は、&lt;a href=&#34;https://ipfs.io&#34;&gt;IPFS公式サイト&lt;/a&gt;でインストールガイドを見つけることができます。&lt;/p&gt;
&lt;p&gt;以下は、画像をIPFSにアップロードするコード例です：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import ipfshttpclient

def upload_to_ipfs(file_path):
    client = ipfshttpclient.connect(&amp;#39;/ip4/127.0.0.1/tcp/5001&amp;#39;)
    res = client.add(file_path)
    return res[&amp;#39;Hash&amp;#39;]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;3-ブロックチェーン統合&#34;&gt;3. ブロックチェーン統合&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;web3.py&lt;/code&gt;ライブラリを使用してIPFSのCIDをブロックチェーンに記録します。ここではイーサリアム（Ethereum）をサンプルブロックチェーンとして使用します。&lt;/p&gt;
&lt;p&gt;以下は、IPFSのCIDを保存するための簡単なスマートコントラクトの例です：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pragma solidity ^0.8.0;

contract IPFSStorage {
    mapping(address =&amp;gt; string[]) public userCIDs;

    function storeCID(string memory cid) public {
        userCIDs[msg.sender].push(cid);
    }

    function getCIDs() public view returns (string[] memory) {
        return userCIDs[msg.sender];
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;このコントラクトをコンパイルしてデプロイした後、以下のPythonコードを使用してスマートコントラクトと対話します：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android APK インストール パッケージの AndroidManifest.xml ファイルを表示します。</title>
      <link>https://en.moejue.cn/ja/posts/110/</link>
      <pubDate>Sun, 19 Apr 2020 09:15:54 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/110/</guid>
      <description>&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;
先週、私は Android システムのファクトリープッシュ機能に取り組んでいました。一部のモデルは工場出荷時にオフラインにプッシュできないため、apk を解凍し、パッケージ化パラメータに問題があるかどうかを確認します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;序文&lt;/strong&gt;
Android 開発では、自分のアプリケーションから他のアプリケーションのインターフェイスにジャンプする必要がある場合がありますが、他のアプリケーションのパッケージ名とクラス名が分からないと、これを行うのは困難です。最も簡単な方法は、アプリケーションの apk ファイルをダウンロードし、拡張子を zip または rar に変更して、ファイルを解凍することです。解凍したファイルの中に AndroidManifest.xml ファイルがあるのですが、開いてみると文字化けしていて恥ずかしいです。どうすればいいですか？&lt;/p&gt;
&lt;p&gt;AXMLPrinter2.jar は、一般的に使用される APK 逆コンパイル ツールです。これは主に、パッケージ名、バージョン番号、アイコン、その他の情報を含む apk ファイルを逆コンパイルするために使用されます。 AXMLPrinter2 を使用して androidmanifest.xml を逆コンパイルし、プレーン テキストで表示できます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用方法&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ダウンロードツール AXMLPrinter2.jar ツールのアドレス: &lt;a href=&#34;https://code.google.com/archive/p/android4me/downloads&#34;&gt;https://code.google.com/archive/p/android4me/downloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;表示する AndroidManfist.xml ファイルをツールと同じフォルダーにコピーします。&lt;/li&gt;
&lt;li&gt;現在のフォルダーで DOS ウィンドウを開きます。&lt;/li&gt;
&lt;li&gt;以下のコマンドを実行します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;java -jar AXMLPrinter2.jar AndroidManifest.xml &amp;raquo; AndroidManifest.txt&lt;/p&gt;
&lt;p&gt;このコマンドを実行すると、フォルダー内にデコードされたファイルである AndroidManifest.txt ファイルが生成されます。&lt;/p&gt;
&lt;p&gt;もちろん、実行後にエラーが発生するものもあります。「java」は内部コマンドでも外部コマンドでも、操作可能なプログラムやバッチ ファイルでもありません。&lt;br&gt;
これは、Java 環境がインストールされていないか、環境変数が設定されていないことが原因で発生します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JDK をインストールします&lt;/strong&gt;
まず、JDK のインストールプロセスを確認してみましょう&lt;/p&gt;
&lt;p&gt;1\。 JDKをダウンロードしてインストールします&lt;/p&gt;
&lt;p&gt;JDK1.6、1.7、または 1.8 をダウンロードすることを選択できます。使いたいものをダウンロードしてください。
JDK をダウンロードするための公式 Web サイト &lt;a href=&#34;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&#34;&gt;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&lt;/a&gt;
インストールは非常に簡単で、次のステップは簡単です。ここでは詳細には触れません。&lt;/p&gt;
&lt;p&gt;2\。 JDK環境変数を構成する&lt;/p&gt;
&lt;p&gt;(1) コンピュータの「マイ コンピュータ」を右クリックし、Win10 では「このコンピュータ」を選択し、「プロパティ」を選択し、システムの詳細設定を選択し、新しいインターフェースで「環境変数」を選択します。「システム変数」を編集するだけです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gdz8ohzbxnj30y10hz435.jpg&#34;&gt;
(2) 「新規」をクリックして「JAVA_HOME」という名前の変数を追加します。変数の値は「C:\Program Files\Java\jdk1.8.0_60」です。この値は、インストールした JDK パスです。インストールした場所にそのアドレスを使用するだけです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gdz8ozylg5j30m20lldi6.jpg&#34;&gt;「CLASSPATH」という名前の新しい変数を作成します。変数値は「.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar」です。必ず保存してください。 「.;」を見逃さないように注意してください。値にすべての記号を含める必要があります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>支付宝対面決済連携</title>
      <link>https://en.moejue.cn/ja/posts/107/</link>
      <pubDate>Sat, 04 Apr 2020 02:35:18 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/107/</guid>
      <description>&lt;p&gt;当面付（対面支払い）は、その名の通り対面での支払いを指し、店舗がオフラインの消費シーンで迅速な集金を可能にするものです。当面付製品は、バーコード支払いとQRコード決済の2種類の支払い方法をサポートしています。
ここで連携するのはQRコード決済です。
QRコード決済とは、ユーザーがAlipayウォレットの「スキャン」機能を開き、店舗がレジのシーンで提示するQRコードをスキャンして支払いを行うモードを指します。このモードは、オフラインの実店舗での支払い、対面支払いなどのシナリオに適しています。ビジネスフローは以下の図の通りです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwmfk760j30kf071dfz.jpg&#34;&gt;
当面付の契約は非常に簡単で、個人事業主/個人商店の契約が許可されています。そのため、この方法はオンラインのQRコード決済にも大量に利用されていますが、Alipayの関連規約に違反するため、一定のリスクがあります。技術交流として、この問題は一旦置いておきましょう。&lt;/p&gt;
&lt;p&gt;技術連携としては、当面付製品を契約していなくても開発を進めることができます。
支払い機能は取引と資金に直接関わるため、開発者が支払い機能をデバッグしやすいように、オープンプラットフォームはサンドボックス環境（サンドボックス環境アカウントとサンドボックス版Alipayウォレットを含む）を用意しています。これにより、開発者はサンドボックス環境でデバッグできます。&lt;a href=&#34;https://docs.open.alipay.com/200/105311&#34;&gt;サンドボックスへの接続方法&lt;/a&gt;と&lt;a href=&#34;https://openhome.alipay.com/platform/appDaily.htm&#34;&gt;サンドボックス環境への接続&lt;/a&gt;をクリックして詳細を確認してください。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwn0aa2ej30sq0ptwi3.jpg&#34;&gt;
そのため、私の開発ではサンドボックス環境を使用しています。何しろ中にはたくさんのお金があるので、自由に使えますからね。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwlx66oxj30cn0qo0tj.jpg&#34;&gt;
まず、対応する開発言語のSDKをダウンロードします。ダウンロード：https://docs.open.alipay.com/194/105201/
QRコード決済ドキュメント：https://docs.open.alipay.com/194/106078/&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;キーの設定&lt;/strong&gt;
取引当事者（加盟店とAlipay）の身元とデータセキュリティを確保するため、開発者はインターフェースを呼び出す前に、双方のキーを設定し、取引データの双方検証を行う必要があります。
&lt;a href=&#34;https://docs.open.alipay.com/291/105971&#34;&gt;Alipayオープンプラットフォーム開発アシスタント&lt;/a&gt;をダウンロードしてキーを生成してください。
キー生成後、開発者はオープンプラットフォーム開発者センターでキー設定を行う必要があります。設定完了後、Alipay公開鍵を取得できます。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwnhq0ztj30u00lo0y6.jpg&#34;&gt;
&lt;strong&gt;設計と連携&lt;/strong&gt;
私の設計ではポーリング（後述）を使用する必要がないため、追加していません。
以下は私の業務における関連コードです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function pay(){

    if (request()-&amp;gt;isPost()) {
        
        // (必填) 商户网站订单系统中唯一订单号，64个字符以内，只能包含字母、数字、下划线，
        // 需保证商户系统端不能重复，建议通过数据库sequence生成，
        $uid = Session::get(&#39;sq.uid&#39;);
        $outTradeNo = order\_num() . $uid;

        // (必填) 订单标题，粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费”
        $subject = &#39;聚合平台用户积分充值&#39;;

        // (必填) 订单总金额，单位为元，不能超过1亿元
        // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
        $totalAmount = input(&#39;post.pay\_money/f&#39;);
        if($totalAmount &amp;lt; 1){
            return \[&#39;status&#39; =&amp;gt; 1, &#39;msg&#39; =&amp;gt; &#39;最低充值金额1元&#39;\];
        }
        if($totalAmount &amp;gt; 9999999){
            return \[&#39;status&#39; =&amp;gt; 1, &#39;msg&#39; =&amp;gt; &#39;充值最大金额不能超过9999999元&#39;\];
        }


        // (不推荐使用) 订单可打折金额，可以配合商家平台配置折扣活动，如果订单部分商品参与打折，可以将部分商品总价填写至此字段，默认全部商品可打折
        // 如果该值未传入,但传入了【订单总金额】,【不可打折金额】 则该值默认为【订单总金额】- 【不可打折金额】
        //String discountableAmount = &amp;quot;1.00&amp;quot;; //

        // (可选) 订单不可打折金额，可以配合商家平台配置折扣活动，如果酒水不参与打折，则将对应金额填写至此字段
        // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
        // $undiscountableAmount = &amp;quot;0.01&amp;quot;;

        // 卖家支付宝账号ID，用于支持一个签约账号下支持打款到不同的收款账号，(打款到sellerId对应的支付宝账号)
        // 如果该字段为空，则默认为与支付宝签约的商户的PID，也就是appid对应的PID
        //$sellerId = &amp;quot;&amp;quot;;

        // 订单描述，可以对交易或商品进行一个详细地描述，比如填写&amp;quot;购买商品2件共15.00元&amp;quot;
        $body = &amp;quot;聚合平台用户积分充值&amp;quot; . $totalAmount . &#39;元&#39;;

        //商户操作员编号，添加此参数可以为商户操作员做销售统计
        // $operatorId = &amp;quot;&amp;quot;;

        // (可选) 商户门店编号，通过门店号和商家后台可以配置精准到门店的折扣信息，详询支付宝技术支持
        // $storeId = &amp;quot;&amp;quot;;

        // 支付宝的店铺编号
        // $alipayStoreId= &amp;quot;&amp;quot;;

        // 业务扩展参数，目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法)，系统商开发使用,详情请咨询支付宝技术支持
        // $providerId = &amp;quot;&amp;quot;; //系统商pid,作为系统商返佣数据提取的依据
        // $extendParams = new ExtendParams();
        // $extendParams-&amp;gt;setSysServiceProviderId($providerId);
        // $extendParamsArr = $extendParams-&amp;gt;getExtendParams();

        // 支付超时，线下扫码交易定义为5分钟
        $timeExpress = &amp;quot;5m&amp;quot;;

        // 商品明细列表，需填写购买商品详细信息，
        // $goodsDetailList = array();

        // // 创建一个商品信息，参数含义分别为商品id（使用国标）、名称、单价（单位为分）、数量，如果需要添加商品类别，详见GoodsDetail
        // $goods1 = new GoodsDetail();
        // $goods1-&amp;gt;setGoodsId(&amp;quot;apple-01&amp;quot;);
        // $goods1-&amp;gt;setGoodsName(&amp;quot;iphone&amp;quot;);
        // $goods1-&amp;gt;setPrice(3000);
        // $goods1-&amp;gt;setQuantity(1);
        // //得到商品1明细数组
        // $goods1Arr = $goods1-&amp;gt;getGoodsDetail();

        // // 继续创建并添加第一条商品信息，用户购买的产品为“xx牙刷”，单价为5.05元，购买了两件
        // $goods2 = new GoodsDetail();
        // $goods2-&amp;gt;setGoodsId(&amp;quot;apple-02&amp;quot;);
        // $goods2-&amp;gt;setGoodsName(&amp;quot;ipad&amp;quot;);
        // $goods2-&amp;gt;setPrice(1000);
        // $goods2-&amp;gt;setQuantity(1);
        // //得到商品1明细数组
        // $goods2Arr = $goods2-&amp;gt;getGoodsDetail();

        // $goodsDetailList = array($goods1Arr,$goods2Arr);

        //第三方应用授权令牌,商户授权系统商开发模式下使用
        $appAuthToken = &amp;quot;&amp;quot;;//根据真实值填写

        // 创建请求builder，设置请求参数
        $qrPayRequestBuilder = new AlipayTradePrecreateContentBuilder();
        $qrPayRequestBuilder-&amp;gt;setOutTradeNo($outTradeNo);
        $qrPayRequestBuilder-&amp;gt;setTotalAmount($totalAmount);
        $qrPayRequestBuilder-&amp;gt;setTimeExpress($timeExpress);
        $qrPayRequestBuilder-&amp;gt;setSubject($subject);
        $qrPayRequestBuilder-&amp;gt;setBody($body);
        // $qrPayRequestBuilder-&amp;gt;setUndiscountableAmount($undiscountableAmount);
        // $qrPayRequestBuilder-&amp;gt;setExtendParams($extendParamsArr);
        // $qrPayRequestBuilder-&amp;gt;setGoodsDetailList($goodsDetailList);
        // $qrPayRequestBuilder-&amp;gt;setStoreId($storeId);
        // $qrPayRequestBuilder-&amp;gt;setOperatorId($operatorId);
        // $qrPayRequestBuilder-&amp;gt;setAlipayStoreId($alipayStoreId);

        $qrPayRequestBuilder-&amp;gt;setAppAuthToken($appAuthToken);


        // 调用qrPay方法获取当面付应答
        require ROOT\_PATH.&#39;extend/f2fpay/config/config.php&#39;;
        $qrPay = new AlipayTradeService($config);
        $qrPayResult = $qrPay-&amp;gt;qrPay($qrPayRequestBuilder);

        //  根据状态值进行业务处理
        switch ($qrPayResult-&amp;gt;getTradeStatus()){
            case &amp;quot;SUCCESS&amp;quot;:
                $response = $qrPayResult-&amp;gt;getResponse();

                Db::name(&#39;order&#39;)
                    -&amp;gt;insert(\[
                        &#39;uid&#39; =&amp;gt; $uid,
                        &#39;pay\_id&#39; =&amp;gt; $outTradeNo,
                        &#39;money&#39; =&amp;gt; $totalAmount,
                        &#39;creat\_time&#39; =&amp;gt; time(),
                        &#39;subject&#39; =&amp;gt; $subject
                    \]);

                return \[&#39;status&#39; =&amp;gt; 0, &#39;msg&#39; =&amp;gt; &#39;支付宝创建订单二维码成功!!!&amp;quot;&#39;,&#39;data&#39; =&amp;gt; \[
                    &#39;qr\_code&#39; =&amp;gt; $response-&amp;gt;qr\_code,
                    &#39;outTradeNo&#39; =&amp;gt; $outTradeNo
                \]\];
                // $qrcode = $qrPay-&amp;gt;create\_erweima($response-&amp;gt;qr\_code);
                // echo $qrcode;
                // print\_r($response);
                break;
            case &amp;quot;FAILED&amp;quot;:
                return \[&#39;status&#39; =&amp;gt; 1, &#39;msg&#39; =&amp;gt; &#39;支付宝创建订单二维码失败!!!&amp;quot;&#39;\];
                // if(!empty($qrPayResult-&amp;gt;getResponse())){
                //     print\_r($qrPayResult-&amp;gt;getResponse());
                // }
                break;
            case &amp;quot;UNKNOWN&amp;quot;:
                return \[&#39;status&#39; =&amp;gt; 1, &#39;msg&#39; =&amp;gt; &#39;系统异常，状态未知!!!&amp;quot;&#39;\];
                // echo &amp;quot;系统异常，状态未知!!!&amp;quot;.&amp;quot;&amp;lt;br&amp;gt;--------------------------&amp;lt;br&amp;gt;&amp;quot;;
                // if(!empty($qrPayResult-&amp;gt;getResponse())){
                //     print\_r($qrPayResult-&amp;gt;getResponse());
                // }
                break;
            default:
                return \[&#39;status&#39; =&amp;gt; 1, &#39;msg&#39; =&amp;gt; &#39;不支持的返回状态，创建订单二维码返回异常!!!&#39;\];
                break;
        }
        return ;
    }


}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上が当面付の事前注文コードです。
このSDKについては、どうしても文句を言いたいです。誰が書いたデモなのか、PHPの例にlotusphpフレームワークを導入していて、大量の不要なものが含まれており、私たち開発者が受け入れられるかどうかを全く考慮していません。
私も少し時間をかけてSDKを簡素化し、必要な部分だけを取り出して自分のフレームワークに組み込み、namespaceとオートロードを追加しました。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwodh05dj30af0egdho.jpg&#34;&gt;
QRコード決済には独自の機能があります&amp;mdash;-非同期通知です。
これはオンライン決済で最も必要とされる機能でもあります。
レジが事前注文リクエストAPIを呼び出してQRコードを生成しユーザーに表示した後、ユーザーが携帯電話でQRコードをスキャンして支払いを行うと、Alipayは当該注文の変更情報を、加盟店が事前注文リクエストを呼び出した際に渡した非同期通知アドレス &lt;code&gt;notify_url&lt;/code&gt; に沿って、POSTリクエストの形式で支払い結果をパラメータとして加盟店システムに通知します。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gciwouog84j30o10cu768.jpg&#34;&gt;
この非同期通知アドレスは、アプリケーション側で設定する必要があることを覚えておいてください。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Discuz!フォーラム 個人スペースのCSSカスタマイズ</title>
      <link>https://en.moejue.cn/ja/posts/109/</link>
      <pubDate>Tue, 24 Mar 2020 13:23:51 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/109/</guid>
      <description>&lt;p&gt;先日、暇だったのでDiscuzフォーラムの脆弱性を探してみたところ、本当に見つかりました。ついでにツールを作成し、勢いでこの記事を書いています。
以下が事の経緯です。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gd4tebhwgwj309s0aojss.jpg&#34;&gt;
この脆弱性はウェブサイトに大きな危害を与えるものではなく、個人スペースのCSSスタイルをカスタマイズできるだけで、サイトのデータに脅威を与えることはありませんので、ご安心ください。&lt;/p&gt;
&lt;p&gt;このツールを使えば、Discuzの個人スペースのCSSスタイルをカスタマイズでき、個人スペースを豊かに美化し、単調さをなくすことができます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;テストしたDiscuzのバージョンはX3.4です。他のバージョンはご自身でテストしてください。&lt;/li&gt;
&lt;li&gt;全球主机交流论坛（管理人さん、お許しを）でのみテストしました。同じバージョンのDiscuzであれば理論上は共通で使えるはずです。&lt;/li&gt;
&lt;li&gt;個人スペースが開設されていないフォーラムでは使用できません。&lt;/li&gt;
&lt;li&gt;カスタムCSSは多すぎないようにし、失敗を避けるために一行に圧縮することをお勧めします。&lt;/li&gt;
&lt;li&gt;プロトコルヘッダーは通常、変更する必要はありません。テキストボックスを設置したのは、主に拡張性を考慮したためです。&lt;/li&gt;
&lt;li&gt;もしlocフォーラムで操作する場合、デフォルトで阿珏ちゃんをフォローし、友達に追加します。[#手動でニヤリ + 保身のための犬アイコン]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本ソフトウェアはローカルでリクエストを送信するのみで、サーバーにデータをアップロードすることはありません。
ソフトウェアはパック（圧縮・暗号化）されているため、ウイルス対策ソフトが誤検知する可能性がありますが、安心してご使用ください&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gd46ipbb1uj30jl0drac8.jpg&#34;&gt;
&lt;strong&gt;Cookieの取得&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;ブラウザで開発者ツール（F12）を開き、対象のウェブサイトにアクセスします。ログイン状態であればどのページでも構いません。開発者ツールで「Network」タブに切り替え、ページを更新（F5）します。現在のドメインのリクエストデータを見つけてクリックし、「Headers」タブの「Request Headers」にあるcookieを探します。皆さんが私の言っていることを理解できないだろうと思ったので、特別に図を用意しました。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gd47v5klf2j30iq0hhjw1.jpg&#34;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;2つ目の方法はより簡単で迅速ですが、どのcookieが必要か分かっている場合に適しています。下の図のように操作します。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1gd47uobcsaj30nj0ammz9.jpg&#34;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;1つ目の方法で使う開発者ツールは、以前のブログ記事でも使用しましたが、cookieの取得方法については説明していませんでした。やはり1つ目の方法をお勧めします。cookieは多くても問題ありませんが、少ないと動作しません。
&lt;strong&gt;免責事項&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;本ソフトウェアは学習と交流のみを目的としています！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本ソフトウェアの作者は一切の責任を負いません！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本ソフトウェアを使用した場合、本規約に同意したものとみなします！&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;ダウンロード&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;以下のダウンロードスタイルは何年も使っていませんでしたが、今日ついに復活させました。
.down_link{background:url(&amp;lsquo;&lt;a href=&#34;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg%27&#34;&gt;https://www.52ecy.cn/content/uploadfile/201707/md-bg.jpeg&#39;&lt;/a&gt;) no-repeat 100% 0% #fffdff; border: 1px solid #faf8fb; border-radius: 2px; color: #666; font-size: 14px; margin-bottom: 10px; padding: 5px 20px;}.downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downlink a{text-decoration:none;} .downlink a{text-decoration:none;font-size:15px;} .downlink a:link{color: #ffffff;} .downlink a:visited{color: #ffffff;} .downlink a:hover{color: #ffffff;} .downlink a:active{color: #ffffff;} .downbtn{background: none repeat scroll 0 0 #1BA1E2; border: 0 none; border-radius: 2px; color: #FFFFFF !important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .yanshibtn{background: none repeat scroll 0 0 #d33431; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;text-transform:none;text-decoration:none;} .downbtn:hover,.yanshibtn:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF!important; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;} .downbtn a:hover,.yanshibtn a:hover{background: none repeat scroll 0 0 #9B59B6; border: 0 none; border-radius: 2px; color: #FFFFFF; cursor: pointer; font-family: &amp;ldquo;Open Sans&amp;rdquo;,&amp;ldquo;Hiragino Sans GB&amp;rdquo;,&amp;ldquo;Microsoft YaHei&amp;rdquo;,&amp;ldquo;WenQuanYi Micro Hei&amp;rdquo;,Arial,Verdana,Tahoma,sans-serif; font-size: 14px; margin: -4px 20px 0 0; padding: 8px 30px;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>フォームをスマートに送信するには</title>
      <link>https://en.moejue.cn/ja/posts/91/</link>
      <pubDate>Mon, 06 May 2019 07:28:33 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/91/</guid>
      <description>&lt;p&gt;これは非常に基本的なHTMLフォームの送信に関する問題ですが、非常に実用的なテクニックでもあります。
私の業務シーンは次のとおりです：
inputを動的に作成できるフォームです。下の図のように。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1v9kcon30j30l007bdgd.jpg&#34;&gt;
これは、inputのnameを固定値にできないことを意味します。さもなければ、間違いなく上書きされてしまいます。&lt;/p&gt;
&lt;p&gt;1つ目は、従来の一般的な送信方法で、送信する各inputに一意のnameを付けます。&lt;/p&gt;
&lt;form id=&#34;form1&#34; action=&#34;./index.php&#34; method=&#34;get&#34;&gt;
    &lt;div class=&#34;form-control&#34;&gt;
        &lt;input type=&#34;text&#34; name=&#34;name1&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;num1&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;img1&#34; /&gt;
    &lt;/div&gt;
    &lt;br&gt;
    &lt;div class=&#34;form-control&#34;&gt;
        &lt;input type=&#34;text&#34; name=&#34;name2&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;num2&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;img2&#34; /&gt;
    &lt;/div&gt;
    &lt;br&gt;
    &lt;div class=&#34;form-control&#34;&gt;
        &lt;input type=&#34;text&#34; name=&#34;name3&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;num3&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;img3&#34; /&gt;
    &lt;/div&gt;
    ......
  &lt;input type=&#34;submit&#34; value=&#34;Submit&#34; /&gt;
&lt;/form&gt;
&lt;p&gt;ブラウザが送信したデータをキャプチャした形式は次のようになります。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1va4e7vtmj30bx04zdg1.jpg&#34;&gt;
サーバー側で取得して出力するとこのようになり、バックエンドでのデータ処理には非常に不親切です。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1va3y1ep2j309805i0sk.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;2つ目は、配列形式でのフォーム送信です。&lt;/p&gt;
&lt;form id=&#34;form1&#34; action=&#34;./index.php&#34; method=&#34;get&#34;&gt;
    &lt;div class=&#34;form-control&#34;&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[1\]\[name\]&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[1\]\[num\]&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[1\]\[img\]&#34; /&gt;
    &lt;/div&gt;
    &lt;br&gt;
    &lt;div class=&#34;form-control&#34;&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[2\]\[name\]&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[2\]\[num\]&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[2\]\[img\]&#34; /&gt;
    &lt;/div&gt;
    &lt;br&gt;
    &lt;div class=&#34;form-control&#34;&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[3\]\[name\]&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[3\]\[num\]&#34; /&gt;
        &lt;input type=&#34;text&#34; name=&#34;infos\[3\]\[img\]&#34; /&gt;
    &lt;/div&gt;
    ......
  &lt;input type=&#34;submit&#34; value=&#34;Submit&#34; /&gt;
&lt;/form&gt;
&lt;p&gt;ブラウザとバックエンドでの出力はそれぞれ次のようになります。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1va7ioy7qj30cg0c3q2s.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1va7js1u3j30bd04v74j.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;よく見ると、送信されたnameの値が変化し、同じような？配列？になっていることがわかります。
バックエンドに送信すると、データが以前よりもずっと整理されていることがわかります。
ただし、ここで注意すべき点は、送信する配列のキーに引用符を使用する必要はないということです。さもなければ、引用符もキーの一部になってしまいます。&lt;/p&gt;
&lt;p&gt;もちろん、実際の開発では、送信するグループの数（上記の1、2、3のような）が不確定で、フロントエンドで自由に追加できるという問題に遭遇することもあります。このような場合、どうやって配列を使ってこれらの内容を送信すればよいのでしょうか？
以下が私の業務での実際の解決策です&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1v9o6jon8j316g0fwwh3.jpg&#34;&gt;
このようにすれば、2次元配列のキーを自分で管理する必要がなくなり、ブラウザが自動的に生成してくれます。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1v9o5uhnuj30a109igli.jpg&#34;&gt;
バックエンドで受信したデータはこのようになり、非常に処理しやすくなります。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1vaez0ltqj30730bya9y.jpg&#34;&gt;
この方法は、不確定な数の関連データセットをまとめて送信する場合に適しています。
一件落着！〜&lt;/p&gt;</description>
    </item>
    <item>
      <title>WeChat JSAPI 決済</title>
      <link>https://en.moejue.cn/ja/posts/89/</link>
      <pubDate>Sat, 30 Mar 2019 09:30:21 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/89/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1l3k211blj30ia04x74e.jpg&#34;&gt; 以前からWeChat関連の業務を行っていましたが、新しい技術ではないものの、これまで触れる機会がなく、いくつかの落とし穴にはまりました。そこで、時間を取って整理し、記録しておきます。
WeChat Payは全部で7種類あり、それぞれ：支払いコード決済、JSAPI決済、Native決済、APP決済、H5決済、ミニプログラム決済、顔認証決済です。
今回の業務で使用したのはWeChat JSAPI決済です。ユーザーがWeChatスキャン、公式アカウントのフォローなどの方法で販売者のH5ページに入り、&lt;strong&gt;WeChat内で&lt;/strong&gt;JSSDKを呼び出して支払いを完了します。&lt;/p&gt;
&lt;p&gt;ドキュメント：&lt;a href=&#34;https://pay.weixin.qq.com/wiki/doc/api/index.html&#34;&gt;https://pay.weixin.qq.com/wiki/doc/api/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SDK：[https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1&lt;/p&gt;
&lt;p&gt;](&lt;a href=&#34;https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1%29JSAPI&#34;&gt;https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1)JSAPI&lt;/a&gt;決済は、WeChat内のブラウザで開くことでWeChat Payを起動できます。効果は以下の図の通りです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1g1l36yn1sej30p91hc40b.jpg&#34;&gt;
インターフェースコードを添付します。
コードではテンプレートエンジンを使用しています。
html：&lt;/p&gt;
&lt;div class=&#34;am-modal-bd&#34;&gt;
	&lt;img src=&#34;{$competition\[&#39;avatar&#39;\]}&#34; alt=&#34;&#34;&gt;&lt;br&gt;
	&lt;span style=&#34;font-size: 13px;color: #72c6ef&#34;&gt;{$competition\[&#39;username&#39;\]}&lt;/span&gt;&lt;br&gt;
	&lt;span id=&#34;tips&#34; style=&#34;font-size: 13px&#34;&gt;&lt;/span&gt;
  &lt;ul class=&#34;ul\_box&#34;&gt;
	&lt;li&gt;
		&lt;div&gt;&lt;/div&gt;
		&lt;div class=&#34;label\_box&#34;&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[0\]}&#34; checked=&#34;&#34;&gt;
				&lt;div class=&#34;active&#34;&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[0\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[1\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[1\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[2\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[2\]}钻&lt;/div&gt;
			&lt;/label&gt;
		&lt;/div&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;div&gt;&lt;/div&gt;
		&lt;div class=&#34;label\_box&#34;&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[3\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[3\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;radio&#34; name=&#34;price&#34; value=&#34;{$prices\[4\]}&#34;&gt;
				&lt;div&gt;&lt;span class=&#34;am-icon-diamond&#34;&gt;&lt;/span&gt; {$prices\[4\]}钻&lt;/div&gt;
			&lt;/label&gt;
			&lt;label&gt;
				&lt;input type=&#34;number&#34; name=&#34;price&#34; id=&#34;price&#34; class=&#34;input&#34; placeholder=&#34;自定义&#34;&gt;
			&lt;/label&gt;
		&lt;/div&gt;
	&lt;/li&gt;
  &lt;/ul&gt;
  &lt;span style=&#34;font-size: 13px&#34;&gt;注：1钻=1元，1钻={$activity\[&#39;offset&#39;\]}票&lt;/span&gt;&lt;br&gt;
  &lt;button type=&#34;button&#34; class=&#34;am-btn am-btn-primary  am-radius&#34; onclick=&#34;callpay()&#34; style=&#34;margin-top: 5px;&#34;&gt;立即微信支付&lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;JavaScript：&lt;/p&gt;
&lt;p&gt;// 投票
var offset = {$activity[&amp;lsquo;offset&amp;rsquo;]};
$(&amp;rsquo;#tips&amp;rsquo;).html(&amp;lsquo;正在给{$competition[&amp;lsquo;code&amp;rsquo;]}号赠送{$prices[0]}钻=&amp;rsquo;+({$prices[0]}*offset)+&amp;lsquo;票&amp;rsquo;);
$(&amp;rsquo;#vote&amp;rsquo;).click(function(){
$.post(&amp;rsquo;/index/index/detailed.html?cid={$cid}&amp;amp;aid={$aid}&amp;rsquo;,{
formhash :&amp;rsquo;{FORMHASH}&amp;rsquo;,
submit:&amp;lsquo;1&amp;rsquo;,
type:1,
openid:&amp;rsquo;{$_G[&amp;lsquo;member&amp;rsquo;][&amp;lsquo;openid&amp;rsquo;]}&amp;rsquo;
},function(res){
alert(res.msg);
if (res.code == 0) {
$(&amp;rsquo;.box-1 span&amp;rsquo;).text(res.data.all);
$(&amp;rsquo;.box-2 span&amp;rsquo;).text(res.data.rank);
$(&amp;rsquo;.box-3 span&amp;rsquo;).text(res.data.up + &amp;lsquo;票&amp;rsquo;);
}
});
})
/* jQuery对象级别プラグイン拡張 */
$.fn.extend({
/* 単選框 */
hlRadio:function () {
var radioEl=$(this);
radioEl.click(function () {
var price = 0;
price = $(&amp;lsquo;input:radio:checked&amp;rsquo;).val();
$(&amp;rsquo;#price&amp;rsquo;).val(&amp;rsquo;&amp;rsquo;);
$(&amp;rsquo;#tips&amp;rsquo;).html(&amp;lsquo;正在给{$competition[&amp;lsquo;code&amp;rsquo;]}号赠送&amp;rsquo;+price+&amp;lsquo;钻=&amp;rsquo;+(price*offset)+&amp;lsquo;票&amp;rsquo;);
radioEl.siblings(&amp;ldquo;div&amp;rdquo;).removeClass(&amp;ldquo;active&amp;rdquo;);
$(this).siblings(&amp;ldquo;div&amp;rdquo;).addClass(&amp;ldquo;active&amp;rdquo;);
});
},
});
$(&amp;ldquo;input[name=&amp;lsquo;price&amp;rsquo;]&amp;rdquo;).hlRadio();
$(&amp;rsquo;#price&amp;rsquo;).bind(&amp;lsquo;input propertychange&amp;rsquo;, function(){
var price = 0;
price = $(&amp;rsquo;#price&amp;rsquo;).val();
$(&amp;rsquo;#tips&amp;rsquo;).html(&amp;lsquo;正在给{$competition[&amp;lsquo;code&amp;rsquo;]}号赠送&amp;rsquo;+price+&amp;lsquo;钻=&amp;rsquo;+(price*offset)+&amp;lsquo;票&amp;rsquo;);
})&lt;/p&gt;</description>
    </item>
    <item>
      <title>[ノート]Git常用コマンド大全</title>
      <link>https://en.moejue.cn/ja/posts/57/</link>
      <pubDate>Sat, 16 Jun 2018 08:56:21 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/57/</guid>
      <description>&lt;p&gt;前回に引き続き、時間を見つけてGitの主要なコマンドをまとめました。非常に素晴らしい、高解像度（1759*3162）のチートシートを見つけました。&lt;/p&gt;
&lt;p&gt;ファイルの表示、追加、コミット、削除、復元、変更のリセット&lt;/p&gt;
&lt;p&gt;git help &lt;command&gt; # &lt;command&gt;のヘルプを表示&lt;/p&gt;
&lt;p&gt;git show # 特定のコミットの内容を表示 git show $id&lt;/p&gt;
&lt;p&gt;git co &amp;ndash; &lt;file&gt; # ワークスペースの変更を破棄&lt;/p&gt;
&lt;p&gt;git co . # ワークスペースの変更を破棄&lt;/p&gt;
&lt;p&gt;git add &lt;file&gt; # 作業ファイルの変更をローカルのステージングエリアにコミット&lt;/p&gt;
&lt;p&gt;git add . # 変更されたすべての作業ファイルをステージングエリアにコミット&lt;/p&gt;
&lt;p&gt;git rm &lt;file&gt; # バージョン管理からファイルを削除&lt;/p&gt;
&lt;p&gt;git rm &lt;file&gt; &amp;ndash;cached # バージョン管理からファイルを削除するが、ファイル自体は削除しない&lt;/p&gt;
&lt;p&gt;git reset &lt;file&gt; # ステージングエリアから作業ファイルに復元&lt;/p&gt;
&lt;p&gt;git reset &amp;ndash; . # ステージングエリアから作業ファイルに復元&lt;/p&gt;
&lt;p&gt;git reset &amp;ndash;hard # 直近のコミットの状態に戻す。つまり、前回のコミット以降のすべての変更を破棄&lt;/p&gt;
&lt;p&gt;git ci &lt;file&gt; git ci . git ci -a # git add, git rm, git ciなどの操作を一度にまとめて実行　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　git ci -am &amp;ldquo;some comments&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ウェブパケットキャプチャ - 私のプレイリスト</title>
      <link>https://en.moejue.cn/ja/posts/31/</link>
      <pubDate>Tue, 05 Jun 2018 11:04:05 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/31/</guid>
      <description>&lt;p&gt;最近、多くの人のブログでウェブスクレイピング（パケットキャプチャ）のチュートリアルが公開されているのを見かけ、それが私の興(きょう)味(み)（かっこつけ）を刺激し、この記事が生まれました。&lt;/p&gt;
&lt;p&gt;ちょうど先日、&lt;a href=&#34;https://music.52ecy.cn/&#34;&gt;私のプレイリスト&lt;/a&gt;がKuGouのAPIとの連携が機能しなくなりました。この機会に修正し、ついでに画像付きのチュートリアルを作成することにしました。というわけで、KuGouを「メスを入れる（分析対象にする）」ことにします。&lt;/p&gt;
&lt;p&gt;パケットキャプチャの概念について&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;パケットキャプチャ（packet capture）とは、ネットワークで送受信されるデータパケットを傍受、再送信、編集、保存などの操作を行うことであり、ネットワークセキュリティのチェックにも使われます。また、データの傍受などにも頻繁に利用されます。&lt;/p&gt;
&lt;p&gt;——ゲイ百科より&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ここで話すのは、ウェブページで送受信されるデータの傍受であり、再送信や編集など、ネットワークセキュリティに影響を与える操作は含みません。
実は&lt;a href=&#34;https://www.52ecy.cn/tag/%E6%8A%93%E5%8C%85&#34;&gt;パケットキャプチャ&lt;/a&gt;に関する記事は、2016年にはすでに複数公開していましたが、記事が古くなりメンテナンスされていないため、画像は失われたり、破損したり、順序がめちゃくちゃになっています。
ウェブ開発者、特にバックエンド開発者にとって、パケットキャプチャはあまり馴染みがないかもしれません。しかし、私はデスクトップアプリケーション開発出身なので、使うのはお手の物です。&lt;/p&gt;
&lt;p&gt;目的：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;KuGouの楽曲直リンクの解析 - 私のプレイリストの修正&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;対象サイト：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://t.kugou.com/1md5hf5t8V2&#34;&gt;http://t.kugou.com/1md5hf5t8V2&lt;/a&gt; KuGouの私のプレイリスト共有短縮URL&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用ツール：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Google ChromeのF12キー（または Ctrl + Shift + I、または右クリック &amp;gt; 「検証」）開発者ツール&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;（注意：以下のチュートリアルは画像と合わせてご覧ください。見えにくい場合は右クリックで新しいウィンドウで画像を開いてください）
ここではモバイル版のページをキャプチャします。なぜならPC版ではプレイリスト全体が直接ソースコードに返されるため、解析が不便だからです。モバイル版ではJSONが返されます。
Preserve Log：ページ遷移後も以前のログを保持する機能
左上隅の携帯電話アイコン：現在のブラウジングインターフェースのUAをモバイルUAに切り替える
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyxmmr1j30nz0fl0u2.jpg&#34;&gt;
URLを入力してEnterキーを押しアクセスすると、ウェブページがリダイレクトされます。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iybcesaj314p0arn2j.jpg&#34;&gt;
ステータスコード302、リダイレクトアドレスを取得（必ず画像を確認してください。テキストの説明は簡略化されています）
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyb1qhdj30w00amjt6.jpg&#34;&gt;
パケットキャプチャはここまでで終了です。以下、分析を開始します：
確かなのは、KuGouサイトの音楽リンクは決して固定ではないということです。
これまでの経験からすると、これらはすべて疑わしいパラメータです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0j14h87ij30qr0bdmya.jpg&#34;&gt;
パケットキャプチャログを丹念に探すと、プレイリスト全体の取得方法である&lt;code&gt;list&lt;/code&gt;が見つかりました。そして、楽曲の基本情報も含まれています。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iybbzb2j312a0e8afo.jpg&#34;&gt;
&lt;code&gt;list&lt;/code&gt;リンクを分析すると、ここのパラメータは以前のものと非常によく似ていることが明らかです。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyb4b7bj30q50adwel.jpg&#34;&gt;
次に、各楽曲のリンクを分析します。
楽曲の直リンクの有効期限はだいたい24時間程度で、無効になります。
引き続きパケットキャプチャログを確認します。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iyc2p8aj314a0ecn23.jpg&#34;&gt;
楽曲のハッシュ値を含めることで、楽曲の関連情報と直リンクを取得できます（ハッシュ値は前述の楽曲リストですでに返されています）。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fs0iza7xskj30mg06h3yi.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;まとめ：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;短縮URL -&amp;gt; ウェブリンクパラメータ -&amp;gt; プレイリストの取得 -&amp;gt; 楽曲の取得 （段階的に、前のステップで得られたパラメータを使って次のURLにアクセスします）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;関連コードは自分で書いてくださいね&amp;hellip;.-。-
このようなチュートリアル性の高い記事を投稿するのは久しぶりです。
最後に一言、Google開発者ツールは本当にめちゃくちゃ便利！
ちょっとした記事を書いて、逃げる〜〜&lt;/p&gt;
&lt;p&gt;関連推奨記事
（1）&lt;a href=&#34;https://mkblog.cn/492/&#34;&gt;PHPを使ってBingの今日の画像をスクレイピングし、自分のものとして利用する&lt;/a&gt;.孟坤ブログ.
（2）&lt;a href=&#34;https://mkblog.cn/1273&#34;&gt;パケットキャプチャ入門（一）&lt;/a&gt;
関連コード
（1）&lt;a href=&#34;https://www.youngxj.cn/507.html&#34;&gt;KuGouプレイリストの楽曲情報取得インターフェースのソースコード&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CSS3ランダム背景画像切り替えエフェクト</title>
      <link>https://en.moejue.cn/ja/posts/4/</link>
      <pubDate>Wed, 16 May 2018 11:58:08 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/4/</guid>
      <description>&lt;p&gt;CSS3のランダム背景画像フェードイン・フェードアウト切り替えエフェクト デモ効果はこの記事の背景に表示されています&lt;br&gt;
皆さんが私の幻想領域二次元限定版のソースコードを解析するのに苦労しているようなので（30分以上もかけている人もいるようです）、時間を見つけて整理して公開することにしました&lt;br&gt;
当初はjQueryで実装する予定でしたが、CSS3の@keyframesルールに気づきました。CSS3は、かつてJSでしか実現できなかった効果を実装できるほど強力になっています&lt;/p&gt;
&lt;h2 id=&#34;定義と使い方&#34;&gt;定義と使い方&lt;/h2&gt;
&lt;p&gt;@keyframesルールを使用することで、アニメーションを作成できます。&lt;/p&gt;
&lt;p&gt;アニメーション作成の原理は、あるCSSスタイルを別のスタイルに徐々に変化させることです。&lt;/p&gt;
&lt;p&gt;アニメーションの過程で、このCSSスタイルを複数回変更することができます。&lt;/p&gt;
&lt;p&gt;変化が起こるタイミングは、パーセンテージで指定するか、キーワード「from」と「to」（それぞれ0%と100%に相当）で指定します。&lt;/p&gt;
&lt;p&gt;0%はアニメーションの開始時点、100%はアニメーションの終了時点です。&lt;/p&gt;
&lt;p&gt;最高のブラウザサポートを得るためには、常に0%と100%のセレクタを定義する必要があります。&lt;/p&gt;
&lt;p&gt;注：アニメーションの見た目を制御するには、アニメーション関連のプロパティを使用し、アニメーションをセレクタにバインドしてください。&lt;/p&gt;
&lt;p&gt;CSSのコア部分（画像アドレスの変更を忘れないでください）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;#000&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-attachment&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;fixed&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;word-wrap&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;break-word&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;background-size&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;cover&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-moz-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;background-size&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;cover&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-size&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;cover&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-repeat&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;no-repeat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;ul&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;list-style&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;none&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-image&lt;/span&gt;: url(&lt;span style=&#34;color:#e6db74&#34;&gt;https://random.52ecy.cn/randbg.php?v=1520341099&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-image&lt;/span&gt;: url(&lt;span style=&#34;color:#e6db74&#34;&gt;https://random.52ecy.cn/randbg.php?v=1520341159&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-image&lt;/span&gt;: url(&lt;span style=&#34;color:#e6db74&#34;&gt;https://random.52ecy.cn/randbg.php?v=1520341149&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-image&lt;/span&gt;: url(&lt;span style=&#34;color:#e6db74&#34;&gt;https://random.52ecy.cn/randbg.php?v=1520341139&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-image&lt;/span&gt;: url(&lt;span style=&#34;color:#e6db74&#34;&gt;https://random.52ecy.cn/randbg.php?v=1520341129&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-image&lt;/span&gt;: url(&lt;span style=&#34;color:#e6db74&#34;&gt;https://random.52ecy.cn/randbg.php?v=1520341119&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;after&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;position&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;fixed&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;width&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;top&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;z-index&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;-2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;after&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;content&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;width&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;height&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;position&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;absolute&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;top&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;transparent&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-size&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;cover&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-position&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;%&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-repeat&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;none&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;opacity&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;z-index&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;-2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;backface-visibility&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;hidden&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation&lt;/span&gt;: imageAnimation &lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;linear&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;infinite&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-moz-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation&lt;/span&gt;: imageAnimation &lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;linear&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;infinite&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-o-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation&lt;/span&gt;: imageAnimation &lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;linear&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;infinite&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-ms-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation&lt;/span&gt;: imageAnimation &lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;linear&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;infinite&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;animation&lt;/span&gt;: imageAnimation &lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;linear&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;infinite&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-moz-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-o-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-ms-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-moz-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-o-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-ms-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;18&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-moz-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;18&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-o-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;18&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-ms-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;18&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;18&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-moz-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-o-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-ms-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cb-slideshow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;li&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth-child&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-moz-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-o-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;-ms-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-delay&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-keyframes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;imageAnimation&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;opacity&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-timing-function&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;ease-in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;opacity&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;transform&lt;/span&gt;: scale(&lt;span style=&#34;color:#ae81ff&#34;&gt;1.05&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;animation-timing-function&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;ease-out&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;17&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;opacity&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;transform&lt;/span&gt;: scale(&lt;span style=&#34;color:#ae81ff&#34;&gt;1.1&lt;/span&gt;) rotate(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;25&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;opacity&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;-webkit-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;transform&lt;/span&gt;: scale(&lt;span style=&#34;color:#ae81ff&#34;&gt;1.1&lt;/span&gt;) rotate(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;opacity&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もちろん、HTMLコードと組み合わせる必要があります&lt;br&gt;
HTML部分（中のテキスト部分と&lt;li&gt;の数は自由に変更可能です）&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git の簡単な使用手順</title>
      <link>https://en.moejue.cn/ja/posts/64/</link>
      <pubDate>Tue, 03 Apr 2018 12:04:32 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/64/</guid>
      <description>&lt;p&gt;この記事では概念的な知識については詳しく説明しません。ただのメモです。これは単なるステップバイステップのガイドです。障害に遭遇した場合は、Google で調べてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSH を使用して Git と GitHub 間のバインドを完了します&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;1\。 「SSHキー」を生成する&lt;/p&gt;
&lt;p&gt;ssh-keygen-trsa&lt;/p&gt;
&lt;p&gt;RSA アルゴリズムを指定してキーを生成すると、id_rsa と id_rsa.pub という 2 つのファイル、つまりキー id_rsa と公開キー id_rsa.pub が生成されます。これら 2 つのファイルについては、&lt;/p&gt;
&lt;p&gt;2\。 SSHキーを追加する
github.com -&amp;gt; 設定 -&amp;gt; SSH と GPG -&amp;gt; 新しい SSH キー
公開キー id_rsa.pub の内容をキーの場所に貼り付け (タイトルの内容を入力しなくても問題ありません)、[SSH キーの追加] をクリックします。&lt;/p&gt;
&lt;p&gt;3\。バインドが成功したかどうかを確認する&lt;/p&gt;
&lt;p&gt;ssh -T &lt;a href=&#34;mailto:git@github.com&#34;&gt;git@github.com&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ローカルプロジェクトをgithubにプッシュするコマンド&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(1) ディレクトリを開きます&lt;/p&gt;
&lt;p&gt;CDデモ&lt;/p&gt;
&lt;p&gt;(2) gitファイルを生成するためにバージョンライブラリを初期化する&lt;/p&gt;
&lt;p&gt;gitの初期化&lt;/p&gt;
&lt;p&gt;(3) 全ファイルをキャッシュ領域に追加&lt;/p&gt;
&lt;p&gt;git add *&lt;/p&gt;
&lt;p&gt;(4) 現在のワークスペースに変更を送信します。&lt;/p&gt;
&lt;p&gt;git commit -m &amp;ldquo;最初のコミット&amp;rdquo;&lt;/p&gt;
&lt;p&gt;(5) 倉庫をリモートサーバーに接続する&lt;/p&gt;
&lt;p&gt;git Remote addorigin &lt;server&gt; (上記のウェアハウスのアドレスです)&lt;/p&gt;
&lt;p&gt;(6) 追加したサーバーに変更をプッシュします&lt;/p&gt;</description>
    </item>
    <item>
      <title>各種言語のOEP大全</title>
      <link>https://en.moejue.cn/ja/posts/35/</link>
      <pubDate>Fri, 19 May 2017 03:08:23 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/35/</guid>
      <description>&lt;p&gt;&lt;strong&gt;普段OEPを照合するのは確かに面倒なので、まとめてみました。この記事で直接OEPを確認するか、&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;画像を右クリックしてローカルに保存してください。     クリックで拡大表示できます。&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;お役に立てましたら、ぜひコメントを残していってくださいね〜&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VC6と易语言&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qw5vw6j30f908vmy4.jpg&#34;&gt;&lt;br&gt;
Delphi7&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqi8qwc0kxj30hf08u0u1.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VB5&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqi8qw8khaj30f608qjsb.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VB6&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qw0u4ej30f608qwfd.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BC++&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qw68tpj30f608qgmc.jpg&#34;&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;**VS2008Debug&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qywq8zj30fx0da3zb.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;
&lt;p&gt;**VS2008Release&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qwwnntj30c907et93.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;
&lt;p&gt;**VS2012-VS2015Debug&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qxkwfgj30c00cx74x.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;
&lt;p&gt;**VS2012-VS2015Release&lt;br&gt;
&lt;strong&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqi8qx0130j30bf07vdg9.jpg&#34;&gt;&lt;/strong&gt;&lt;br&gt;
**&lt;/p&gt;</description>
    </item>
    <item>
      <title># 各言語のボタンイベントシグネチャ</title>
      <link>https://en.moejue.cn/ja/posts/34/</link>
      <pubDate>Mon, 15 May 2017 05:31:08 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/34/</guid>
      <description>&lt;p&gt;ソフトウェアのデバッグにおいて最も重要なのはブレークポイントを設定することです。したがって、どのようにブレークポイントを設定するかは、重要なテクニックとなります。&lt;/p&gt;
&lt;p&gt;例えば、ダイアログボックスが表示される場合は&lt;code&gt;MessageBoxA&lt;/code&gt;に、レジストリ関連の場合は&lt;code&gt;RegOpenKeyA&lt;/code&gt;にブレークポイントを設定するなどです。
もちろん、ボタンイベントに直接ブレークポイントを設定できれば、さらに便利です。ボタンイベントに到達すれば、すぐにコアコードにたどり着き、クラックまであと一歩となるからです。
本稿では、各種言語におけるボタンイベントの探し方をまとめます。もちろん、VBexplorer、DEDE、ECEなどのツールを利用することも可能です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一、VBプログラム&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;実は、VBのボタンイベントの探し方は最も一般的で、いわゆる万能ブレークポイントと呼ばれるものです。これはボタンイベントだけでなく、NAGスクリーン（催促画面）の解除、スプラッシュスクリーン、グレーアウトまたは非表示のボタン、起動時のタイマーイベントなど、他にも多くの用途があります。具体的な活用法は各自で研究してください。ここではボタンイベントに絞って説明します。
ODでロードした後、CTRL+Bで&lt;code&gt;816C24&lt;/code&gt;を検索します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二、DelphiおよびBC++プログラム&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DelphiとBC++は同じ会社によって開発されたため、探し方は同じです。もちろん、DEDEを使用することもできます。
ODでロードした後、CTRL+Gで&lt;code&gt;00401000&lt;/code&gt;に移動します。
次にCTRL+Bで、シグネチャ&lt;code&gt;740E8BD38B83????????FF93????????&lt;/code&gt;を検索します。
その後の作業は、CTRL+Lで検索を続け、F2でブレークポイントを設定することの繰り返しです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三、E-language（易言語）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;E-languageのこの探し方は、パックされているプログラムにも適用できます。他の言語の場合は、まずアンパックしてから操作する必要があります。
ODでロードした後、F9でプログラムを実行します。プログラムが実行されたら、
CTRL+Bで&lt;code&gt;FF 55 FC 5F 5E&lt;/code&gt;を検索します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;四、VC++プログラム（非MFCプログラム）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ODでロードした後、右クリックし、「検索」から「すべてのコマンド」を選択します。
表示された入力ボックスに、特徴的なコード&lt;code&gt;sub eax,0a&lt;/code&gt;を書き込みます。
ブレークした後、F7でステップインし、F8で数回ステップオーバーすると、ボタンイベントに到達します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;五、MFCプログラム&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;もちろん、プログラムがMFCか非MFCかの判断は、各自で行う必要があります。
プログラムを実行し、CTRL+Fで特徴的なコード&lt;code&gt;sub eax,0a&lt;/code&gt;を検索します。
ブレークした後、F7でステップインし、F8で数回ステップオーバーすると、ボタンイベントのコードに到達します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;まとめ：各種言語のボタンイベントのシグネチャ&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VB：&lt;/strong&gt;
&lt;code&gt;816C24&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Delphi &amp;amp; BC++ ：&lt;/strong&gt;
&lt;code&gt;740E8BD38B83????????FF93????????&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MFC：&lt;/strong&gt;
&lt;code&gt;sub eax,0a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VC++：&lt;/strong&gt;
&lt;code&gt;sub eax,0a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E-language（易言語）：&lt;/strong&gt;
&lt;code&gt;FF 55 FC 5F 5E&lt;/code&gt; または (e-debug)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;万能ブレークポイント：&lt;/strong&gt;
&lt;code&gt;F3A58BC883E103F3A4E8&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ボタンイベントの使用方法については、私の&lt;a href=&#34;http://www.52ecy.pw/post-28.html&#34;&gt;ゼロから学ぶクラックシリーズチュートリアル&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;本稿の一部はインターネットから引用したものです。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ゼロから学ぶリバースエンジニアリングシリーズ講座概要 第一期</title>
      <link>https://en.moejue.cn/ja/posts/33/</link>
      <pubDate>Mon, 08 May 2017 02:00:51 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/33/</guid>
      <description>&lt;p&gt;&lt;strong&gt;目的：このチュートリアルシリーズの目的は、クラッキング防止です。これはクラッキングに関する知識を教えるチュートリアルですが、クラッカーがどのようにソフトウェアをクラックするかを知ることで、より効果的にソフトウェアのクラッキングを防ぐことができます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基礎入門編&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   1、中国語検索とNop                       [第一回ダウンロードアドレス](http://bbs.125.la/forum.php?mod=viewthread&amp;amp;tid=14017567)： プログラムをコンパイルして保存する方法

   2、jeとjmpの使用 zフラグ               [第二回ダウンロードアドレス](http://bbs.125.la/forum.php?mod=viewthread&amp;amp;tid=14018591)：不明なネットワーク認証のクラッキングを実践

   3、ローカル再起動認証                          [第三回ダウンロードアドレス](http://bbs.125.la/forum.php?mod=viewthread&amp;amp;tid=14019645)：2回のコンパイル保存によるクラッキング
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;ボタンイベント編&lt;/strong&gt;&lt;br&gt;
1、易言語ボタンイベント、万能ブレークポイント      &lt;a href=&#34;http://bbs.125.la/thread-14021176-1-1.html&#34;&gt;ボタンイベント編ダウンロードアドレス&lt;/a&gt;：易言語の構造に頼って真の易言語プログラムを区別する&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;応用編&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;            1、ネットワーク認証        [応用編第一回ダウンロードアドレス](http://bbs.125.la/thread-14022484-1-1.html)：シングルステップデバッグ中にレジスタとスタックウィンドウの変化、疑わしいジャンプに注意

          2、シェル付きプログラムのデバッグ(401000番地)、パッチ適用(メモリ)     [応用編第二回ダウンロードアドレス](http://bbs.125.la/thread-14023855-1-1.html)：（白宝雲ネットワーク認証高速クラッキングテクニック）  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;アンパック編&lt;/strong&gt;&lt;br&gt;
1、ESPの法則                        &lt;a href=&#34;http://bbs.125.la/thread-14025607-1-1.html&#34;&gt;アンパック編ダウンロードアドレス&lt;/a&gt;：XPシステム下でアンパックする必要があることに注意&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        2、シングルステップトレース法、IATの修復     [第二回ダウンロードアドレス](http://bbs.125.la/thread-14025607-1-1.html)：(2回は一緒に録画・公開されました)、チュートリアルで使用されたすべてのツールをパッケージ化し、最終レッスンのささやかなプレゼントを贈呈

    **この忙しい5月末に、ゼロから学ぶクラッキングシリーズチュートリアルのシーズン1が完結しました。これまでずっと応援してくださった皆様、ありがとうございます！** **もしシーズン2を出す機会があれば、事前に私のブログで概要を更新しますので、引き続きご注目ください！**
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;補足：&lt;br&gt;
オンライン視聴アドレス：&lt;a href=&#34;https://www.eyuyan.tv/tw-%E9%98%BF%E7%8F%8F-2&#34;&gt;易语言TV网&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emlogの最新コメント一覧でブログ主のコメント返信を非表示にする方法</title>
      <link>https://en.moejue.cn/ja/posts/32/</link>
      <pubDate>Sat, 06 May 2017 03:17:23 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/32/</guid>
      <description>&lt;p&gt;ブロガーは訪問者と頻繁に交流する必要がありますが、ブロガーの返信もコメントとして最新コメント欄に表示されます。これにより、ブロガーが一度に複数のコメントに返信すると、最新コメント欄が自分のコメントで埋め尽くされてしまい、あまり見栄えが良くありません。&lt;/p&gt;
&lt;p&gt;私が使用しているemlog5.3.1バージョンを例に説明します：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;include/lib&lt;/code&gt;ディレクトリにある&lt;code&gt;cache.php&lt;/code&gt;ファイル（これはキャッシュ関数ファイルです）を開き、その中から以下のコードを見つけます：&lt;/p&gt;
&lt;p&gt;私の場合は179行目にあります。以下の通りです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$query &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;db&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SELECT * FROM &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DB_PREFIX&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;comment WHERE hide=&amp;#39;n&amp;#39; ORDER BY date DESC LIMIT 0, &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$index_comnum&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを次のように変更します：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$query &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;db&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;query&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SELECT * FROM &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DB_PREFIX&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;comment WHERE hide=&amp;#39;n&amp;#39; AND poster!=&amp;#39;阿珏&amp;#39; ORDER BY date DESC LIMIT 0, &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$index_comnum&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ヒント：これはSQL文を実行するPHPコードです。条件は、コメント投稿者のユーザー名がブロガーのユーザー名であるかどうかをチェックし、そうであればそのコメントを最新コメントリストに表示しないようにするものです。（メールアドレスやウェブサイトで &lt;code&gt;poster!=&#39;阿珏&#39;&lt;/code&gt; をチェックすることも可能ですが、私自身は返信する際にメールアドレスを入力しないため、ユーザー名でチェックするしかありません。もちろん、私になりすまさないでくださいね）&lt;/p&gt;
&lt;p&gt;最後にファイルを保存し、emlogの管理画面にログインしてキャッシュを更新し、ウェブページを再読み込みすれば、効果が確認できます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>プログラマーの日常、ウイルス感染シリーズ</title>
      <link>https://en.moejue.cn/ja/posts/11/</link>
      <pubDate>Thu, 04 May 2017 05:30:48 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/11/</guid>
      <description>&lt;p&gt;&lt;code&gt;DropFileName = &amp;quot;svchost.exe&amp;quot;&lt;/code&gt; 問題解決策&lt;/p&gt;
&lt;p&gt;事の発端はこうです。友人がソースコードを送ってきて、見てほしいと言われました。不注意でその中にある&lt;code&gt;exe&lt;/code&gt;ファイルを誤ってクリックしてしまい、ネットワーク接続要求がポップアップ表示されたので、すぐに閉じました。その後、同じディレクトリにシステム音楽フォルダを装った&lt;code&gt;exe&lt;/code&gt;実行ファイルが追加されているのを発見しました。私は事態が良くないと感じましたが、確信は持てませんでした。その後、このフォルダ全体を削除しようとしたところ、「プログラムが使用中です」というメッセージが表示されました。&lt;/p&gt;
&lt;p&gt;私はそれをそのままにして、しばらく放置しました。その後の2、3時間で、PCの応答速度がますます遅くなり、物理メモリの使用量が急増していることに気づきました。そこでPCを再起動しました。&lt;/p&gt;
&lt;p&gt;その後、コードを書こうと思い、&lt;code&gt;html&lt;/code&gt;ファイルを開いたところ、大変な事態になっていることに気づきました。PC上のすべての&lt;code&gt;html&lt;/code&gt;ファイルに問題が発生していました（下図参照）。これで、ウイルスに感染したことが確実になりました。&lt;/p&gt;
&lt;p&gt;そしてすぐに、間髪入れずに再び&lt;code&gt;360&lt;/code&gt;をダウンロードし、PCのフルスキャンを実行しました（なぜ&lt;code&gt;360&lt;/code&gt;をダウンロードしたのかは聞かないでください）。長期間ノーガードで使っていたPCなので、一度や二度、このような事態になるのは避けられません。&lt;/p&gt;
&lt;p&gt;個別にテストしたところ、&lt;code&gt;360&lt;/code&gt;はウイルスコードのみを削除し、ファイル自体は削除しないことがわかりました。しかし、一番下でコメントアウトされた部分は削除されません。結局、手動で再度処理する必要がありました。処理しなくても大きな問題はありませんが、強迫性障害なので、ちょっと辛いです( ╯▽╰)&lt;/p&gt;
&lt;p&gt;コードの原理（作用）：
この&lt;code&gt;script&lt;/code&gt;コードは&lt;code&gt;vbs&lt;/code&gt;言語のウイルスです。このウイルスに感染すると、ローカルのすべての&lt;code&gt;html&lt;/code&gt;ドキュメントを開いたときに、このような文字列が表示されることに気づくでしょう。&lt;code&gt;html&lt;/code&gt;ドキュメントだけでなく、&lt;code&gt;dll&lt;/code&gt;ドキュメントも感染します。もちろん、この種のウイルスは過度に心配する必要はありません。なぜなら、ファイル破壊の役割を果たすだけで、プライバシーのアップロードやアカウントの乗っ取りなどの危険性はないからです。
このコードの大まかな意味は、&lt;code&gt;svchost.exe&lt;/code&gt;プロセスを見つけてデータを注入し、その後のバイナリコードを実行するというものです。このウイルスが他のウイルスと異なるのは、この&lt;code&gt;vbs&lt;/code&gt;ウイルスは感染力が非常に強いことです。&lt;code&gt;html&lt;/code&gt;ファイルが一度感染すると、ユーザーが&lt;code&gt;html&lt;/code&gt;ドキュメントを開くだけでウイルスが上記のコードを実行し、ローカルPC上のすべての&lt;code&gt;html&lt;/code&gt;ファイルと&lt;code&gt;dll&lt;/code&gt;ファイルに直接感染します。
確かに、&lt;code&gt;DLL&lt;/code&gt;ファイルも感染するため、一部のソフトウェアは正常に使用できますが、ウイルス対策ソフトはウイルスを検出します。また、多くの常用ソフトウェアを実行するとウイルスが検出されることに気づくでしょう。例えば、以前よく使っていた&lt;code&gt;迅雷&lt;/code&gt;や&lt;code&gt;酷狗&lt;/code&gt;などの常用ソフトウェアを再度開いたときに、ウイルスがあると表示されたのです。当時、私は非常に奇妙に感じました。&lt;code&gt;迅雷&lt;/code&gt;は公式サイトからダウンロードしたのに、なぜウイルスが検出されるのだろうか？ここでの理由は、&lt;code&gt;vbs&lt;/code&gt;ウイルスが&lt;code&gt;迅雷&lt;/code&gt;などのソフトウェアのインストールファイル内の&lt;code&gt;dll&lt;/code&gt;に感染したため、ウイルス対策ソフトが&lt;code&gt;vbs&lt;/code&gt;スクリプトウイルスという名称でウイルスを検出し続けるのです。
ヒント：記事中の画像は宇宙人に連れ去られました&lt;/p&gt;</description>
    </item>
    <item>
      <title>ウェブサイトのバックエンドアドレスを公開することは非常に危険なことです</title>
      <link>https://en.moejue.cn/ja/posts/21/</link>
      <pubDate>Sun, 30 Apr 2017 07:48:47 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/21/</guid>
      <description>&lt;p&gt;ウェブサイトのバックエンドアドレスを公開することは非常に危険なことです。例えば、私のウェブサイトのバックエンドアドレスは次のとおりです。&lt;a href=&#34;http://52ecy.pw/admin/&#34;&gt;管理ログイン&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;インターネットは複雑な世界であり、各ウェブサイトの管理者は自分自身を守る方法を学ぶ必要があります。&lt;/p&gt;
&lt;p&gt;emlogのデフォルトのバックエンドパスはadminディレクトリであり、重要な情報がむき出しで公開されています。&lt;/p&gt;
&lt;p&gt;デフォルトのバックエンドパスを変更するには、3つのステップがあります。&lt;/p&gt;
&lt;p&gt;adminディレクトリを開き、globals.phpを見つけて、editplusなどのエディタで開きます。メモ帳で開いても構いませんが、結果は保証されません。&lt;/p&gt;
&lt;p&gt;フォルダ名をadminからxxxxなどの希望の名前に変更します。&lt;/p&gt;
&lt;p&gt;admin/globals.phpファイルを開きます。現在はxxxx/globals.phpになっているはずです。&lt;/p&gt;
&lt;p&gt;9行目のコードを編集します。&lt;/p&gt;
&lt;p&gt;define(&amp;lsquo;TEMPLATE_PATH&amp;rsquo;, EMLOG_ROOT.&amp;rsquo;/admin/views/&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;adminを新しい名前xxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;define(&amp;lsquo;TEMPLATE_PATH&amp;rsquo;, EMLOG_ROOT.&amp;rsquo;/xxxx/views/&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;3番目のステップ、バックエンドログインをリフレッシュした後、ナビゲーション設定で「ログイン」を非表示にします。そうしないと、クリックすると404エラーが発生し、非常に煩わしいです。&lt;/p&gt;
&lt;h3 id=&#34;後遺症の解決策&#34;&gt;後遺症の解決策：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;バックエンドパスを変更した後、微語の絵文字画像が表示されなくなります。解決策：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;include/lib/function.base.phpを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;$t = str_replace($data,&amp;rsquo;&lt;img title=&#34;&#39;.$data.&#39;&#34; src=&#34;&#39;.BLOG\_URL.&#39;admin/editor/plugins/emoticons/images/&#39;.$emos\[$data\].&#39;&#34;/&gt;&amp;rsquo;,$t);&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;$t = str_replace($data,&amp;rsquo;&lt;img title=&#34;&#39;.$data.&#39;&#34; src=&#34;&#39;.BLOG\_URL.&#39;xxxx/editor/plugins/emoticons/images/&#39;.$emos\[$data\].&#39;&#34;/&gt;&amp;rsquo;,$t);&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;バックエンドの個人設定で新しいアバターをアップロードしない場合、微語のアバターもフロントエンドに表示されなくなります。解決策：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;t/index.phpを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;$avatar = empty($user_cache[UID][&amp;lsquo;avatar&amp;rsquo;]) ? &amp;lsquo;../admin/views/images/avatar.jpg&amp;rsquo; : &amp;lsquo;../&amp;rsquo; . $user_cache[UID][&amp;lsquo;avatar&amp;rsquo;];&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;$avatar = empty($user_cache[UID][&amp;lsquo;avatar&amp;rsquo;]) ? &amp;lsquo;../xxxx/views/images/avatar.jpg&amp;rsquo; : &amp;lsquo;../&amp;rsquo; . $user_cache[UID][&amp;lsquo;avatar&amp;rsquo;];&lt;/p&gt;
&lt;p&gt;次に、テンプレート内のt.php、つまりcontent/templates/テンプレート名/t.phpを開きます。&lt;/p&gt;
&lt;p&gt;BLOG_URL . &amp;lsquo;admin/views/images/avatar.jpg&amp;rsquo; :&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;BLOG_URL . &amp;lsquo;xxxx/views/images/avatar.jpg&amp;rsquo; :&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;テンプレートが破損した場合の「戻る」ボタンのリンクの問題を解決します。デフォルトのadminをクリックするとエラーが発生します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;include/lib/view.phpを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;emMsg(&amp;lsquo;現在のテンプレートは削除または破損しています。バックエンドにログインして別のテンプレートに変更してください。&amp;rsquo;, BLOG_URL . &amp;lsquo;admin/template.php&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;adminをxxxxに置き換えます。&lt;/p&gt;
&lt;p&gt;emMsg(&amp;lsquo;現在のテンプレートは削除または破損しています。バックエンドにログインして別のテンプレートに変更してください。&amp;rsquo;, BLOG_URL . &amp;lsquo;xxxx/template.php&amp;rsquo;);&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;記事リストページの編集ボタンのリンクの問題を解決します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;テンプレートのmodule.phpファイルを開き、以下を見つけます。&lt;/p&gt;
&lt;p&gt;$editflg = ROLE == ROLE_ADMIN || $author == UID ? &amp;lsquo;&lt;a href=&#34;&#39;.BLOG\_URL.&#39;admin/write\_log.php?action=edit&amp;gid=&#39;.$logid.&#39;&#34; target=&#34;\_blank&#34;&gt;編集&lt;/a&gt;&amp;rsquo; : &amp;lsquo;&amp;rsquo;;&lt;/p&gt;</description>
    </item>
    <item>
      <title>58都市ログイン（RSAアルゴリズム）</title>
      <link>https://en.moejue.cn/ja/posts/16/</link>
      <pubDate>Wed, 23 Nov 2016 08:27:09 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/16/</guid>
      <description>&lt;p&gt;58都市ログイン（RSAアルゴリズム）&lt;/p&gt;
&lt;p&gt;この時。もう一つの素晴らしいログインアルゴリズム分析&lt;/p&gt;
&lt;p&gt;宛先アドレス:
&lt;a href=&#34;https://passport.58.com/login&#34;&gt;https://passport.58.com/login&lt;/a&gt;?（同市内58件）
使用したツール:
js デバッグ ツール (私はフォーラムから改造された、比較的インテリジェントな js デバッグ ツールを使用しています)
パケットキャプチャツール（今回はキーワード検索を便利にするためにブラウザのF12を直接使用しました）&lt;/p&gt;
&lt;p&gt;ヒント: この記事は 1 年前に公開され、荒廃してしまったので、画像のコンテンツは失われています。&lt;/p&gt;</description>
    </item>
    <item>
      <title>新浪微博动态 RSA 分析图文&#43;登录</title>
      <link>https://en.moejue.cn/ja/posts/13/</link>
      <pubDate>Wed, 12 Oct 2016 06:50:19 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/13/</guid>
      <description>&lt;p&gt;新浪微博动态 RSA 分析&lt;/p&gt;
&lt;p&gt;一、使用到的工具&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ie ブラウザ (9 以上)&lt;/li&gt;
&lt;li&gt;httpwatch (中英どちらでも可)&lt;/li&gt;
&lt;li&gt;js デバッグツール&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;対象サイト: &lt;a href=&#34;http://weibo.com/&#34;&gt;http://weibo.com&lt;/a&gt; (新浪微博)&lt;/p&gt;
&lt;p&gt;二、パケットキャプチャ
前回のパケットキャプチャの流れを踏襲します。良い習慣を身につけましょう。ここでは詳しく説明しません。
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ixqxrdj30m808p421.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ixmpmdj30ja06r3z4.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ixpef1j30m60azgn3.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ixrm8wj30k008rdgm.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ixw3l7j30m806eq5d.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ixyrvuj30m80fvtfm.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iy8lk3j30jb07uwf9.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iy9zgtj30kv089aan.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iycexlj30m807w0ve.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iymkxpj30m80fkq6d.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iysq5qj30et06bwev.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iyxgegj30m80a8gnz.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iz51cqj30gc08175d.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iz6tvrj30ip0fut9z.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2iz8pi3j30m807ewf0.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2izftdtj30ku05yjs4.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2izoqdrj30kh05cgm5.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2izr82ij30hh0e5400.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2izvdnzj30h403o74o.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2j02n8yj30m8030mye.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;三、パケットキャプチャデータの分析&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ログイン送信パケットを特定する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;キーワード検索の柔軟な変更&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;五、js デバッグ四、キーワードの検索&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;HttpWatch でキーワードを検索できます。
ie の F12 で引き続き検索することもできます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pwencode キーワードを検索する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ここは前回と異なります。まず呼び出しコードをコピーして簡単な書き換えを行います。
コピーしたコードは function() 関数ではありません。易言語のサブプログラムのようなものです。
(ここでの説明は誤っている可能性があります)
3つのパラメータがあります。p がパスワードであることはわかっています。残りの2つは開発者ツールで確認します。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;六、図解による分析
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2j0d0tpj30m80elwkm.jpg&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2j05q0ej30jz0bx3zu.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;何か間違いがあればご指摘ください。&lt;/p&gt;</description>
    </item>
    <item>
      <title>中国電信ログインRSAアルゴリズム&#43;図解分析</title>
      <link>https://en.moejue.cn/ja/posts/14/</link>
      <pubDate>Fri, 30 Sep 2016 01:29:10 +0000</pubDate>
      <guid>https://en.moejue.cn/ja/posts/14/</guid>
      <description>&lt;p&gt;前置きはさておき！&lt;/p&gt;
&lt;p&gt;一、使用するツール&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;IEブラウザ（バージョン9以上）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;httpwatch（中国語版・英語版どちらでも可）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JSデバッグツール&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ターゲットサイト：&lt;a href=&#34;http://xz.189.cn/sso/LoginServlet&#34;&gt;http://xz.189.cn/sso/LoginServlet&lt;/a&gt; China Telecom 189 ログイン&lt;/p&gt;
&lt;p&gt;二、パケットキャプチャ：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;パケットキャプチャの前に、サイトのCookieとキャッシュをクリアします&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh27cuooyj30l90cv0u6.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh27cuooyj30l90cv0u6.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ページを開く前にパケットキャプチャツールを起動します（そうしないと、暗号化されたJSをキャプチャできません）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;どれがログイン送信パケットであるかを判断します&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh27p2sm7j30m80akdjt.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh27p2sm7j30m80akdjt.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;三、キャプチャデータの分析：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh282bkdxj30ls076t9g.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh282bkdxj30ls076t9g.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;ここでIEのF12開発者ツールを使用します&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;パスワードのキーワードである「密码」や「passWord」を検索します&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh28mmahhj30m804iwfp.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh28mmahhj30m804iwfp.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;暗号化で呼び出される関数 &lt;code&gt;encryptedString&lt;/code&gt; を追跡し続けます&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh28uu87ij30ik087aaf.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh28uu87ij30ik087aaf.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;encryptedString&lt;/code&gt; 関数の2つの引数が何であるかを知る必要もあります。引き続きkeyを探します&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh29aoqekj30m803zq3w.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh29aoqekj30m803zq3w.jpg&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh29rurbtj30m80ccwi2.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh29rurbtj30m80ccwi2.jpg&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh29u07pgj30i50bx753.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh29u07pgj30i50bx753.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;
&lt;p&gt;これで暗号化に必要なパラメータが揃いました。次はデバッグです。ここで、「パラメータは2つあるのでは？もう一つのsは？」と疑問に思う方がいるかもしれません。関数から、sがパスワードを暗号化する際のpwdであることがわかります。関数のif文による呼び出しを判断すると、pwdが私たちのパスワードであるpassWordであることがわかります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;次に、関数呼び出しをコピーして、まず開発者ツールでデバッグしてみます。keyとsの2つの引数が必要です。&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2a02ub9j30m60d440i.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2a02ub9j30m60d440i.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IEでのデバッグに問題がなければ、次にJSデバッグツールでデバッグしてみます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3つのRSA暗号化JSファイルとkeyをコピーし、&lt;code&gt;bodyRSA()&lt;/code&gt;関数を呼び出します。引数はパスワードです。これがオブジェクトであり、直接呼び出せないことがわかります。呼び出しを続けると、ツールがクラッシュしてしまいます。&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh2a1pjyxj30fq06vaau.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1ply1fqh2a1pjyxj30fq06vaau.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ここがRSAの難点です。書き換える必要があり、そうしないと私たちの易言語（E-language）からも呼び出すことができません。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;書き換えた関数を先ほどと同様にデバッグツールにコピーし、同じく&lt;code&gt;bodyrsa()&lt;/code&gt;関数を呼び出します。&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2acq1dwj30m808utbb.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2acq1dwj30m808utbb.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最後に、成功したことが確認できました。&lt;br&gt;
&lt;a href=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ai5ee1j30hy0dggms.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://image.baidu.com/search/down?url=https://tva1.sinaimg.cn//large/0072Vf1pgy1fqh2ai5ee1j30hy0dggms.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;China Telecomの携帯電話番号を持っていないため、Cookieを操作する完全なログイン処理を記述できませんでした。次回にご期待ください！&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
