int __cdecl main() 
{ 
  write(1, "Reversing.Kr Easy ELF\n\n", 23u); 
  sub_8048434(); 
  if ( sub_8048451() == 1 ) 
    sub_80484F7(); 
  else 
    write(1, "Wrong\n", 6u); 
  return 0; 
}
int sub_8048434()
{
  return __isoc99_scanf((const char *)&unk_8048650, &byte_804A020);
}
_BOOL4 sub_8048451()
{
  if ( byte_804A021 != 0x31 )
    return 0;
  byte_804A020 ^= 0x34u;
  byte_804A022 ^= 0x32u;
  byte_804A023 ^= 0x88u;
  if ( byte_804A024 != 0x58 )
    return 0;
  if ( byte_804A025 )
    return 0;
  if ( byte_804A022 != 0x7C )
    return 0;
  if ( byte_804A020 == 0x78 )
    return byte_804A023 == 0xDDu;
  return 0;
}​

scanf로 문자열 입력받고나서 xor과 if문을 통해 값을 검사하고 해당 검사 모두 패스하면 끝.

살짝 고민했던건 byte_804A020~byte_804A025까지 있는데 일단 if문 특성상 0이 아니면 모두 True처리해서 아무거나 입력하면 되는건가 했으나 플래그를 구하고나니 그건 아닌듯 싶었다가 생각해보니 \n이 있었다는게 생각났다 ㅋㅋ

저것때문에 3분정도 고민..ㅡㅠ

'Reversing > Reversing.kr' 카테고리의 다른 글

[Reversing.kr] Easy Keygen  (0) 2019.08.13

 이 포스트를 포함해서 앞으로 올라오는 몇몇 포스트는 기존 포스팅 순서에 신경쓰지 않고 올라와서 굉장히 뜬금없을 수 도 있고 굉장히 대충대충 써져있을 수 있습니다. 개인적인 사정이 있어 급하게 올린것이고 추후 수정할 예정입니다. :)

...더보기
int __cdecl main(int argc, const char **argv, const char **envp)
{
  signed int v3; // ebp
  signed int i; // esi
  char v6; // [esp+Ch] [ebp-130h]
  char v7; // [esp+Dh] [ebp-12Fh]
  char v8; // [esp+Eh] [ebp-12Eh]
  char v9; // [esp+10h] [ebp-12Ch]
  char v10; // [esp+11h] [ebp-12Bh]
  __int16 v11; // [esp+71h] [ebp-CBh]
  char v12; // [esp+73h] [ebp-C9h]
  char v13; // [esp+74h] [ebp-C8h]
  char v14; // [esp+75h] [ebp-C7h]
  __int16 v15; // [esp+139h] [ebp-3h]
  char v16; // [esp+13Bh] [ebp-1h]

  v9 = 0;
  v13 = 0;
  memset(&v10, 0, 0x60u);
  v11 = 0;
  v12 = 0;
  memset(&v14, 0, 0xC4u);
  v15 = 0;
  v16 = 0;
  v6 = 16;
  v7 = 32;
  v8 = 48;
  sub_4011B9(aInputName);
  scanf(aS, &v9);
  v3 = 0;
  for ( i = 0; v3 < (signed int)strlen(&v9); ++i )
  {
    if ( i >= 3 )
      i = 0;
    sprintf(&v13, aS02x, &v13, *(&v9 + v3++) ^ *(&v6 + i));
  }
  memset(&v9, 0, 0x64u);
  sub_4011B9(aInputSerial);
  scanf(aS, &v9);
  if ( !strcmp(&v9, &v13) )
    sub_4011B9(aCorrect);
  else
    sub_4011B9(aWrong);
  return 0;
}

 

 

usr_input[0] ^ v6
usr_input[1] ^ v7
usr_input[2] ^ v8
usr_input[3] ^ v6
usr_input[4] ^ v7
usr_input[5] ^ v8
....(usr_input 사이즈만큼 반복)

처음엔 &v6 + i 부분 때문에 고생하다가 올리디버거로 디버깅해서 알아냄..ㅠㅠ

그리고 xor는 xor하면 다시 원복되니까 해당 특징 이용해서 슥삭..

 

'Reversing > Reversing.kr' 카테고리의 다른 글

[Reversing.kr] Easy ELF  (0) 2019.08.13

+ Recent posts