일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Next.js
- x64dbg
- Nop Slide
- RITSEC CTF 2019
- Shadow 동아리
- RITSEC
- ctf
- 리버싱
- BOF
- CodeEngn
- buffer over flow
- 웹해킹
- NewsClipping
- 뉴스클리핑
- Python
- termux
- PWN
- ftz
- 보안뉴스
- 리눅스
- SQL Injection
- HackCTF
- 버퍼오버플로우
- writeup
- webhacking
- Linux
- Hackerschool
- 어셈블리어
- requests
- Today
- Total
목록CodeEngn (15)
Jaeseo's Information Security Story
Basic RCE L16 Name이 CodeEngn일때 Serial을 구하시오 일단 문제를 풀기전에 PE 분석을 하고 시작합니다. 아무런 패킹 조치가 안되어 있는 것을 확인 했으니 IDA로 분석을 해봅니다. 일단 main 함수가 바로 보이고 C++로 짜여진 형태로 예상이 됩니다. int __cdecl main(int argc, const char **argv, const char **envp) { HANDLE v3; // eax _DWORD *v4; // eax unsigned int v5; // eax HANDLE v6; // eax HANDLE v7; // eax int v9; // [esp+0h] [ebp-A8h] unsigned int size; // [esp+1Ch] [ebp-8Ch] int v..
Basic RCE L15 Name이 CodeEngn일때 Serial을 구하시오 일단 PE 분석을 하면서 시작합니다. 아무런 Packing이 안되어 있는 모습을 볼 수 있습니다. 이런식으로 Name과 Serial를 입력 하고 Check를 하는 프로그램입니다. 이제 IDA로 정적분석을 합니다. 일단 메인 함수로 추정되는 위치입니다. void __noreturn start() { int v0; // eax Sysinit::__linkproc__ InitExe(&dword_458990); sub_44119C(*off_45A58C); sub_440DD8(*off_45A58C, &str_CrackMe_1__UBC_[1]); // 프로그램에 대한 이름을 설정하는 항목으로 예상된다. TApplication::Creat..
Basic RCE L14 Name이 CodeEngn 일때 Serial을 구하시오 (이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) Ex) 11111 일단 문제를 풀기 전에 PE 분석 프로그램을 사용합니다. upx 패킹이 되어 있는 모습을 볼 수 있는데 upx -d 명령어를 통해 언패킹 후 분석을 합니다! 일단 최근 공부를 하면서 IDA에 대해 알게 되었는데 분석하는데 진짜 도움이 많이 되서 한번 IDA로 정적분석을 해봅니다. 일단 main 함수 입니다. void __stdcall __noreturn start(int a1) { hInstance = GetModuleHandleA(0); //응용 프로그램의 인스턴스 핸들을 받아서 hInst..
13.exe - 정답은 무엇인가 프로그램 PE 분석을 해본다. PE 분석을 통해 .NET assemblies로 되어 있어 일반적인 디버거로는 확인이 불가능 한 것을 볼 수가 있다. 그래서 JetBrain에서 제공하는 dotPeek를 통해 분석을 진행한다. 일단 분석을 하기 전 프로그램의 목표를 알아본다. 비번을 입력하고 입력 값이 올바른 지 체크하는 프로그램이다. 이제 dotPeek를 통해 열어서 확인한다. 그 결과 위와 같이 분석이 되는 것을 확인할 수 있다. 이때 RijndaeSimple, RijndaeSimpleTest라는 두개의 Class를 발견하게 되는데 이 두개의 클래스를 들어가 분석을 해본다. RijndaeSimple먼저 들어가 분석을 해본다. 두가지의 함수가 발견이 되는데 Decrypt함수..
12.exe - Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 문제 : Key값과 + 주소영역을 찾으시오 Ex) 7777777???????? PE 분석을 통해 Packing이 되지 않았다는 것을 확인할 수 있다. 이제 X32DBG를 통해 분석을 해본다. 이제 여기서 문자열 검색을 통해 분석을 해본다. 검색을 통해 성공 메세지를 발견했다. 이때 메시지 주소로 들어가 분석을 해본다. Jne를 통해 성공 메시지를 출력 하는지에 대해 분기점이 갈리고 있는데 이때 위의 cmp eax.7A2896BF를 통해 비교 하..
11.exe - OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. Ex) FF35CA204000E84D000000 정답인증은 OEP+ Stolenbyte Ex) 00401000FF35CA204000E84D000000 프로그램 PE 분석을 일단 진행하여 본다. UPX로 Packing 되어 있는 것을 알 수가 있는데 UPX로 Unpacking을 진행한다. UPX로 Unpacking된 파일을 X32dbg로 열어보니 NOP으로 되어 있는 부분이 있다. Stolen Byte가 있으니 Packing된 파일을 통해 분석을 해본다. Upx로 unpacking 끝난 이후 POPAD로 레지스터를 복구하는 곳을 찾아 분석한다. Popad 이후 push를 하는 모습을 볼 수가 있는데 아직 OEP..
10.exe - OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE ( EX) 00400000EB03 ) 디버깅을 하기전에 Packing이 되어 있는지 PE 분석을 해본다. 분석 결과 “Aspack”이라는 Packing 프로그램으로 패킹이 되어 있는 것을 확인할 수 있다. X32dbg로 분석을 통해 Unpacking을 한다. Pushad를 통해 레지스터를 stak에 올리고 있는 모습을 볼 수 있다. F8를 눌러 ESP의 변경이 되는 모습을 관찰한다. 이제 복호화 작업을 끝내고 popad를 통해 레지스터를 복구할 것이다. 이때 ESP주소를 기점으로 덤프를 뜨고 memory에서 access 될 때 Break Point를 걸어 관찰을 한다. 이제 F9를..
09.exe - StolenByte를 구하시오 Ex) 75156A0068352040 일단 PE 분석을 해본다. 그 결과 UPX로 Packing 되어 있는 것을 볼 수 있다. UPX로 UnPacking 한다. 이제 프로그램을 실행하여 분석을 한다. Upx로 Unpacking를 하고 나니 문자열이 다 깨지고 오류 메세지를 출력하고 있다. Upx에서 StolenByte를 일부 가지고 있어서 오류가 나는 것으로 예상이 된다. 그래서 이번에는 upx Unpacking을 진행하지 않고 디버깅을 진행하도록 한다. 일단 x32dbg로 분석을 한다. 실행을 해보면 처음 upx로 unpacking을 진행하는 모습을 볼 수 있다. Upx로 unpacking을 하면서 계속 반복을 하는 모습을 볼 수 있는데 F8과 Break ..