*올리디버거 1.1 버전으로 사용합니다.
소스코드 없이, exe파일로 디버깅을 해보겠습니다.
우선 예제 파일을 열어볼게요.
해당 파일은 크랙연습용 공개파일입니다.
이렇게 확인을 누르면, 에러메시지창이 뜹니다.
올리디버거로 열어보겠습니다.
해당 코드윈도우부분을 보시면 매우 간단한 것을 알 수 있습니다.
이 아래부분은 00,,, 밖에 없습니다.
코드가 간단하니 이해하기도 상대적으로 쉬울 것이라고 예상해봅니다.
stub code가 없는것으로 보아 이 파일은 어셈블리로만 작성이 된 코드입니다.
맨처음에 실행되는 것은 messagebox A 함수입니다.
실행시에 첫 화면이 뜨고, 이후 에러메시지가 뜬 창이 하나 더 있었으니 메시지박스 함수가 하나 더 있겠죠
아래를 보니 두개가 더 있네요.
파란네모부분은 기존에 보이던 에러메시지 창이고,
빨간네모부분은 텍스트부분을 보니 성공메시지 창이겠네요.
그럼 우리가 해야할 것은 성공창을 띄우는 것이겠군요!
코드를 더 자세히 살펴보겠습니다.
빨간 네모를 먼저 보면,
첫 CALL 부분의 주소로 가면 MessageBox부분의 API함수로 호출이 됩니다.
다시 401013으로 돌아와서,
PUSH를 했는데 그 부분에는 RootPathName이 C드라이브로 되어있습니다.
그리고 한번더 API함수부분으로 호출합니다.
GetDriveTypeA로 호출이 되고, 리턴값이 3입니다.
3인 이유는 예전 컴퓨터로 거슬러가서, 1은 일반 플러피디스크, 2가 cdrom, 3이 하드디스크라고 합니다.
그래서 3!
레지스터 중, EAX라는 레지스터는 API함수값을 리턴해줍니다. 그래서 EAX =3; 이 되겠습니다.
아래로 쭉쭉 감소와 증가, 점프를 하고 조건분기부분을 보겠습니다. (파란네모)
여기서 CMP는 비교를 하라는 뜻입니다.
위에서 설정되어있는 것은 EAX=1;, ESI=2; 로 되어있으니 비교해서는 같지가 않습니다.
다음 명령어는 두 값이 같을때, 해당 주소로 점프를 하라고 되어있습니다.
값이 같지않으니 그냥 다음 주소로 넘어가겠습니다.
그래서 실패 창이 뜨는 것으로 나왔음을 알게 되었습니다.
cracking 1번 방법
위 코드 분석을 통해 우리가 성공메시지창이 뜨도록 하려면,
비교함수부분을 없애서 아주 간단하게 해결이 됨을 유추할 수 있습니다.
저 부분의 코드를 점프로 바꿔주면 되겠습니다.
이후 Copy to Excutable 저장하고 추출합니다.
성공메시지로 뜨는 것을 확인할 수 있습니다.
cracking 2번째 방법
위 코드를 보았을 때, 비교를 해서 같으면 성공메시지창으로 이동을 합니다.
그럼 그 두개를 같은 값으로 만들어주면 올바른 곳으로 이동이 가능하겠습니다.
EAX=3에서 시작하고, ESI는 40101D에서부터 만들어집니다.
EAX는 총 두번 감소가 되고, ESI는 증가가 3번이 됩니다. (40101D~ 401026주소부분이 증가,감소부분)
그래서 CMP EAX,ESI부분에서 비교를 할때 값이 같지 않으므로
그 전에 EAX감소 부분을 하지않고 증가를 시키면 둘다 3으로 값이 같아집니다.
코드를 수정해주면 됩니다.
--> 이렇게 수정 후 다시 실행시켜보았는데, 왜인지 모르겠지만 계속 에러함수로 넘어갑니다.
cracking 3번째 방법
다른방법을 찾기로 하고, 단순하게 비교대상을 같게 하면 되지않나 싶어서 시도해보았습니다.
비교대상의 값이 같음을 확인하는 것이니까,
EAX와 EAX를 비교하면 당연히 참이 나오는 것으로 변경하였습니다.
--> 성공!
'study > 악성코드분석&리버싱' 카테고리의 다른 글
악성코드 분석- 기초 정적 분석, PE파일(2) (2) | 2020.04.10 |
---|---|
악성코드 분석- 기초 정적 분석, PE 파일 (0) | 2020.04.09 |
Reversing Theory- little endian (4) | 2020.04.02 |
Reversing Basic- helloworld.exe (2) | 2020.03.27 |
Reversing Basic- ollydbg 기본 명령어 (2) | 2020.03.26 |