블로그 이전했습니다. https://jeongzero.oopy.io/
[reversing.kr] easy crack
본문 바로가기
워게임/reversing.kr

[reversing.kr] easy crack

728x90

1. 문제


1) 문제 확인

제대로된 비번을 맞추면 될것같다

3) 코드흐름 파악

int __cdecl sub_401080(HWND hDlg)
{
  CHAR String[4]; // [esp+4h] [ebp-64h]
  char v3; // [esp+8h] [ebp-60h]
  __int16 v4; // [esp+65h] [ebp-3h]
  char v5; // [esp+67h] [ebp-1h]

  String[0] = 0;
  memset(&String[1], 0, 0x60u);
  v4 = 0;
  v5 = 0;
  GetDlgItemTextA(hDlg, 1000, String, 100);
  if ( String[1] != 'a' || strncmp(&String[2], a5y, 2u) || strcmp(&v3, aR3versing) || String[0] != 'E' )
    return MessageBoxA(hDlg, aIncorrectPassw, Caption, 0x10u);
  MessageBoxA(hDlg, Text, Caption, 0x40u);
  return EndDialog(hDlg, 0);
}
------------
// a5y -> '5y'
// aR3versing -> 'R3versing' 

사실 아이다만으로도 충분히 유추가능하다. GetDlgItemTextA 라는 함수를 이용해 메시지박스에 입력한 값을 string 변수에 저장한다. 그리고 입력한 문자열의 각 문자들을 특정 값과 비교를 한다. 아마 정답은 Ea5yR3versing 이다.

2. 접근방법


x64dbg로도 간단히 봐보자

004010A3 | 50                       | push eax                                     |
004010A4 | 68 E8030000              | push 3E8                                     |
004010A9 | 57                       | push edi                                     |
004010AA | FF15 9C504000            | call dword ptr ds:[<&GetDlgItemTextA>]       |
004010B0 | 807C24 05 61             | cmp byte ptr ss:[esp+5],61                   | 61:'a'
004010B5 | 75 7E                    | jne easy_crackme.401135                      |

위 비교문이 첫번째 조건이다. 두번째 인덱스와 61 즉 'a'랑 비교한다

00401164 | F2:AE                    | repne scasb                                  |
00401166 | F7D9                     | neg ecx                                      |
00401168 | 03CB                     | add ecx,ebx                                  |
0040116A | 8BFE                     | mov edi,esi                                  | edi:"R3versing"
0040116C | 8B75 0C                  | mov esi,dword ptr ss:[ebp+C]                 | [ebp+C]:"5y"
0040116F | F3:A6                    | repe cmpsb                                   |
00401171 | 8A46 FF                  | mov al,byte ptr ds:[esi-1]                   |
00401174 | 33C9                     | xor ecx,ecx                                  |
00401176 | 3A47 FF                  | cmp al,byte ptr ds:[edi-1]                   | edi-1:"yR3versing"

두번째로 y와 edi-1 즉 입력한 3번째 인덱스 문자를 비교한다.

쭉 보다면 또 그다음 인덱스 문자를 비교하는걸 알수 있다

3. 풀이


4. 몰랐던 개념


728x90

'워게임 > reversing.kr' 카테고리의 다른 글

[reversing.kr] ImagePrc  (0) 2020.12.15
[reversing.kr] Replace  (0) 2020.12.14
[reversing.kr] Music Player.exe  (0) 2020.12.11
[reversing.kr] easy elf  (0) 2020.12.10
[reversing.kr] easy keygen  (0) 2020.12.08