Posts 3 - 다양한 난독화 기법에 대한 아이디어와 시도 (2/2)
Post
Cancel

3 - 다양한 난독화 기법에 대한 아이디어와 시도 (2/2)

이번 주에는 2에서 작성했던 코드에 오류가 있어 수정을 하고 atoi, itoa등을 이용하여 보완해 보았다. 또한 자바스크립트의 난독화 기술을 분석해 보면 좋을 것 같다고 하셔서 자바스크립트의 난독화 기술에 대해서 가볍게 조사해보았다.

타입 변환 방식 변경

JAVA에서의 타입 변환을 생각하고 난독화를 구상하다 보니 코드에 구멍이 많았다. (JAVA처럼 간단하겠지 싶어서 어려울 것 없다고 생각했는데 너무 C언어에 모르고 한 게 많아서 새로 알게 된 것이 많다ㅠㅠ) 이를 C언어에서의 문자열 선언, 타입 변환에 대하여 좀 더 공부하고 코드를 보완해 보았다. (C에서의 타입 변환)

우선 사용하고자 하는 함수는 atoi, itoa이다. 위의 포스트에서도 설명했듯, atoi를 사용하기 위해서는 char*형이 필요하다. char[1]과 같이 한 글자를 바꾸는 함수가 아니었다. 따라서 글자 하나하나를 담을 때 문자열 하나씩을 할당하여 사용해야 할 것 같다. 이때 좀 의문이 들었는데.. 그러면 난독화의 의미가 없어지지 않을까 하는 생각이 들었다.

하지만 또 알게 된 것은 숫자가 아닌 글자가 오면 그 뒤에 숫자가 있더라도 다 무시된다는 것..!! 이를 이용해서 뒤에 문자를 넣어서 복잡하게 만드는 방식으로 해야 될 것 같다.

itoa는 인자가 세 개씩이나 있는데 주목할 것은 세 번째 인자이다. 이 인자는 값의 형태가 무슨 진수일지를 결정하는데, 이번 보완에서는 10진수를 사용할 것이지만 앞으로의 변환에 2진수를 사용하여 저장하고 나중에 빼낼 때에도 2진수를 사용하면 좋을 것 같다.

함수를 분석해서 기존의 changingTypes()함수를 수정했다. char타입을 3개 있게 하는 배열로 수정하였고, 각각의 char는 동적으로 할당하여 뒤에 문자열 쓰레기값을 넣을 수 있도록 하였는데…

c 컴파일러에서 itoa를 인식을 못 한다!ㅠㅠ 찾아보니까 일반적인? 함수가 아닌 것 같다. 그래서 대체 방안으로

1
sprintf( str, "%d", i );

를 사용하였다…. 이것의 한계는 str에 동적 char타입을 넣을 수 없다는 것이다. 따라서 우선은

원본 코드

1
2
3
4
5
6
int adder(int a, int b)
{
  int result = 0;
  result = a + b;
  return result;
}

변환된 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int adder(int a, int b)
{
	int result = 0;
	result = 0;
	char str[10] = "1001qwer";
	char str2[10] = "qsd92sds";
	sprintf( str, "%d", a );
	sprintf( str2, "%d", b );

	char str3[10] = "thsisres";
	int value = 9;
	value = atoi(str) + atoi(str2);
	sprintf( str3, "%d", value );
	result = atoi(str3);
	return result;
}
  • 이번 주에 한번 해 볼 것들?
  1. sprintf외의 다른 방법은 없을까? (기존의 changingTypes()함수 업그레이드, 해결되면 2진수도 시도)

  2. 아스키코드 이용 (changingTypes()함수와 비슷하지만 아스키코드를 이용한 변환, 시도를 안해봐서 될 지 모르겠음)

  3. 마크다운….줄넘김 너무 답다.ㅂ..

This post is licensed under CC BY 4.0 by the author.

Contents

2 - 다양한 난독화 기법에 대한 아이디어와 시도 (1/2)

4 - C grammer로 전환