분류 전체보기

    abex crackme2

    파일을 우선 실행시켜보면 Name과 Serial 값을 입력하도록 나온다. 패킹된 파일은 아니다. PE 32타입의 파일인 것도 확인할 수 있다. assembly code를 살펴보면 어떤 분기점을 기점으로 "Congratulations" 또는 "Wrong serial!"을 출력한다. 그래서 이 영역들의 근처에서 Serial Key를 비교하는 부분이 있을 거라고 생각했다. (다만, IDA에서는 유니코드가 해석이 되지 않아서 ollydbg로 옮겼다 text ax, ax에 breakpoint를 설정하고 my_name, my_serial을 입력 내가 입력한 "my_name", "my_ serial"이 스택에 저장되어 있는 것을 확인할 수 있다. 이 영역에서 조금만 더 내려보면 my_serial과 함께 유니코드 값이..

    [pwnable.xyz] add

    check 64 bit ELF Canary NX analyze pseudo code (IDA) if 문의 조건으로 들어간 isoc99_scanf("%ld %ld %ld", &v4, &v5, &v6) != 3 은 scanf에 인자로 들어가는 값이 3개가 안되는 경우를 의미한다. scanf의 리턴 값은 scanf를 통해 입력받은 값의 개수를 나타내는데, 이 때 scanf내에서 사용한 포맷스트링과 실제 입력값이 같지 않은 경우는 리턴 값에 포함시키지않는다. 따라서, 현재의 경우에는 정수값이 아닌 문자, 문자열등을 입력하게 되면 while문을 break하게 된다. 배열 v7은 int64 타입의 11개의 인덱스를 가지는 배열로, 한 인덱스당 8byte를 갖는다. 하지만, 실제 v7의 크기를 살펴보면 rbp-60h..

    [CodeEngn] BASIC RCE L08

    이 문제파일도 IDA로 열어보니 이런 창이 뜨는 걸로 봤을 때 패킹된 파일인 듯 하다. UPX로 패킹된 파일인 것을 확인했다. upx를 이용해 언패킹된 파일 08_unpack.exe를 만들어준다.

    [CodeEngn] BASIC RCE L06

    ◾ 파일 형식: exe (32bit) ​ 실행 먼저 IDA로 바로 열어보면 사용자로부터 Serial을 입력하는 창이 뜨고, 버튼을 누르면 결과에 따라 다른 메시지창이 뜬다. 06.exe 파일 분석 현재 06.exe 파일이 패킹된 파일이라는 것을 확인할 수 있다. 그래서 이 파일을 upx로 언패킹 해줬다! 이렇게 06.exe를 언패킹한 06_unpack.exe를 만들어줬다. 언패킹된 파일을 IDA로 열었다. 이 때 사실 헷갈려서 [Shift] + [F12]로 String window로 연결한 후, 뭔가... 결과값으로 출력되는 듯한 문자열을 골라서 해당 문자열을 참조하는 위치로 갔더니 serial key와 사용자 입력값을 비교하는 분기문을 찾을 수 있었다. >> Serial Key 획득 IDA에서 [Ctr..

    [CodeEngn] BASIC RCE L05

    실행 이 상태에서 Register now! 를 누르면 이런 오류 메시지가 뜬다. 분석 IDA에 PE 파일을 띄우면 이런 메시지 창이 뜬다. (IAT가 현재 파일의 메모리 범위 밖에 존재한다.. >> Detect It Easy로 파일을 확인해보자. 현재 문제파일 05.exe가 UPX로 패킹된 파일이라는 것을 확인할 수 있다. upx로 패킹됐으니까 upx로 쉽게 언패킹도 할 수 있다. 이제 언패킹된 05_unpack.exe를 IDA에 올려보면 이런 식으로 패킹된 파일에서는 볼 수 없었던 원본 코드들을 볼 수 있다. [Shift] + [F12]로 Strings window를 열어 결과값에 해당하는 문자열을 찾아 역참조를 한다. 그렇게 거슬러 올라가면 사용자 입력값과 등록키를 비교하는 코드들을 찾을 수 있다.

    [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으로 바꿔 실행한다.