-2

まず第一に、私は以前に多くの調査を行ってきましたが、簡単なことかもしれないことを尋ねなければなりません... またはそうでないかもしれません.

2 種類のキーがあり、1 つは自分でセットアップし、もう 1 つは単純な FourCC コードです。ただし、たとえば HxD を使用して、.exe のコードでそれらを見つけるのは非常に簡単です。したがって、.exe でキーを非表示にしたいのですが、変更したくありません。これが私のキーの例です。

BYTE * pbData = new BYTE[dwDataSize];
file.Read(pbData, dwDataSize);

CLZObject zObj;

static DWORD mykey[4] =
{
    000000,
    11111111,
    222222222,
    33333333
};

if (!CLZO::Instance().Decompress(zObj, pbData, mykey))
{
    delete[] pbData;
    return false;
}

ご覧のとおり、私は LZO を使用していますが、通常は彼女がどこにいるかを知っているので、鍵を見つけるのは簡単です...

次に、これが FourCC です (例: DXT1 のように文字を入力するだけなので、非常に簡単に見つけることができます。

    case MAKEFOURCC('D','X','T','1'):
    strncpy_s(strPixelFormat, 512, "DXT1", 31);
    m_CompFormat = PF_DXT1;
    break;

そのため、メモリを使用してキーを非表示にするか (例はありませんが提供できます)、プログラムからキーを非表示にするためにキーを暗号化することを考えましたが、わかりません (またはよくわかりません)。 ) そのようなものを暗号化する方法:

    000000,
    11111111,
    222222222,
    33333333

ありがとう、良い一日を !:)

4

1 に答える 1

0

隠したい理由を言えばよかった。FourCC は 4 バイトなので、int と見なすことができます。xor するか、他の方法で暗号化することができます。しかし、とにかくコードに鍵があるため、明らかにこれは深刻な敵に対しては役に立ちません。

深刻なハッカーは、ディスク上のプログラムに加えて、プログラムが実行されているときにコードとデータをスキャンすることを忘れないでください。

編集:

これは、fourcc xor-ed を取得するための簡単で汚いコードです。元の値に戻すには、実行時に同じものを適用します。0x55555555 を使用すると、印刷可能な文字が印刷可能なままになるため、数値ではなく出力文字列を使用できるので便利です。

int main( int argc, char* argv[] ) {
  char s[5];
  *(unsigned int*)s = *(unsigned int*)argv[1] ^ 0x55555555u;
  s[4] = '\0';
  printf("\"%s\"  ==>  \"%s\" (0x%08xu)\n", argv[1], s, *(unsigned int*)s);
  return 0;
}

$ ./a.exe xvid
"xvid"  ==>  "-#<1" (0x313c232du)
$ ./a.exe mpeg
"mpeg"  ==>  "8%02" (0x32302538u)
$ ./a.exe avc1
"avc1"  ==>  "4#6d" (0x64362334u)
于 2016-02-16T19:11:34.783 に答える