write-up(rev)/reversing.kr

    [reversing.kr] Easy ELF write-up

    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 != 12..

    [reversing.kr] Easy Unpack write-up

    [reversing.kr] Easy Unpack write-up

    ReversingKr UnpackMe Find the OEP ex) 00401000 OEP(Original Entry Point)를 찾으라고 합니다. Packing 되어 있는 exe 파일이 제공됩니다. x32dbg 로 열어봅니다. 실행을 누르면 다음과 같은 주소에 떨어집니다. 쭉 내려보니 unpack 관련 함수가 나오고 마지막에 0x00401150으로 점프하는 코드가 발견됩니다. 0x00401150으로 점프하는 코드를 실행하면 기존에 알고있던 함수의 프롤로그 코드가 나옵니다! 따라서 original entry point는 0x00401150 입니다.

    [reversing.kr] Easy Keygen write-up

    [reversing.kr] Easy Keygen write-up

    ReversingKr KeygenMe Find the Name when the Serial is 5B134977135E7D13 실행해주면 name과 serial을 비교하여 주는데 금방 닫혀버려서 결과가 어떤지도 알기 힘듭니다. IDA로 디컴파일하면 다음과 같습니다. int __cdecl main(int argc, const char **argv, const char **envp) { signed int v3; // ebp int i; // esi char v6; // [esp+Ch] [ebp-130h] char v7[2]; // [esp+Dh] [ebp-12Fh] BYREF char v8[100]; // [esp+10h] [ebp-12Ch] BYREF char Buffer[197]; // [esp+74h..

    [reversing.kr] Easy Crack write-up

    [reversing.kr] Easy Crack write-up

    실행해주면 비밀번호를 입력하는 창이 나오고 입력 값이 틀리면 틀렸다는 창이 나옵니다. 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+..