분류 전체보기 108

Reversing.kr - Easy Unpack

Easy_UnpackMe.exe와 ReadMe.txt가 주어진다. Easy_UnpackMe.exe를 실행하면 위와 같이 아무것도 뜨지 않는다. PEiD를 통해서 확인해보니 Entrypoint와 EP Section에 대한 정확한 정보를 얻기 어려웠다. ReadMe.txt파일을 열었더니 OEP의 주소를 찾으면 해결이 되는 것 같다. OEP는 패킹된 파일의 실제 프로그램의 시작 부분이다. 올리디버거로 코드를 분석해보았다. PUSH, MOV, JE를 계속 반복하며 디코딩을 하는 것 같다. 코드를 계속 내리다보면 0040A1FB에서 00401150으로 JMP하고 다음 코드들이 0으로 채워져있는 것을 확인할 수 있다. 즉 이 주소가 OEP임을 알 수 있다.

[CTF]Reversing.kr 2023.12.29

picoCTF 2019 – asm3

asm3은 0xd2c26416, 0xe6cf51f0, 0xe54409d5가 인자일 때 return값을 구하는 문제이다. asm3: :push ebp :mov ebp,esp :xor eax,eax :mov ah,BYTE PTR [ebp+0x9] :shl ax,0x10 :sub al,BYTE PTR [ebp+0xe] :add ah,BYTE PTR [ebp+0xf] :xor ax,WORD PTR [ebp+0x12] :nop :pop ebp :ret : push ebp : mov ebp, esp → ebp에 esp 값을 복사한다. : xor eax, eax → 같은 값인 eax를 xor연산하기 때문에 결과가 0이 되고, eax값이 0이 된다. : mov ah, BYTE PTR [ebp+0x9] → [ebp+0x..

[CTF] PICOCTF2019 2023.12.29

picoCTF 2019 - asm2

asm2는 0x4, 0x21을 넣었을 때 return 값을 구하는 문제였다. asm2: :push ebp :mov ebp,esp :sub esp,0x10 :mov eax,DWORD PTR [ebp+0xc] :mov DWORD PTR [ebp-0x4],eax :mov eax,DWORD PTR [ebp+0x8] :mov DWORD PTR [ebp-0x8],eax :jmp 0x509 :add DWORD PTR [ebp-0x4],0x1 :add DWORD PTR [ebp-0x8],0x74 :cmp DWORD PTR [ebp-0x8],0xfb46 :jle 0x501 :mov eax,DWORD PTR [ebp-0x4] :leave :ret : push ebp : mov ebp, esp 까지 스택의 모양을 그려보았다..

[CTF] PICOCTF2019 2023.12.29

picoCTF 2019 - asm1

asm1 문제는 0x6fa를 넣으면 asm1이 16진수로 리턴하는 값이 무엇인지 구하는 것이다. asm1: :push ebp :mov ebp,esp :cmp DWORD PTR [ebp+0x8],0x3a2 :jg 0x512 :cmp DWORD PTR [ebp+0x8],0x358 :jne 0x50a :mov eax,DWORD PTR [ebp+0x8] :add eax,0x12 :jmp 0x529 :mov eax,DWORD PTR [ebp+0x8] :sub eax,0x12 :jmp 0x529 :cmp DWORD PTR [ebp+0x8],0x6fa :jne 0x523 :mov eax,DWORD PTR [ebp+0x8] :sub eax,0x12 :jmp 0x529 :mov eax,DWORD PTR [ebp+0x8]..

[CTF] PICOCTF2019 2023.12.29

[webhacking.kr] webhacking.kr 54

54번 문제 - Password is 문자 형식에서 문자만 바뀌어서 출력이 된다. 바뀌는 부분의 문자들을 모으면 FLAG값을 얻을 수 있을 것 같다. 일단 코드의 answer 함수부분을 먼저 보았다. 28번째 줄에서 GET방식으로 매개변수 m에 i의 값을 넣는 다는 것을 알 수 있고 30번째 줄에서 서버에 요청하여 응답으로 받은 데이터를 문자열로 반환시키는 responseText를 사용하여 받은 데이터를 aview.innerHTML에 넣은 것을 알 수 있다. 그리고 나서 i의 값을 증가시킨다. 32번째 줄에서 만약 x.responseText인 문자가 있다면 20밀리 초 후에 증가시킨 i를 answer에서 다시 실행한다는 것을 알 수 있다. 즉 변하는 문제는 0.02초마다 한 문자씩 변하는 것이다. 33번..