Skypeの学習-引用の編集

前の記事 (私のカルマの変化から判断すると、誰もがそれを気に入ったわけではありません)と比較すると、これは完全に無害です。



Skypeからの引用を信頼できますか? 編集できないように思われますが、最近(Windowsバージョンで)htmlタグのサポートを無効にした後、これは不可能になります。 以下のスクリーンショットの質問への回答:







答えは、Skypeからの引用の完全性と作成者を信頼できないということです。 確かに、プロトコルとプログラム全体のセキュリティについて多くの人が聞いています。 しかし、いつものように、エラーは詳細にあります。 引用符がデジタル署名されており、しっかりと信頼できると主張されているわけではありません(まあ、またはそのような声明は見つかりませんでした)が、実際にはそうではありません。



見積もりをコピーするときに、Skypeが作成者、日付などに関する情報をクリップボードに追加するとします。これは、後で判明したように、開発者が行った最も簡単な方法です。 さらなる研究のために、Skypeを分解する必要はありません。独自のプログラムを作成するだけです(Smart UIパターンの最高の伝統-これはすべてのコードがボタンにある場所です)。 習慣から、私はc#を使用します。スピードのUIとしてwinフォームを選択します(これらのテクノロジーの嫌いな人に許されます)。

したがって、ここに禁欲的なデザインの金型があります:







一方のボタンでは、クリップボードのすべてのデータがrichEditに書き込まれ、もう一方のボタンでは逆の操作が行われます。 すべてを判断すると、「System.Windows.Forms.Clipboard」クラスはクリップボードを操作するのに適しています。 IDataObjectインターフェイスを実装するオブジェクトを返す適切なGetDataObjectメソッドがあります(msdnを参照)。 Typeパラメーターとして受け入れるGetDataメソッドは、私たちに適していない。 クリップボードに保存されたオブジェクトの構造は、合法的な方法では認識できませんが、「フォーマット」の行が過負荷になっています。 GetFormatsメソッドもあるため、これは非常に役立ちます。 それで、ここに、Skypeがクリップボードに保存したものを学ぶ最初のステップがあります:



private const string DataKey = "SkypeMessageFragment"; private Dictionary<string, object> clipboadData = new Dictionary<string, object>(); private string message; private void buttonLoad_Click(object sender, EventArgs e) { IDataObject iData = Clipboard.GetDataObject(); foreach (var format in iData.GetFormats()) { clipboadData[format] = iData.GetData(format); } using (StreamReader streamReader = new StreamReader(clipboadData[DataKey] as MemoryStream)) { message = streamReader.ReadToEnd(); (clipboadData[DataKey] as MemoryStream).Seek(0, SeekOrigin.Begin); } richTextBoxQuote.Text = message; }
      
      







skypeで「テストテキスト」を作成し、見積もりをコピーし、Skypeウィンドウに貼り付けて、見積もりがコピーされたことを確認し、コードを実行します。







私はあなたのことは知りませんが、SkypeMessageFragmentキーの値には非常に興味がありました。おそらくそれはMemoryStreamであるためです。 それでは、このストリームの内容を見てみましょう。



 private Dictionary<string, object> clipboadData = new Dictionary<string, object>(); private void buttonLoad_Click(object sender, EventArgs e) { IDataObject iData = Clipboard.GetDataObject(); foreach (var format in iData.GetFormats()) { clipboadData[format] = iData.GetData(format); } }
      
      







これを実行すると、richeditで次のことがわかります。







正直なところ、これで私の研究は失敗に終わったと思いました。 はい、著者がいます。時間はunix形式で送信されます。テキスト自体は引用のテキストですが、それに加えて、何らかのハッシュが格納されるguid値があります。 このハッシュを見て、これがhmacのようなものである可能性が高いことに気付きました。 いずれにせよ、引用システムは次のように動作する必要があります。Skypeは、スーパーシークレットアルゴリズム(おそらくスーパーシークレットキーを使用)に従ってすべての引用データからハッシュを計算し、結果のハッシュをクリップボードに書き込み、ユーザーが引用をウィンドウに挿入して送信するときチャット、スカイプは署名を検証します。 理論は優れていますが、そうであるかどうかを確認し、richEditをクリップボードに保存します。



 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace SkypeQuote { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private const string DataKey = "SkypeMessageFragment"; private Dictionary<string, object> clipboadData = new Dictionary<string, object>(); private string message; private void buttonLoad_Click(object sender, EventArgs e) { IDataObject iData = Clipboard.GetDataObject(); foreach (var format in iData.GetFormats()) { clipboadData[format] = iData.GetData(format); } using (StreamReader streamReader = new StreamReader(clipboadData[DataKey] as MemoryStream)) { message = streamReader.ReadToEnd(); (clipboadData[DataKey] as MemoryStream).Seek(0, SeekOrigin.Begin); } richTextBoxQuote.Text = message; } private void buttonSave_Click(object sender, EventArgs e) { message = richTextBoxQuote.Text; MemoryStream memoryStream = new MemoryStream(); StreamWriter streamWriter = new StreamWriter(memoryStream); streamWriter.Write(message); streamWriter.Flush(); memoryStream.Seek(0, SeekOrigin.Begin); clipboadData[DataKey] = memoryStream; IDataObject iData = new DataObject(); foreach (var item in clipboadData) { iData.SetData(item.Key, item.Value); } Clipboard.SetDataObject(iData, true); } } }
      
      







ストリームへの書き込み時に、意図的にusingコンストラクトを使用しませんでした(streamWriterのDisposeメソッドを呼び出すと、MemoryStreamが損​​なわれます)。そのため、プログラムを実行し、Skypeから見積もりをコピーし、「エディター」で編集し、[保存]をクリックして、見積もりをSkypeに貼り付けます。







正直なところ、私はこれがうまくいったことに非常に驚いた。 いいえ、もちろん、これが機能することを心から望んでいましたが、私は非常に驚きました。 少なくとも私のハッシュの理論のために、なぜこのガイドが明確でないのか。

この記事の本当の目的は、スカイプの引用が信頼できないことを一般に警告することです。 結局のところ、これは非常に強力なツールであり、これを使用して他人をperson中傷/欺くことができます。 全体として、これはソーシャルエンジニアリングの新しい武器なので、用心して、理論を実践でテストするのを怠らないでください。



「コード」の最後のセクションのPSはすべてソースであるため、gitにアップロードしませんでした。PPS「自動改行とリンク作成を無効にする」オプションがオンになっている場合、コードのインデントが多すぎることをおaびします。 (私はこのhttp://highlight.hohli.com/でコードを強調しました、そこですべてがうまく見えました)



All Articles