私はC++暗号化メソッドをC#に変換する作業を行っています。問題は、暗号化/復号化することができないためです。C#XOR暗号化関数を変換する
アイデアはシンプルで、パケットをキャプチャして解読します。出力は次のようになります。 パケットサイズ - コマンド/アクション - ヌル(終了)
(最初と最後の2つのバイトオフ暗号解読カット)
C++のコードはこれです:
// Crypt the packet with Xor operator
void cryptPacket(char *packet)
{
unsigned short paksize=(*((unsigned short*)&packet[0])) - 2;
for(int i=2; i<paksize; i++)
{
packet[i] = 0x61^packet[i];
}
}
だから私は、私はポインタを使用したくなかった場合は、これはC#で働くだろうと思った:
public static char[] CryptPacket(char[] packet)
{
ushort paksize = (ushort) (packet.Length - 2);
for(int i=2; i<paksize; i++)
{
packet[i] = (char) (0x61^packet[i]);
}
return packet;
}
それはない - ブタ、返される値はちょうどrubishの別のラインの代わりに、decrypですted値。与えられた出力は次のとおりです。..O²&/OOOe。
まあ、少なくとも '/'は何らかの理由で適切な場所にあります。
いくつかのより多くの情報:
進値:
- 私が使用しているテストパケットがこれです0C 00 E2 66 65 47 4E 09 04 13 65 00
プレーンテキスト:... feGN ... e。復号化された
:XX/hereXX
X =不明値が、私は本当に覚えてカントが、それは問題ではありません。
- あなたがパケットをこのように復号化することができ六角ワークショップを使用して:、
- 特別CF_TEXTとして進値を貼り付け「を扱うように16進数の値」ボックスがチェックされていることを確認します。
- その後、最初と最後の2バイトを除いて、貼り付けたばかりの16進数値からすべてを選択します。
- [ツール]> [操作]> [Xor]に移動します。
- 「データを8ビットデータとして扱う」を選択し、値を「61」に設定します。
- 「OK」を押すと完了です。私は私の頭の上からこれを書いているので、私は、現時点で与えることができるすべての情報です
。
ありがとうございます。
あなたがこの中に質問が表示されない場合:
を誰かがそれで間違っているものを見るために、コードを見てみることができれば、またはそれを行うための別の方法があります場合、それは素晴らしいことです。私はこのコードを変換します。なぜなら、私はC++には恐ろしいので、そのコードでC#アプリケーションを作成したいからです。
Ps:コードタグなどは痛みだったので、スペーシングなどがちょっと台無しになったらごめんなさい。
- あなたがパケットをこのように復号化することができ六角ワークショップを使用して:、
マークダウンにコードとしてフォーマットする必要があることを指示するには、すべてを4つのスペースでインデントします。コードブロック全体を選択して、ツールバーの「コード」ボタン(中括弧付き)をクリックすることもできます。それはあなたのためにいるように見えるほど難しいはずはありません。 –
これはあまり洗練された暗号化ではありません(各バイトに固定定数をXORする)。実際には、基本的にはこれと変わりません。 ROT13!参照としてASCIIチャート(例:http://www.asciitable.com/)を使用すると、それが機能していない理由を確認し、それがうまくいかない理由がわかります。デバッガとトレースステートメントで既に何を学んだことがありますか? –
@Codyそれは私がやったことですが、タグが別の場所に現れたので、タグをカット/ペーストしようとしましたが、いくつかの行が乱れました。 *一口* @Oli私は命令どおりに動いていることを学んだが、意図通りではないことを学んだ。 – Nick