[역난독화]gcc optimize option 적용하여 컴파일한 결과[1/2]

less than 1 minute read

gcc 컴파일 옵션에 -o 적용한 결과

gcc 컴파일 옵션에 -o, -O1, -O2, … 과 같은 옵션이 있다. 이 옵션을 적용하여 optimize된 컴파일 결과를 얻을 수 있다. 이번 글에서는 여러 옵션 중 -o 만 실험을 진행하였다. 이유는 -O2 등의 옵션을 적용시 컴파일이 되지 않았기 때문이다… 이건 다시 해결해봐야겠다.

image

위의 코드가 원본코드이다. 이번 실험에서는 원본코드를 여러 난독화 방법으로 난독화해보고, -o 옵션을 적용한 결과를 살펴보도록 하겠다.

원본 코드 [-o]

먼저 원본코드를 -o옵션으로 컴파일하고, olly dbg로 바이너리를 확인한 결과이다. origin_o

파라미터 두개의 값을 가져오고 더해서 리턴하는 함수의 동작을 쉽게 알 수 있다.

MBA 난독화 적용 [-o]

image

원본 코드에 MBA 난독화를 적용한 코드이다. 다음 그림은 본 프로그램을 -o옵션으로 컴파일하고 olly dbg로 열어본 결과이다.

mba-o

dynamic opaque predicate 난독화 적용 [-o]

image

원본 코드에 dynamic opaque predicate 난독화를 적용한 코드이다. 다음 그림은 본 프로그램을 -o옵션으로 컴파일하고 olly dbg로 열어본 결과이다.

dynamic-o

소스코드에는 if문이 사용되었는데, 옵티마이즈 옵션을 적용하여 컴파일 한 결과를 보면 무언가 비교하교 점프하는 분기문이 전혀 보이지 않는다. 아마 제곱하면 당연히 0 이상인 값을 조건으로 가지고 있어서 그런거 같은데, gcc가 어디까지 옵티마이즈하는지 조사해봐야겠다.