2015년 11월 18일 수요일

abexcm 8


리버싱
- crackme(abexcm8) -



프로그램 실행화면.
시리얼을 입력받는 창이뜨고 잘못된 시리얼을 입력하면 다음과 같이 출력된다.


올리디버거로 프로그램을 실행시키고 잘못된 시리얼이라고 출력하는 곳에 BP를 건다.
search fortext strings 검색을 통해 BP를 건다.


그리고 BP를 건 코드 위쪽의 입력받은 값과 정확한 시리얼을 비교하는 곳을 찾아보았다.
조금 위로 올라가보니 TEST를 통해 비교하는 곳을 찾았다.


아래그림에서 보이는 코드를 자세히 살펴보았다.
0040118F에서 입력받은 시리얼을 EDI에 넣고
00401197주소부터 입력받은 값을 한자리씩 EDI+1을 해서 불러온 후
AND연산을 하고 JNZ를 하는 것을 볼 수있다.
JNZ는 제로가 아닐 때 점프하는 구문으로 하나씩 비교해서 맞는 시리얼이 아닐 경우 004011DB로 점프하는 코드이다.


그리고 004011DB는 Error 문자열을 출력하는 주소이다.


비교하는 문자는 0AD, 9A, 97, 0BF, 5FC5, 0D6 6문자이다.
이 문자와 AND 연산을 통해 0을 만들어야 함으로 해당 문자의 보수를 찾아야한다.
 
AD=10101101 01010010 : 52=R
9A=10011010 - 01100101 : 65=e
97=10010111 01101000 : 68=h
BF=10111111 01000000 : 40=@
C5=11000101 00111010 : 3A=:
D6=11010110 00101001 : 29=)


성공

댓글 없음:

댓글 쓰기