[Reversing.kr] Position




뭐 프로그램은 대충 이런식으로 생겨있고 Wrong이라는 메시지가 도움이 될 것 같습니다. All referenced Strings를 보면



Correct와 Wrong 부근의 조건을 확인하면 되겠네요.




sub_0E1740의 return값이 false이면 Wrong, true이면 Correct!가 됩니다. sub_0E1740의 분석은 IDA로 진행했습니다. 일단 name이 4글자 이상인지, 그리고 name이 전부 알파벳 소문자로 이루어졌는지 확인합니다. 그리고 name의 각 글자 중에 겹치는 글자가 없는치 체크합니다.



그리고 serial의 5번째 글자가 '-'인지 체크한 후, name의 0번째와 1번째 글자를 읽어들여 bit를 뽑아내 v8, v59, v53, v55, v57, v45, v51, v47, v10, v49, v11에 저장하고 itow 함수로 값을 글자로 변경해 temp에 작성하고, 그 값과 serial의 값을 10번에 걸쳐 비교합니다.



10번의 비교를 전부 통과하면 1(true)가 반환됩니다. 대충 보면 serial이 6이면 두 비트가 0이고 7이면 둘 중 어느 한 비트가 1이고 8이면 두 비트가 전부 1인 상황이긴 한데 하나하나 따라가는게 귀찮아 실제로 역연산을 다 수행해도 되지만 가능한 name의 종류가 26*26*26 = 대략 18000개밖에 되지 않으므로 그냥 모든 케이스에 대해 비교하는 간단한 파이썬 코드를 만들어 문제를 해결했습니다.(Python 3.6)







'워게임 > Reversing.kr' 카테고리의 다른 글

[Reversing.kr] Ransomware  (0) 2017.12.31
[Reversing.kr] Direct3D FPS  (0) 2017.12.30
[Reversing.kr] Position  (0) 2017.12.30
[Reversing.kr] ImagePrc  (0) 2017.12.29
[Reversing.kr] Replace  (0) 2017.12.29
[Reversing.kr] Music Player  (0) 2017.12.29
[Reversing.kr] Easy Unpack  (0) 2017.12.29
  Comments
댓글 쓰기