본문 바로가기

해킹/리버싱

[reversing.kr] easyELF

안녕하세요? 오늘은 EasyELF라는 문제를 풀어봤어용!

그러면 저와 함께 풀어볼까요??

찡긋!

Easy_ELF를 실행해줄까용??

"안녕!" 이라고 써줬는데, 바로 틀렸다면서 종료 해버리네요..

싸가지 없는 녀석!

그러면 gdb로 열어볼까요?

헉!

헉! strip 되어있나? main이 안뜨네용

그러면 start를 눌러서 들어가 볼까요??

어떤 루틴이 존재하네요!

그리고 연달아서, 세 개의 함수와 아래의 cmp eax, 0x1을 보아하니,,

첫 번째 함수는 init 문장 출력

두 번째 함수는 read

세 번째 함수는 key auth를 하는 것을 예측할 수 있네요!

히히 딱 걸렸어~~

그러면 세 번째 함수에 들어가서 어셈을 좀 읽어볼까요?

0x804a021에서 1byte를 읽어오고 있어요! 흠.. 갑자기 어떤 주소가 나온 것도 모자라, 1로 끝난다고? 이거 딱봐도 사용자 입력의 두 번째 글자 이겠네요! 아니면 말고요~

두 번째 글자와 0x31('1')을 비교하고 있네요! 만약 아니라면 eax에 0을 저장하고 어딘가로 뛰는 걸봐서, return하는 거겠죠?

그럼 일단 두 번째 글자는 '1'이에요,

그러면 계속해서 읽어볼까요?

그리고 첫 번째 글자에 0x34를, 세 번째 글자에 0x32를, 네 번째 글자에 0xffffff88을 XOR하고 있네요!

왜인지는 모르겠지만, 일단 더 읽어봅시다

그 다음엔 이런 루틴이 나오는데, 다섯 번째 글자는 0x58('X')이 되어야 해요. 그러면 현재

-1--X~~~

가 되겠네요??

그 바로 다음 분기인데, 여섯 번째 글자는 NULL이 되어야 하니. key는 총 5글자가 되겠다는 거네요?? 그러면 5글자

-1--X

확정!

그 다음 분기에서는 세 번째 글자가 0x7c가 되어야 한다고 해요, 헉! 하지만 세 번째 글자는 이전에 0x32로 xor을 했기 때문에,

세 번째 글자는 0x7c에 0x32를 XOR한 0x4e('N')가 되어야 해요~~

그러면 지금까지는

-1N-X

흠.. 여기까지 왔으면, 벌써 'L1NUX'일 것 같네요! 어차피 그후에도 방식은 같을테니 L1NUX로 써줍시다~~ 그러면 정답~

훗 EasyELF?? EZ~

그럼 전 이만~ 다음에 봐용~

'해킹 > 리버싱' 카테고리의 다른 글

[reversing.kr] Direct3D FPS  (1) 2021.05.07
[reversing.kr] position  (0) 2021.04.09