Predicate : 술부 Opaque : 불투명한, 알거나 이해하기 어려운 Opaque predicate는 if문에서 참/거짓 조건을 이용하여 원하는 부분을 수행하도록 하고, 실행되지 않는 부분에 필요 없고 장황한 코드를 넣어 코드 해석을 방해하는 난독화 기법이다.

1. 연습 결과

난독화 전
int func(int a, int b)
{
    int ret = 0;
    ret = a + b;
    return ret;
}

난독화 후

int func(int a, int b)
{
    int x = 0;
    int y = 0;
    int ret = 0;
    if(x != 0)
    {
        x = x*x;
        while(0)
        {
            y += x;
        }
        x += y;
    }
    ret = a + b;
    return ret;
}

pretty print 단계에서 쓰레기 코드를 삽입하도록 했는데, 미리 작성한 String을 function context 의 compound context 내부에 삽입다.

2. 느낀 점

필요 없는 코드를 만들려고 의도한 적은 없기 때문에 Garbage code를 어떻게 작성해야 프로그램 해석을 어렵게 만들지 모르겠다. 난독화할 코드가 길고 복잡하면 사이사이에 교묘하게 삽입한 Opaque predicate가 효과적일 것이라고 생각하였다. 쓰레기 코드를 직접 작성하지 않아도 자동으로 삽입해주는 방법으로 만들고 싶다.