본문 바로가기

리버싱

ABEX CRACKME 1

코드설명:

이 이미지의 윗부분부터 보면 push로 인자들을 넣어주고 메시지 박스 함수를 호출하고 있습니다 messageBoxA 같은 경우엔

int MessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType );

으로 호출하는데 인자를 스택에 넣을땐 역순으로 넣어야 꺼낼떄 반대순서로 나오기 떄문에

style에서 howner순으로 인자를 전달하고 있습니다 그리고 push 402000을 보시면

402000부터 널바이트(00)까지 읽어서 인자로 전달하고 있습니다 밑에줄의 push 402012도 같은 원리로 

이렇게 메모리에서 읽어오고 있습니다

실행해보면 이렇게 정상적으로 메시지 박스가 띄워지게 됩니다

그리고 401013을 보시면 402094에서 c:\라는 문자열을 받아와서 GetDriveTypeA를 호출하고 있는데

UINT GetDriveTypeA( LPCSTR lpRootPathName )

 

호출하면 c드라이브의 타입이 반환되어서 eax레지스터에 저장되게 됩니다

이렇게 하드디스크나 ssd는 3을 반환하게 됩니다

그리고 쭉실행해보면

이렇게 esi를 총 3더하고 eax를 2빼서 EAX와 ESI가 같은지 확인하고 있습니다 

이대로 실행하면 eax와 esi가다르기떄문에

이와같이 error라고 뜹니다 이를 풀기 위한 방법은 많겠지만 저는 2가지정도만 설명할려고합니다

1.je수정

je문은 cmp EAX, ESI를 했을떄 같으면 제로플래그가 1이되는데 1일경우 점프를 하는것 입니다

그래서 cmp를 했을떄 다르더라도 무조건 점프를 하게

je를 jmp로 바꿔줍니다 (코드더블클릭후 je를 jmp로)

그러면 이렇게 맞다는 문구가 뜨게 됩니다

2.mov

mov 란 데이터를 복사해주는 명령어 입니다

이렇게 바꿔주면 esi값이 eax에 복사되어서 cmp를해도 같은값이기 떄문에 점프가 됩니다

crackme1_crack.exe
0.01MB
crackme1.exe
0.01MB

'리버싱' 카테고리의 다른 글

ABEX CRACKME 5  (0) 2020.07.04
ABEX CRACKME 4  (0) 2020.07.01
ABEX CRACKME 3  (0) 2020.06.29
ABEX CRACKME 2  (0) 2020.06.28