[Reversing Crackme] Crackme2 해설 + 추가내용

1591 단어 crackmecrackme

OLLYDBG의 역순


  • GetDlgItemTextA:매개변수 nID의 아이디를 갖는 컨트롤의 문자열을 받아서 두 번째 매개 변수 lpString에 대입해 주는 함수
  • 입력 컨트롤이 아닌 경우, 예를 들어 버튼 컨트롤이라면 버튼의 이름을 가져온다.

#원래 내용
UINT GetDlgItemTextA(
HWND hDlg,
int nIDDlgItem,
LPSTR lpString,
int cchMax );

#올리디버그에서는...
int cchMax );
LPSTR lpString,
int nIDDlgItem,
HWND hDlg,
UINT GetDlgItemTextA(




  • hdlg: 컨트롤이 포함된 대화상자에 대한 핸들
  • nlDDlgItem:제목이나 텍스트를 검색할 컨트롤의 식별자
  • lpString:제목 또는 텍스트를 수신할 버퍼
  • cchMax:lpString이 가리키는 버퍼에 복사할 문자열의 최대 길이(문자)/ 만일 null값을 포함해서 문자열의 길이가 넘어간다면 잘림.




  • GetDlgItemText함수를 분석해본다면 infiscap이라는 대화상자에 대한 핸들이름이 hWnd에 들어가고 텍스트를 검색할 컨트롤의 식별자인 ID가 들어간 후에 제목 또는 텍스트를 수신한 버퍼, lpString이 가리키는 버퍼에 복사할 문자열의 최대 길이(문자)라고 했으니 최대 “80”개의 문자까지 들어갈 수 있는 Count로 해석할 수 있다.

  • hdlg 창의 이름과 동일하게 아스키코드로 적혀져 있음

  • 카운트는 총 80개의 문자만 저장할 수 있고 그 이상은 잘린다고 되어있음
    그래서...81개의 문자를 입력해봄




위에서 적혀진 대로 총 80개의 문자만이 기입되고 나머지는 잘린 상태로 저장이 되었다. 그렇다면 이 GetDlgItemTextA함수는 결과적으로 64의 컨트롤 ID를 가진, 버퍼를 통해 우리가 입력한 값을 저장하는 함수가 된다. 그래서 내가 만일 "HackFun1"이라는 문자를 입력값에 넣었을 시 GetDlgItemTextA함수를 지나고 그 밑에 바로 이렇게 표현됨

좋은 웹페이지 즐겨찾기