CDQ(Convert Dword Qword) - 4byte 연산시 8byte로 확장
CBW(Convert Byte Word) - 1byte 연산시 2byte로 확장
CWD(Convert Word Dword) - 2byte 연산시 4byte로 확장

(CBW) - idiv cl -> al / cl -> 몫:al // 나머지:ah
(CWD) - idiv cx -> ax / cx -> 몫:ax // 나머지:dx
(CDQ) - idiv ecx -> eax/ecx -> 몫:eax // 나머지:edx
- IDIV 할 때 나온다
- 부호비트를 확장하기 위해서

strcmp(앞의문자열,뒤의문자열);
-> strcmp는 앞의 문자열과 뒤의문자열을 비교를 하는 함수 , ascii코드로 하나의 문자씩 비교
-> 리턴값은 앞의문자열이 크면 -1 , 같다면 0 , 뒤의 문자열이 크면 1을 반환

결론 :
- lpcmdline에서 +3만큼 떨어진곳의 문자들을 p변수에 저장을 해서 , p변수와 LWedqn문자열을 비교하므로 ,
LWedqn문자열에서 -3만큼 떨어진곳의 문자들을 lpcmdline에 저장을 하면 조건이 일치한다
즉 , lpcmdline이 ITbank 라면 3만큼 떨어진곳의 문자들을 p변수에 저장을 하므로 , p변수는 LWedqn이 되고,
p변수와 LWedqn문자열을 비교하면 조건이 일치한다

n=33670 , m=178503 이라는 메세지를 출력하기 위해서는
sum이 33670일 때의 i값과 , sum이 178503일 때의 i값을 구해야 한다
10진수 33670 -> 16진수 8386
10진수 178503 -> 16진수 2B947
16진수 8386일 때의 i값을 구하면 n=33670이 되고 -> i의 값 : 259(10) // 103(16)
16진수 2B947일 때의 i값을 구하면 n=178503이 된다 -> i의 값 : 597(10) // 255(16)

ollydbg에서 break point를 이용해서 구하는 방법
1. 00401000 주소에 break point(F2)를 설정하고 F9를 누른다
2. sum이 수행한 다음 코드주소인 00401050주소를 우측 클릭 -> Break Point -> Conditional -> ECX == 8386
를 입력하면 00401050주소가 주황색 표시로 변한다
3. 00401000주소에서 F9(실행)을 누르게 되면 00401050 까지 실행이 된다.
4. register 창에서 ECX=8386(sum) , stack memory 창에서 EBP-58=103(i) 를 확인
5. i가 103(16) 일 때 sum이 8386(16) (10진수:33670) 이 된다
6> 다시 ctrl+F2를 눌러서 00401000 주소에 break point(F2)를 설정 후 F9를 누른다
7> 00401050주소를 우측 클릭 - Break Point -> Conditional -> ECX == 2B947 를 입력
8> 00401000 주소에서 F9를 누른다
9> register 창에서 ECX=2B947(sum) , stack memory 창에서 EBP-58=255(i) 를 확인
10> i가 255(16) 일 때 sum이 2B947(16) (10진수:178503) 이 된다

진수 변환 프로그램
- 윈도우용 계산기 프로그램을 연다 -> 보기탭 -> 프로그래머용 -> 숫자 입력 -> Hex를 누르면 16진수로 변환


  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유

댓글을 달아 주세요