'오류 정정'에 해당되는 글 1건

  1. 2010.05.26 [ CodeEngn Malware Analysis ] level 3

2010.05.26 11:25 WarGame


level 3도 주어진 소스를 보고

그 소스가 의도한 것이 무엇인지 맞추는 문제입니다



level1,2 에 비해서는 짧은 코드군요

천천히 분석해봅시다

먼저 unsigned short 타입의 배열과 길이를 받아옵니다

for 문이 있는 5-6 번째에서는

길이에서 1bit 만큼 오른쪽으로 이동시키고 value 에 data를 더해줍니다


이게 무슨 소릴까요

예를 들면,

3 = 011 -> 01 = 1

4 = 100 -> 10 = 2

5 = 101 -> 10 = 2

6 = 110 -> 11 = 3

대충 감이 오시나요?

길이를 절반으로 나누고 있죠

홀수인 경우라면 나머지를 버리구요

그 다음엔 어떤 연산이 일어나나 볼까요?

if 문에서 홀수인 경우에 한하여 추가연산을 해주고 있습니다

이는 홀수의 가운데 수를 8 bit 만큼 왼쪽 이동시킨다음에 value 에 더해주고 있구요

길이와 헷갈리시면 안되겠죠 ~

예를 들어,

3 = 011 -> 10000000

4 = 100 -> 00000001

입니다

9번째 줄을 보면..

65535와 and 연산을 해주고 16bit 만큼 오른쪽으로 이동한 값과 더해줍니다

이게 무슨 말인가 하면

65535는 16진수로 FFFF 입니다

value 의 전체 크기는 4byte 이구요

먼저 FFFF가 2byte 니까, value의 하위 2byte 값이 그대로 나오겠죠

거기에 2byte 만큼 오른쪽으로 이동하면, 남겨진 상위 2byte 값이 나옵니다

즉, 상위 2byte 와 하위 2byte 를 합한다

정도가 되겠군요

마지막으로 이 값을 NOT 연산 시킵니다




그런데 이 연산이 대체 무엇을 목적으로 이루어졌을까요?

넣어주는 값이 얼마가 되었던 4byte 의 value 를 리턴해줍니다

그리고 그 값은 1bit만 달라도 값이 완전히 달라질수도 있죠

오류 검출, 정정에 효과를 볼 수 있지 않을까요?

아직  감이 안오시는 분은 이 글을 참조하시면 도움이 될겁니다

http://navercast.naver.com/science/math/732

오류 검출에 포커스를 맞추시고 곰곰히 생각해보시면

떠오르는 그것이 정답입니다 :D




Posted by LinkC
이전버튼 1 이전버튼

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday30
Today7
Total328,679

달력

 « |  » 2019.5
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

최근에 받은 트랙백

글 보관함


. .