본문 바로가기

Project/Flash CVE 1-day Analysis

CVE-2015-0311 분석 5일차

 메모

 enum CompressionAlgorithm

{

    k_zlib,    // 0

    k_deflate, // 1

    k_lzma     // 2   

};


if (IsShared() || ( m_subscribers.length() > 0 )) {

toplevel()->argumentErrorClass()->throwError(kAPICannotAcceptSharedByteArray);

}


// Snarf the data and give ourself some empty data

        // (remember, existing data might be copy-on-write so don't dance on it)

        uint8_t* origData                       = m_buffer->getArray();

        bool origCopyOnWrite                    = m_buffer->getCopyOnWrite();

        uint32_t origCap                        = m_buffer->getCapacity();

        uint32_t origLen                        = m_buffer->getLength();

        uint32_t origPos                        = m_position;

        MMgc::GCObject* origCopyOnWriteOwner    = m_copyOnWriteOwner;


if (origLen) {// empty buffer should give empty result

switch (algorithm) {

case k_lzma:

UncompressViaLzma(origData, origCopyOnWrite, origLen, origCap, origPos, origCopyOnWriteOwner);

break;

case k_zlib:

default:

UncompressViaZlibVariant(algorithm, origData, origCopyOnWrite, origLen, origCap, origPos, origCopyOnWriteOwner);

break;

}



if (IsShared() || ( m_subscribers.length() > 0 )) {

toplevel()->argumentErrorClass()->throwError(kAPICannotAcceptSharedByteArray);

}


// Snarf the data and give ourself some empty data

        // (remember, existing data might be copy-on-write so don't dance on it)

        uint8_t* origData                       = m_buffer->getArray();

        bool origCopyOnWrite                    = m_buffer->getCopyOnWrite();

        uint32_t origCap                        = m_buffer->getCapacity();

        uint32_t origLen                        = m_buffer->getLength();

        uint32_t origPos                        = m_position;

        MMgc::GCObject* origCopyOnWriteOwner    = m_copyOnWriteOwner;

if(origLen){

switch (algorithm) {

case k_lzma:

CompressViaLzma(origData, origCopyOnWrite, origLen, origCap, origPos, origCopyOnWriteOwner);

break;

case k_zlib:

default:

CompressViaZlibVariant(algorithm, origData, origCopyOnWrite, origLen, origCap, origPos, origCopyOnWriteOwner);

break;

}

}



얻은 것들:

1. 문자열 및 함수 참조를 이용한 (대충 구조 및 소스코드를 알때) 함수 파악

2. pykd + windbg


힘들었던 점:

1. 여전히 후킹이 되지 않는다. Object의 toString() 을 구한것 같은데도... ("[Object","]"라는 문자열을 참조하는 함수들을 찾아 조사 해보면 된다 - 두가지가 있음

2. 브포는 걸리는데 AVMCore에서만 걸리고 toString에선 안걸림~


빡쳤던 점:

액티브엑스 디버그를 설치해도 ocx파일이 리컴파일되서 오프셋이 다 이상해진다. 내 idb ㅠㅠ