読者です 読者をやめる 読者になる 読者になる

備忘録

備忘録

C#でPublic Key Pinningする

C#

Ⅰ. はじめに

Public Key Pinningとは、SSL証明書のチェックを行うことです。
チェックを行うことで、不正な証明書を検知することができます。

例えばクラッカーはMITMを利用して傍受を試みます。
MITMを利用するとSSL証明書が書き換わる為、
不正な証明書であれば通信を行わないようにすることが出来ます。

Ⅱ. プログラム

Program.cs
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(CertificateValidation.OnRemoteCertificateValidationCallback);
CertificateValidation.cs
public static bool OnRemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
  var hashs = new Dictionary<string, string>()
  {
    { "aaa.jp", "6c276e0c4e2fa19d1656df1298d8ff6497d0cc49" },
    { "aab.jp", "7dfc0fd1abf2af11dd2f9503448009f090d529eb" },
    { "aac.jp", "bb1d931851cc679a476021494550573eb1e1148d" }
  };

  if (hashs.ContainsValue(certificate.GetCertHashString().ToLower()))
  {
    // 通信を許可する
    return true;
  }
  else
  {
    // 通信を許可しない
    return false;
  }
}

SSL証明書ハッシュ値は、SSL証明書の「拇印」の値を使います
f:id:kagasu:20170310145511p:plain

PythonでPOSTする

Python

Ⅰ. はじめに

PythonでPOSTする方法です。

Ⅱ. プログラム

import requests

s = requests.session()

proxies = {
    'http':'http://127.0.0.1:8008',
    'https':'https://127.0.0.1:8008'
}

headers = {
    'User-Agent' : 'Mozilla/...',
    'Content-Type' : 'application/x-www-form-urlencoded'
}

params = {
    'param1' : 'xxx',
    'param2' : 'yyy'
}

s.proxies = proxies
# 証明書チェックを省く
s.verify = False
s.headers = headers

response = s.post('https://xxxxx.tld/', params)

# 文字化けする場合はcmdで「chcp 65001」を実行すると治る(Windows)
# 65001 はutf-8
print response.content

Ⅲ. その他

開発環境でMITMを利用したproxy(FiddlerやBurpSuiteやCharlesやmitmproxyなど)
SSL Decryptを有効にしていると以下のエラーが出ます。

requests.exceptions.SSLError:
("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
s.verify = False

にするとでなくなります。

VisualStudioで設定したAWSのプロファイルを修正する

AWS

Ⅰ. はじめに

AWS Toolkit for Visual Studioを利用しているのが前提です。
VisualStudioに追加したプロファイルの追加、編集、削除するについて説明します。

Ⅱ. やり方

1. AWS Explorer を表示させる

VisualStudioのメニューから
「表示」→「AWS Explorer」を選択します。

2. 追加、編集、削除する

人のアイコンが左から順番に
「追加」、「編集」、「削除」となっています。
f:id:kagasu:20170304201010p:plain

JMPの隠蔽

リバースエンジニアリング

Ⅰ. はじめに

リバースエンジニアリングのテクニックの1つです。
パターン化しているので覚えておいて損はありません。
主に ASProtect というパッカーが利用する方法です。

Ⅱ. JMPの隠蔽方法

通常の場合

アセンブリでJMPする場合は以下のように書きます。

JMP x

隠蔽の例

push x
retn

push x とすると x がスタックに積まれます。
retn するときはスタックの一番上に積まれた x にジャンプします。
よって、上記2つのコードは全く同じ動作をします。

LINE Payの利用制限解除方法

LINE Pay

Ⅰ. はじめに

LINE Payに50万円を入金したところ、
アカウントの利用が制限されました。

普段は月に50万円も入金することがない為、
不正利用防止の一環として自動的に制限が行われたものと推測します。

Ⅱ. 解除方法

1. 「問題報告フォーム」にアクセス

http://pay.line.me/hi

2. 必要事項を入力し、送信する

f:id:kagasu:20170220115501p:plain

3. 連絡を待つ

担当者からの連絡を待ちます。
私の場合は3時間ほどで解除されましたが、
基本的に返信まで2,3日かかると書かれています。(2017/02/20時点)

また、私のアカウントタイプは「LINE Money」です。
自動車運転免許証などを提出し、個人認証を済ませているアカウントです。

「LINE Cash」の場合は個人認証が行われていないため、
解除までに時間がかかるかもしれません。(推測の話です)

f:id:kagasu:20170220120012j:plain