ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (627)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (14)
      • dreamhack (13)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

[reversing.kr] Easy Crack write-up
write-up(rev)/reversing.kr

[reversing.kr] Easy Crack write-up

2023. 8. 18. 14:19

실행해주면 비밀번호를 입력하는 창이 나오고

입력 값이 틀리면 틀렸다는 창이 나옵니다.

 

IDA로 까서 입력 값을 비밀번호랑 비교하는 부분을 찾아줍니다.

우선 GetDlgItemTextA 함수로 eax가 가리키는 주소에 데이터를 받습니다.

.text:0040109B                 mov     edi, [esp+6Ch+hDlg]
.text:0040109F                 lea     eax, [esp+6Ch+String]
.text:004010A3                 push    eax             ; lpString
.text:004010A4                 push    3E8h            ; nIDDlgItem
.text:004010A9                 push    edi             ; hDlg
.text:004010AA                 call    ds:GetDlgItemTextA

 

이후 cmp 명령들을 찾아줍니다.

.text:004010B0                 cmp     [esp+68h+var_63], 61h ; 'a'
.text:004010B5                 jnz     short loc_401135
...
.text:004010B9                 lea     ecx, [esp+6Ch+Str1]
.text:004010BD                 push    offset Str2     ; "5y"
.text:004010C2                 push    ecx             ; Str1
.text:004010C3                 call    _strncmp
.text:004010C8                 add     esp, 0Ch
.text:004010CB                 test    eax, eax
.text:004010CD                 jnz     short loc_401135
...
.text:004010D1                 mov     esi, offset aR3versing ; "R3versing"
.text:004010D6                 lea     eax, [esp+70h+var_60]
.text:004010DA                 mov     dl, [eax]
.text:004010DC                 mov     bl, [esi]
.text:004010DE                 mov     cl, dl
.text:004010E0                 cmp     dl, bl
.text:004010E2                 jnz     short loc_401102
.text:004010E4                 test    cl, cl
.text:004010E6                 jz      short loc_4010FE
.text:004010E8                 mov     dl, [eax+1]
.text:004010EB                 mov     bl, [esi+1]
.text:004010EE                 mov     cl, dl
.text:004010F0                 cmp     dl, bl
.text:004010F2                 jnz     short loc_401102
.text:004010F4                 add     eax, 2
.text:004010F7                 add     esi, 2
.text:004010FA                 test    cl, cl
.text:004010FC                 jnz     short loc_4010DA
...
.text:0040110D                 cmp     [esp+68h+String], 45h ; 'E'
.text:00401112                 jnz     short loc_401135
.text:00401114                 push    40h ; '@'       ; uType
.text:00401116                 push    offset Caption  ; "EasyCrackMe"
.text:0040111B                 push    offset Text     ; "Congratulation !!"

 

위 내용들을 종합해보면 아래 내용을 만족해야 합니다.

[esp+68h+var_63] == 'a'

[esp+6Ch+Str1] == '5y'

[esp+70h+var_60] == 'R3versing'

[esp+68h+string] == 'E'

 

주소 순으로 정렬해보면 다음과 같습니다.

.text:00401080 String          = byte ptr -64h
.text:00401080 var_63          = byte ptr -63h
.text:00401080 Str1            = byte ptr -62h
.text:00401080 var_60          = byte ptr -60h

[esp+0x04] == 'E'

[esp+0x05] == 'a'

[esp+0x0A] == '5y'

[esp+0x10] == 'R3versing'

 

주소가 연속되지 않고 끊어져 있는데

왜 그런지 알기 위해 디버깅을 해보겠습니다.

'5y'를 비교하기 전 push 명령이 있었기 때문에 esp가 -4 되어서 A를 더했던 것 이었습니다.

 

이후 'R3versing' 문자열을 비교하는 것도 입력한 5번째 문자열부터 비교하는 로직입니다.

 

결론적으로 esp가 고정값이 아니기 때문에

직접 디버깅을 통해 알아내는 방법이 더 유효했습니다.

 

그렇게 문자열 순서대로 어떤 값과 비교되는지를 종합해보면

Ea5yR3versing이 키 값이 되는 것을 알 수 있습니다.

'write-up(rev) > reversing.kr' 카테고리의 다른 글

[reversing.kr] Replace write-up  (0) 2024.06.01
[reversing.kr] Music Player write-up  (0) 2024.05.31
[reversing.kr] Easy ELF write-up  (0) 2023.08.30
[reversing.kr] Easy Unpack write-up  (0) 2023.08.30
[reversing.kr] Easy Keygen write-up  (0) 2023.08.18
    'write-up(rev)/reversing.kr' 카테고리의 다른 글
    • [reversing.kr] Music Player write-up
    • [reversing.kr] Easy ELF write-up
    • [reversing.kr] Easy Unpack write-up
    • [reversing.kr] Easy Keygen write-up
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바