안녕하세요? 오늘은 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 |