keyblockからは以下のようにしてキーを取得します。サーバ用とクライント用に分かれてます。
key+ivは共通鍵です。macはデータの検証で使用します。ivが曲者でここで取得したivデータは初回しか使えません。
毎回、ivは最終ブロックデータの先頭へ変更します。

byte* keyblock = PRF( master_secret, IByte("key expansion", 13), Marge(inf.server_random, inf.client_random),10);

byte* client_mac = keyblock;
byte* server_mac = keyblock+20;
byte* client_key = keyblock+20+16;
byte* server_key = keyblock+20+16+16;
byte* client_iv = keyblock+20+16+16+16;
byte* server_iv = keyblock+20+16+16+16+16;


byte* Crypt::DecryptAES(HCRYPTKEY hKey, byte* data, byte* client_iv )
{
BOOL b = CryptSetKeyParam(hKey,KP_IV,client_iv,0);
const UINT block_size = 16;
byte* encrypted_data = data;
...
byte* p = ret;
int last_unit = 0;
for( int i = 0; i < unit_cnt; i++ )
{
...
CryptDecrypt(hKey, 0, FALSE, 0, p, &len ))
last_unit = i;
p += block_size;
}

memcpy( client_iv, encrypted_data+(last_unit*block_size), block_size ); // !!
return ret;
}

byte* Crypt::EncryptAES(HCRYPTKEY hKey, byte* data, byte* server_iv )
{
BOOL b = CryptSetKeyParam(hKey,KP_IV,server_iv,0);
const UINT block_size = 16;
...
byte* p = ret;
int last_unit = 0;
for( int i = 0; i < unit_cnt; i++ )
{
...
CryptEncrypt(hKey, 0, FALSE, 0, p, &len, cbou ))
last_unit = i;
p += block_size;
}

encrypted_data = ret;

memcpy( server_iv, encrypted_data+(last_unit*block_size), block_size ); // !!
return ret;
}