IDA로 까보면 다음과 같습니다.
int __cdecl main()
{
write(1, "Reversing.Kr Easy ELF\n\n", 0x17u);
sub_8048434();
if ( sub_8048451() )
sub_80484F7();
else
write(1, "Wrong\n", 6u);
return 0;
}
_BOOL4 sub_8048451()
{
if ( byte_804A021 != 0x31 )
return 0;
byte_804A020 ^= 0x34u;
byte_804A022 ^= 0x32u;
byte_804A023 ^= 0x88u;
if ( byte_804A024 != 88 )
return 0;
if ( byte_804A025 )
return 0;
if ( byte_804A022 != 124 )
return 0;
if ( byte_804A020 == 120 )
return byte_804A023 == 4294967261;
return 0;
}
ssize_t sub_80484F7()
{
return write(1, "Correct!\n", 9u);
}
sub_8048451이 true를 리턴할 수 있도록 만들어주는 값을 역연산하면 됩니다.
다음과 같이 파이썬으로 역연산을 수행합니다.
(바이트 단위이므로 0xff로 마스크를 씌워줘야 함)
byte_804A020 = 120 ^ 0x34
byte_804A021 = 0x31
byte_804A022 = 124 ^ 0x32
byte_804A023 = (4294967261 ^ 0x88) & 0xff
byte_804A024 = 88
byte_804A025 = 0
print(chr(byte_804A020),end='')
print(chr(byte_804A021),end='')
print(chr(byte_804A022),end='')
print(chr(byte_804A023),end='')
print(chr(byte_804A024),end='')
print(chr(byte_804A025),end='')
L1NUX
'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 Unpack write-up (0) | 2023.08.30 |
[reversing.kr] Easy Keygen write-up (0) | 2023.08.18 |
[reversing.kr] Easy Crack write-up (0) | 2023.08.18 |