Tera Termの個人的な作業用リポジトリ
Revisão | c967494dc1350394139c0ae8661d8f1535637367 (tree) |
---|---|
Hora | 2022-09-06 23:12:10 |
Autor | IWAMOTO Kouichi <sue@iwmt...> |
Commiter | IWAMOTO Kouichi |
Client Secretの記録形式をWiresharkが扱う形式に合わせた。
記録時にメモリーリークしていたのも修正した。
@@ -646,28 +646,32 @@ void push_bignum_memdump(char *name, char *desc, BIGNUM *bignum) | ||
646 | 646 | free(buf); // free |
647 | 647 | } |
648 | 648 | |
649 | -log_kex_key(PTInstVar pvar, char *type, char *msg) | |
649 | +void log_kex_key(PTInstVar pvar, const BIGNUM *secret) | |
650 | 650 | { |
651 | 651 | int fd, i; |
652 | 652 | unsigned char buff[4], *cookie; |
653 | + char *hexstr; | |
653 | 654 | |
654 | 655 | if (pvar->settings.KexKeyLogging && pvar->settings.KexKeyLogFile[0] != 0) { |
656 | + hexstr = BN_bn2hex(secret); | |
657 | + if (hexstr == NULL) { | |
658 | + return; | |
659 | + } | |
655 | 660 | fd = _open(pvar->settings.KexKeyLogFile, |
656 | 661 | _O_RDWR | _O_APPEND | _O_CREAT | _O_TEXT, |
657 | 662 | _S_IREAD | _S_IWRITE); |
658 | 663 | if (fd >= 0) { |
659 | 664 | cookie = pvar->crypt_state.client_cookie; |
660 | - _write(fd, type, strlen(type)); | |
661 | - _write(fd, " ", 1); | |
662 | 665 | for (i=0; i<16; i++) { |
663 | 666 | _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%02x", cookie[i]); |
664 | 667 | _write(fd, buff, 2); |
665 | 668 | } |
666 | 669 | _write(fd, " ", 1); |
667 | - _write(fd, msg, strlen(msg)); | |
670 | + _write(fd, hexstr, strlen(hexstr)); | |
668 | 671 | _write(fd, "\n", 1); |
669 | 672 | _close(fd); |
670 | 673 | } |
674 | + OPENSSL_free(hexstr); | |
671 | 675 | } |
672 | 676 | } |
673 | 677 |
@@ -5099,7 +5103,7 @@ static void SSH2_dh_kex_init(PTInstVar pvar) | ||
5099 | 5103 | |
5100 | 5104 | // 秘密にすべき乱数(X)を生成 |
5101 | 5105 | dh_gen_key(pvar, dh, pvar->we_need); |
5102 | - log_kex_key(pvar, "CLIENT_SECRET", BN_bn2hex(dh->priv_key)); | |
5106 | + log_kex_key(pvar, dh->priv_key); | |
5103 | 5107 | |
5104 | 5108 | msg = buffer_init(); |
5105 | 5109 | if (msg == NULL) { |
@@ -5331,7 +5335,7 @@ static BOOL handle_SSH2_dh_gex_group(PTInstVar pvar) | ||
5331 | 5335 | // 秘密にすべき乱数(X)を生成 |
5332 | 5336 | dh_gen_key(pvar, dh, pvar->we_need); |
5333 | 5337 | |
5334 | - log_kex_key(pvar, "CLIENT_SECRET", BN_bn2hex(dh->priv_key)); | |
5338 | + log_kex_key(pvar, dh->priv_key); | |
5335 | 5339 | |
5336 | 5340 | // 公開鍵をサーバへ送信 |
5337 | 5341 | msg = buffer_init(); |
@@ -5410,7 +5414,7 @@ static void SSH2_ecdh_kex_init(PTInstVar pvar) | ||
5410 | 5414 | } |
5411 | 5415 | group = EC_KEY_get0_group(client_key); |
5412 | 5416 | |
5413 | - log_kex_key(pvar, "CLIENT_SECRET", BN_bn2hex(EC_KEY_get0_private_key(client_key))); | |
5417 | + log_kex_key(pvar, EC_KEY_get0_private_key(client_key)); | |
5414 | 5418 | |
5415 | 5419 | msg = buffer_init(); |
5416 | 5420 | if (msg == NULL) { |