전체 글 105

[OTA] UDS : TP (Transport Protocol)

1) Single Frame : 7바이트 이하의 데이터 Single Frame (1) 첫 번째 바이트(PCI : Protocol Information) : 상위 4비트 - Single Frame을 알려주는 값인 0을 담음 하위 4비트 - Data Length (2) 나머지 바이트(7Byte) (3) 흐름 2) Multi-Frame Message Packet : 7바이트보다 큰 데이터 : Multi-Frame Message Packet 을 통해 통신 Multi-Frame Message Packet : First Frame(시작 프레임) x 1 + Consecutive Frame x n 2-1) First Frame First Frame (1) 첫 번째 바이트(PCI : Protocol Information..

IVS 2024.01.03

CodeEngn.com Basic RCE L12

12번 문제 : key 값과 그 key 값이 MessageBox에 출력되도록 하기 위해 수정해야 할 주소 영역을 구하는 것 12.exe파일을 실행하였더니 Key를 입력하는 창이 나왔고, Check를 눌러도 변화가 없었다. About을 눌러보니 알맞은 key값을 구하라는 메시지가 나왔다. PEiD를 통해 정보를 확인해 보았더니 패킹이 되어있지는 않았다. 올리디버거로 실행해서 Key값에 ‘1’를 입력하였다. 그랬더니 EAX에 1이 저장되는 것을 볼 수 있었다. 즉, 내가 Key값으로 입력한 값이 EAX에 대입되는 것을 확인할 수 있다. 올리디버거로 12.exe을 열었다. “Congratulation ...”와 같이 성공을 나타내는 문자열이 보인다. 위쪽에 CALL 부분이 있어서 그 부분을 break걸었다. ..

CodeEngn 2024.01.03

Reversing.kr - Ransomware

file, readme.txt, run.exe파일이 주어졌다. readme.txt의 내용이다. run.exe을 실행하면 Key값을 입력하게 되어있었고, 임의의 값인 abc를 입력하였더니 위와 같은 문구가 떴다. PEiD를 통해 run.exe의 정보를 보았더니 UPX로 패킹이 되어있음을 알 수 있었다. 패킹되어있던 run.exe를 upx.exe를 통해 언패킹해주었다. run.exe를 올리디버거를 통해 분석해보았다. 이 부분은 반복문을 돌면서 암호화된 파일을 읽어오는 부분이다. 이 부분은 입력 받은 key값을 이용해서 암호화된 파일을 복호화하는 부분이다. 복호화하는 방식을 정리하면 1. 파일에서 한 바이트 씩 가져온다. 2. key값과 XOR연산을 한다. 3. 0xFF와 다시 XOR한다. key값을 구하기 ..

[CTF]Reversing.kr 2023.12.29

Reversing.kr - Easy Keygen

Easy Keygen.exe와 ReadMe.txt파일이 주어진다. ReadMe.txt를 확인해보니 Serial이 5B134977135E7D13일 때 Name을 찾으면 해결되는 것 같다. PEiD를 통해 Easy Keygen.exe파일이 패킹이 되어 있지 않음을 알 수 있다. strings를 확인하였더니 “Correct!”와 “Wrong”이 있었고, “Correct!”부분으로 이동하였다. 이 부분은 Serial을 생성하는 루틴이 담겨있다. 1. 입력 받은 문자열들을 하나씩 가져온다. 2. 0x10, 0x20, 0x30을 반복하면서 xor연산을 한다. 3. ESI에 생성한 Serial값을 저장한다. 4. 입력 받은 Serial 값과 비교해서 일치하면 “Correct!”, 실패하면 “Wrong!”이 있는 곳으..

[CTF]Reversing.kr 2023.12.29

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