일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- reversing
- Linux
- 보안뉴스
- CodeEngn
- 어셈블리어
- PWN
- 리눅스
- Python
- webhacking
- buffer over flow
- RITSEC
- NewsClipping
- 뉴스클리핑
- SQL Injection
- x64dbg
- HackCTF
- Hackerschool
- 리버싱
- BOF
- 웹해킹
- Nop Slide
- termux
- RITSEC CTF 2019
- Shadow 동아리
- Next.js
- requests
- 버퍼오버플로우
- ctf
- ftz
- writeup
- Today
- Total
목록리버싱 (19)
Jaeseo's Information Security Story
07.exe - OEP를 구하시오 Ex) 00400000 OEP 코드를 알기 위해 PE 분석을 해본다. 현재 UPX로 Packing이 되어있어 정상적인 OEP를 알 수가 없다. OEP를 알기 위해 UPX로 Unpacking를 해준다. 그리고 ExeinfoPE를 통해 다시한번 분석해본다. EP는 00012475 라는 것을 알게 되었다. 또한 Image Base는 01000000인 것을 알 수 있다. OEP는 Image Base + EP 하여 구한다. 정답: 01012475
07.exe - 컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가 일단 프로그램을 디버깅 하기 전 PE분석을 해본다. ExeinfoPE를 통해 Not packed가 되었다는 것을 확인함. 프로그램을 실행시 시리얼 키를 입력 받고 확인을 하는 프로그램으로 추정됨. X32dbg로 실행하여 분석을 시작한다. 일단 Check 버튼을 눌렀을 때 하드디스크의 이름 정보를 가져오는 함수가 작동될 것으로 예상된다. 이때 keyword(volume, disk, information, get 등)을 가지고 인터럽트를 검색해본다. 이때 “GetVolumeInformationA” 함수를 발견하게 되는데 이 함수를 통해 볼륨의 이름을 가져오는 것으로 추정이 된다...
06.exe - Unpack을 한 후 Serial을 찾으시오. (정답인증은 OEP + Serial) 프로그램을 실행을 하면 이런 식으로 Input Box가 있고 입력을 하면 Serial를 체크를 하는 프로그램이다. 일단 디버깅을 하기 전에 PE 분석을 해본다. PE 분석을 통해 UPX를 통해 Packing이 되어있다는 것을 확인했다. UPS unpacking을 해본다. 이제 unpacking된 파일을 가지고 x32dbg로 분석을 해본다. 일단 프로그램을 동작 시켜 GUI가 구성이 시작되는 main 함수부분을 찾아본다. 인터럽트가 발생하는 것을 검색해본다. 이때 main에서 동작될 것으로 예상되는 GUI를 만드는 함수에 관련된 키워드를 검색해본다. 키워드(gui, box, dialog 등) 이때 이러한 결..
GDB(GNU Debuger) 간단 사용법 linux에서 사용되는 Debuger 프로그램. 디버깅을 하기 위해서는 [gcc -g 파일명 -o 출력명] -g 옵션이 사용하는 것이 좋다. -g 옵션을 사용하면 gdb 과정 중에 소스코드를 살펴보며 디버깅이 가능해진다. gdb [프로그램명] | gdb [프로그램명] [PID] | gdb -c [코어 덤프명] 명령어 해설 break 함수와 행을 기준으로 중단점을 설정한다. ex) break main clear clear [breakPoint번호] , clear [함수명] 등의 형식으로 사용. breakPoint 삭제 disable br 모든 BreakPoint 비활성화 enable br 모든 BreakPoint 활성화 condition condition [bre..
Reversing.kr의 Easy Keygen 문제 입니다. 일단 문제를 다운 받으면 ReadMe.txt 파일과 Easy Keygen.exe 파일이 있습니다. 일단 ReadMe.txt 파일을 읽으면 내용은 아래와 같습니다. ReversingKr KeygenMe Find the Name when the Serial is 5B134977135E7D13 문제를 보니 시리얼 5B134977135E7D13이 나올때의 이름을 찾으라는 문제입니다. 일단 pe 분석을 해서 패킹이 되어 있는 지를 확인 해봅니다. C++로 짜여 있고 Packing과 같은 조치는 안되어 있는 것으로 보입니다. 이제 프로그램을 실행해보고 IDA로 정적 분석을 해봅니다. 매우 간단한 프로그램으로 보입니다. name을 입력하면 name가지고 알..
PUSH, POP 스택에 값을 넣는 것이 PUSH 스택에 있는 값을 가져오는 것이 POP PUSHAD , POPAD 모든 레지스터를 PUSH 하고 POP 하라는 명령어 ex) PUSHAD == PUSH EAX, PUSH EBX, PUSH ECX... MOV 값을 넣어주는 역할 ex) MOV eax,1 == eax에 1를 넣는 명령어 LEA LEA는 주소를 가져온다. MOV는 값을 가져온다. ex) esp+8 : 0x123456 , *esp+8 : 1234 LEA eax,esp+8 -> eax == 0x123456 MOV eax,esp+8 -> eax == 1234 ADD source 에서 destnation으로 더해라 ex) ADD source,destnation SUB source 에서 destnati..
RAX(64bit) -> EAX(32bit) -> AX(16bit) -> AH(8bit - high) - AL(8bit - low) Accumulator for operands and results data 주로 곱셈, 나눗셈에 사용되며, 함수의 반환값을 저장(리턴값) RBX(64bit) -> EBX(32bit) -> BX(16bit) -> BH(8bit - high) - BL(8bit - low) Pointer to data in the DS segment ESI, EDI 와 결합해 인덱스에 사용됨. RCX(64bit) -> ECX(32bit) -> CX(16bit) -> CH(8bit - high) - CL(8bit - low) Counter for string and loop operations 반..
05.exe - 이 프로그램의 등록키는 무엇인가 프로그램을 실행하면 등록키를 입력하는 inputbox와 name을 입력하는 inputbox가 있고 이것을 이용하여 등록을 진행 하는 프로그램으로 보인다. 이제 프로그램 분석을 시작 한다. 맨 처음 PE분석을 통해 패킹이 되어있는지 확인을 해보는 과정을 진행 해본다. PEview와 Exeinfo PE 툴을 통해 이프로그램은 UPX로 패킹이 되어있는걸 확인 할수 있다. UPX를 사용하여 언패킹을 진행해본다. ExeinfoPE를 통해 Unpack이 된 것을 볼수 있다. 이제 X32DBG로 분석을 해본다. String references 검색으로 통해 등록키로 의심이 되는 값 또는 인증관련 메시지와 관련된 값을 찾는다. 잘못된 입력 값을 입력 했을 때 뜨는 키워드..