케이스1 (ret) 케이스2 (br) 케이스3 (b) 케이스4 (b) 케이스5 (br) 케이스6 (ret)
IDA 7.7 분석 안됨 분석 안됨 분석 안됨 정상 분석 됨 정상 분석 됨 분석 꼬임
Binary Ninja 3.3 분석 안됨 정상 분석 됨 정상 분석 됨 정상 분석 됨 정상 분석 됨 분석 꼬임

 

케이스 1 (ret)

int main(int argc, char const *argv[])
{
    printf("hello world!\n");
    __asm__ volatile(
        "adr x30,0x0 \n\t"
        "add x30,x30,0xc \n\t"
        "ret \n\t"
        );
    printf("test 1\n");
    printf("test 2\n");

    return 0;
}

IDA 7.7 분석 결과

 
방해 asm 이후 함수가 끝난 것으로 표시됨

분석이 asm 이후 되지 않음
분석이 asm 이후 되지 않음

Binary Ninja 3.3.3996 분석 결과

방해 asm 이후 함수가 끝난 것으로 표시됨
분석이 asm 이후 되지 않음

 

케이스 2 (br)

int main(int argc, char const *argv[])
{
    printf("hello world!\n");
    __asm__ volatile(
        "adr x30,0x0 \n\t"
        "add x30,x30,0xc \n\t"
        "br x30 \n\t"
        );
    printf("test 1\n");
    printf("test 2\n");

    return 0;
}

IDA 7.7 분석 결과

분석이 asm 이후 되지 않음

Binary Ninja 3.3.3996 분석 결과

정상적으로 분석 됨

케이스 3 (b)

#include <ctime>
int main(int argc, char const *argv[])
{
    printf("hello world!\n");
   
    // 항상 false가 되어야 실행되지 않는다.
    // 최적화 되지 않기 위해 불투명 술어로 코딩한다.
    if (rand() < 0) {
        __asm__(
            "b 0x4\n"
            ".long 12345678\n"
        );
    }
    printf("test 1\n");
    printf("test 2\n");

    return 0;
}

IDA 7.7 분석 결과

함수 전체가 분석 안됨

Binary Ninja 3.3.3996 분석 결과

정상적으로 분석 됨

 

케이스 4 (b)

#include <ctime>
int main(int argc, char const *argv[])
{
    printf("hello world!\n");
   
    // 항상 false가 되어야 실행되지 않는다.
    // 최적화 되지 않기 위해 불투명 술어로 코딩한다.
    if (rand() < 0) {
        __asm__(
            "b 0x4\n"
            "add sp,sp,#0x100\n"
            "add sp,sp,#0x100\n"
        );
    }
    printf("test 1\n");
    printf("test 2\n");

    return 0;
}

IDA 7.7 분석 결과

정상적으로 분석 됨

Binary Ninja 3.3.3996 분석 결과

정상적으로 분석 됨

케이스 5 (br)

int main(int argc, char const *argv[])
{
    printf("hello world!\n");

    if (rand() < 0) {
        __asm__(
            "mov x8,#0x1\n"
            "adr x9, #0x10\n"
            "mul x8, x9, x8\n"
            ".long 0x12345678\n"
            "br x8\n"
        );
    }
    printf("test 1\n");
    printf("test 2\n");

    return 0;
}

IDA 7.7 분석 결과

정상적으로 분석 됨

Binary Ninja 3.3.3996 분석 결과

정상적으로 분석 됨

케이스 6 (ret)

int main(int argc, char const *argv[])
{
    printf("hello world!\n");

    if (rand() < 0) {
        __asm__(
            "adr x8,#0xc\n"
            "mov x30,x8\n"
            "ret\n"
        );
    }
    printf("test 1\n");
    printf("test 2\n");

    return 0;
}

IDA 7.7 분석 결과

분석 꼬임

Binary Ninja 3.3.3996 분석 결과

분석 꼬임

 

 

+ Recent posts