snd-reversingwithlena-tutorial02.tutorial

min_fo·2023년 4월 29일
0
post-thumbnail

루나 튜토리얼 2는 직접 어셈블리어를 분석하여서 암호가 들어있는 파일을 생성하는 것이다.

eax는 함수의 결과 값을 저장한다. 만약 CreateFileA의 리턴값이 FFFFFFFF이면,jne에서 점프하지 못할 것이고 이는 Evalution period out of date~라는 메시즈를 띄우고 프로세스를 종료할 것이다.

참고로 함수가 실패하면 INVALID_HANDLE_VALUE가 반환됩니다. INVALID_HANDLE_VALUE는 -1 (FFFFFFFF) 입니다.

함수의 인자들을 분석해보면 CreateFileA 함수는 Keyfile.dat을 찾아서 open할려고 했지만 존재하지 않기에 -1을 리턴한것입니다. 그렇기에 keyfile.dat을 만들어줘야 합니다.

ReadFile함수의 인자를 넣는 모습이다. 인자는 순서대로 lpOverlapped, lpNumberOfBytesRead, nNumberOfBytesToRead, lpBuffer, hFile 순서이다. 함수 호출 규약을 공부해 보면 왜 인자가 반대로 들어가는 지 알 수 있다.

주소 40211A는 읽은 내용을 저장하는 주소이고 402173은 얼만큼 읽은지에 대한 바이트이다.
그리고 46인자는 최대 얼만큼 읽을 지에 대한 숫자이다.


결론적으로 해석하면 402173은 파일을에 담겨 있는 숫자이고 이는 16(16진수로 10)개의 글자를 넘으면 된다. 그후 40211A에 있는 내용을 가져와서 al(1바이트)에 넣고 null(0)이란 비교한다. 이를 비효하는 이유는 문자열이 끝나는지를 확인하기 위해서이다.
그다음 아스키코드 47 즉 G라는 문자열과 비교한다. 만약 G라면, esi와 ebx모두 상승하고 아니면 ebx만 상승한다. 그 후 (ebx + 문자열 제일 앞주소)를 하여 그다음 문자를 읽는다.
다시 위 내용을 반복한다. 이것은 null문자가 나올때까지 반복한다. null 문자가 나오면 esi를 8과 비교하여 G가 8번 이상있었는지 확인하고 만약 8번 이상이라면 jl을 지나서 401205 주소로 jmp한다.

401205 주소는 위와 같이 성공 메시지가 있는 곳이다.

profile
포렌식을 공부하는 학생입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN