Reversing/Reversing (Wargame)

    [CodeEngn] Basic RCE L04

    실행 프로그램을 그대로 실행해보면 CMD 창이 뜨면서 계속 반복하여 "정상"이라는 메시지를 띄운다. 어셈블리 코드 main ~ main_0 디버깅 중인지 확인하는 함수는 IsDebuggerPresent

    [CodeEngn] BASIC RCE L03

    실행 먼저 파일을 실행시켜보면 이렇게 뜬다. 그래서 MSVBVM50.dll을 설치해줬다. 확인을 누르고 나면 이렇게 Regcode를 입력하는 창이 나온다. 어셈블리코드(IDA) loc_40288BA 블록에서 보면 대충... 느낌적으로 비밀번호인 듯한 문자열과 비교함수 vbaStrCmp 가 보인다. 문자열"2G83G35Hs2"가 비밀번호라고 추측했던 이유는 그 아래 플로우에서도 찾아볼 수 있는데, 그 아래 가지를 살펴봤을 때 "Danke, das passwort ist richtig!" (대충 Thanks, the password is right.. 이런 의미...?) 또는 "Error! das passwort ist falsch"라는 에러창이 뜨도록 되어있다. vbaStrCmp 호출 부분 코드를 좀 더 ..

    [CodeEngn] BASIC RCE L02

    이번 문제는 실행파일이 손상되어 있어 이런 오류메시지가 나오고, 동적 분석이 불가능하다.! >> IDA, ollydbg 사용 불가능 따라서, 정적분석을 통해 이 실행파일에 대해 분석해봐야하는데 대표적으로 hex editor를 사용하면 정적 분석을 할 수 있다. ‌ HxD를 사용하면 위와 같이 Offset(h) + Data(h) + Decoded Text가 나온다. (+ 4D5A로 시작하는 것으로 실행파인 것을 확인할 수 있다고 한다!) ‌ 함수를 사용한 부분들도 확인할 수 있다. 바로 비밀번호를 확인할 수 있다.==> "JK3FJZh"

    [CodeEngn] BASIC RCE L01

    ◾ 실행환경: IDA pro(32bit) 코드를 수정해 HD를 CD-Rom이라고 생각하는 메시지가 출력될 수 있도록 한다. (원본 캡쳐본들이 날아갔다..) 수정한 부분은 loc401021에서 가장 마지막 점프 브랜치 명령이다. 원본 코드에서는 eax, esi 값을 비교하고 je short loc_40103D였다. 바로 위 cmp 명령코드부분에 breakpoint를 걸고 실행해보면, 이렇게 eax 레지스터와 esi 레지스터의 값이 다르다. 이 때 두 가지 방법이 있는데, breakpoint를 걸고 실행 중 eax 레지스터의 값, 혹은 esi 레지스터의 값을 변조하여 서로 같게 만들어 je 조건에 통과해 loc_40103D를 실행할 수 있도록 한다. eax, esi 레지스터의 값을 변조하지 않을 경우, 결과..

    [HackCTF] Handray

    Analyze 64bit ELF assembly code 하이라이팅한 부분이 현재 프로그램을 실행시켰을 때, 프로그램의 흐름대로 실행되는 코드들이다. 하지만 우리가 원하는 부분은 이 부분으로, 에서의 jne 0x40058d에 의해 실행되지 않고 지나간다. 그렇다면 어떻게 jne에서 점프되지 않고 그 아래 코드인 '0x400544~0x400586'을 실행시킬 수 있을까? 답은 jne 의 바로 위 조건을 확인해야한다. 에서 cmp [rbp-0x4], 0으로 rbp-0x4의 값이 0인지 비교하고 있다. 이 때, rbp-0x4의 값이 0이 되어야 jne에서 점프하지 않을 수 있다. 따라서, 에 breakpoint를 걸고 rbp-0x4의 값을 0으로 바꿔 실행한다.

    [HackCTF] Reversing Me

    Source Code #include #include ​ int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; char enter[54]; printf("키를 입력하시게 : "); scanf("%s", enter); if (strlen(enter) == strlen(serial)) { for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++); if (i - 1 == strlen(enter)) printf("정답일세!\n"); } else printf("그건 아닐세...\n"); exit(0); } serial값과 사용자가..

    [HackCTF] welcome_rev

    check 32bit ELF‌ Analyze pseudo code (IDA) ./welcomerev [password] 의 꼴로 프로그램을 실행하도록 되어있다. 이 때 check_password 함수에서 사용자가 입력한 password와 실제 flag를 비교한다는 것을 확인할 수 있다. check_password함수 내에서 strncmp함수를 통해 "SGFja0NURnt3M2xjMG0zXzcwX3IzdjNyNTFuNl93MHJsZEBfQCFfIX0"와 사용자가 입력한 값(s1)을 n byte만큼 비교하는 것을 확인할 수 있다. 📌 끝에 =이이 붙어있는 경우, base64로 encoding 되어있음을 추측할 수 있다! [디코딩/인코딩 사이트] https://dencode.com/