[난독화]MBA Obfuscation

less than 1 minute read

1. MBA란?

본 블로그에서 공부한 난독화 기법은 대부분 control flow obfuscation이다. 이 글에서는 data flow obfuscation을 다루겠다.

MBA는 Mixed Boolean Arithmetic 의 약자이다. 풀네임을 보고도 유추할 수 있겠지만, Boolean이 섞인 산술이다. 이것의 예로 다음과 같은 그림이 있다.

image

2. 다양한 MBA expression 기법

image

이 그림에서 3번째 기법은 좀 이상한 것 같다. 실제로도 위에 적힌대로 코드를 돌려보면 값이 비정상적으로 출력된다.

내 생각에는 x+y-(x or y)로 고쳐야 할 것 같다.

image

이렇게 여러 논문에 제시된 정형적인 기법이다.

and와 or 연산 뿐만아니라 shift연산을 활용할 수도 있다.

3. 구현중인 난독화기에 적용

먼저 앞서 조사한 기법을 c코드로 구현하기 위해서 c에서의 연산자를 생각해보았다. and와 or, xor 등의 연산이 있는데 논리연산(&&, ||)과 비트연산(&, |, ^)중에 무엇을 사용해야 하는지 고민해보았다. 직접 테스트해보았는데 아래와 같은 결과가 나왔고, 비트연산을 사용해야 한다는 결론이 났다. image

코드에 난독화를 적용한 결과

image

먼저 난독화기에 구현한 결과는 위의 그림과 같다. exitExpr에서 expr ‘+’ expr 과 같이 산술연산을 나타내는 규칙에서 사용하도록 하였다. 그런데 다른 팀원도 +에 대한 난독화를 구현해서 위치가 겹친다. 이 부분은 더 고민해봐야겠다.

그리고 지금은 and와 or등의 연산에 사용되는 기법이 고정되어있는데, 이를 랜덤으로 기법을 추가하거나 추가하지 않는 방법을 더 고민해봐야겠다.