달력

5

« 2024/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

'position'에 해당되는 글 1

  1. 2017.07.07 [문제풀이] reversing.kr - Position


 문제를 풀기 전에 ReadMe.txt 파일을 보도록 하자 .




문제의 요지는 프로그램에서 시리얼 넘버가 76876-77776 과 같을 때의 이름을 찾아라.

위의 파일로 보아 끝자리는 p로 끝나며 총 4글자임을 짐작해볼 수 있겠다. 



일단 시리얼 넘버를 넣어놓고 분석을 진행해보자. 

우선 이름을 입력하는 곳에 이름을 입력할 경우 기본적인 검증을 진행한다. 



복잡하지 않으니 그냥 말로만 간단히 적도록 하겠다.

1. 문자열이 4개로 구성되어 있는가 ? 

2. 입력된 글자가 알파벳 소문자로 구성되어 있는가 ?

3. 입력된 문자열 중 중복된 문자가 존재하는가 ?


위 사항을 만족하면 입력된 이름을 기준으로 시리얼과 매칭 작업을 진행하게 된다. 


로직은 첫번째 글자와 세번째 글자가 동일하게 적용되고

두번째 글자와 네번째 글자가 동일하게 적용된다. 



이것이 첫번째/세번째 글자를 이용한 로직 


EBP-20 = (CL & 1) + 5;           - 1 

EBP-1D = ((BL >> 3) & 1) + 5  - 2

EBP-1F = ((CL >> 1) & 1) + 5  - 3

EBP-1E = ((DL >> 2) & 1) + 5  - 4

EBP-1C = ((AL >> 4) & 1) + 5  - 5




이것이 두번째/네번째 글자를 적용한 로직 


BL       = (((BL >> 2) & 1) +1)   - 1

EBP-25 = ((DL >> 3) & 1) + 1   - 2

EBP-24 = ((AL >> 4) & 1) + 1   - 3

EBP-28 = (CL & 1) + 1   - 4

EBP-27 = ((CL >> 1) & 1) + 1   - 5



위에 나온 순서대로 첫번째 글자와 두번째 글자, 세번째 글자와 네번째 글자를 통해 나온 값을 더해서 시리얼 넘버를 생성하고 입력된 시리얼 넘버와 비교한다.

단순 3글자라서 브루트포스도 가능할 거 같긴 한데 (최대 약 3^26승 , 동일 문자열 제외/맞나?- -) 그럼 의미가 없으니 이렇게 진행해보았다.

사실 애플리케이션에 브루트포싱을 자동화돌리는 건 나한텐 의미있을수도 있겠다. 

해본적이 없기 때문에 이 또한 도전이 되리..


위의 경우의 수를 직접 판단해서 답을 작성해도 되지만,

간단히 프로그램 하나짜면 금방 답을 얻을 수 있다.



:
Posted by einai