CodeEngn Challenge
Checkin List
최근 인증 기록을 확인할 수 있습니다. 공개 별칭과 코멘트만 표시됩니다.
Public record
최근 인증 페이지당 50건
24,596건의 공개 인증 기록 · 341 / 492 페이지
| Checkin time | Name | Level | Comment | Point |
|---|---|---|---|---|
| 2015-03-14 18:08:09 | ethobis | Basic L07 | - | 13 |
| 2015-03-14 18:00:34 | ethobis | Basic L06 | - | 11 |
| 2015-03-14 17:55:53 | ethobis | Basic L05 | - | 9 |
| 2015-03-14 17:41:56 | ethobis | Basic L04 | - | 7 |
| 2015-03-14 17:38:01 | ethobis | Basic L03 | - | 5 |
| 2015-03-14 17:35:47 | ethobis | Basic L02 | - | 3 |
| 2015-03-14 17:28:15 | ethobis | Basic L01 | - | 1 |
| 2015-03-14 15:16:34 | symnoisy | Basic L09 | Challenges : Basic 09 Author : abex Korean : StolenByte를 구하시오 Ex) 75156A0068352040 English : Find the StolenByte Ex) 75156A0068352040 stolen byte: 패커가 위치를 이동시킨 코드. 보호된 프로그램의 코드 윗부분(보통EP의 몇개의 명령어임) 즉 stolen byte란 EP 진입점에서 빼내온 opcode를 찾으라는 문제같다. 패킹 자체는 upx로 되어있어서 OEP 진입점은 굉장히 쉽게 찾을수 있엇다. 그런데 stolen byte로 인해서 OEP지점에서 바로덤프를 떠버리면 실행이 제대로 되지않는다(왜냐하면, OEP부분에서 처리해줘야할 일부를 패킹부분에다가 집어 넣어 주엇기때이다) 즉, 덤프를 뜨기 이전에 stolen byte를 OEP 부분에 추가해주고, 마지막 jmp 부분(UPX는 이부분이 OEP로 점프하는 부분이므로)을 stolen byte를 추가해준 시작부분으로 수정해주고 덤프를떠주면된다. 코드엔진 자체에서 묻는것은 stolen byte 부분이므로 이에 대한 opcode를 이어서 써주면된다. | 17 |
| 2015-03-14 14:08:06 | Tempa | Basic L03 | - | 5 |
| 2015-03-14 13:24:17 | tempa | Basic L02 | - | 3 |
| 2015-03-14 11:58:08 | tempa | Basic L01 | aa | 1 |
| 2015-03-14 11:34:32 | 12 | Basic L01 | - | 1 |
| 2015-03-13 14:54:53 | symnoisy | Basic L08 | Challenges : Basic 08 Author : Rekenmachine Korean : OEP를 구하시오 Ex) 00400000 English : Find the OEP Ex) 00400000 OEP 구하는 문제인데 UPX로 패킹되어 있어서 엄청나게 간단하게 구해버렷다 UPX 특징이 맨마지막 JMP부분에서 압축을 해제한 실제 데이터 부분으로 jmp를 하기때문에 맨 마지막 점프부분을 따라가면 OEP 부분이 나오게된다 어떻게 UPX 패킹인지 알앗냐면 , PE View 로 먼저 열어보고 들어갓는데 섹션부분에서 upx패킹되어잇는 프로그램들의 특징을 발견햇다(뭐 원래는 peid를 써서 패킹을 확인하지만) | 15 |
| 2015-03-13 14:41:26 | symnoisy | Basic L07 | Challenges : Basic 07 Author : abex Korean : 컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 !어떤것!으로 변경되는가 English : Assuming the drive name of C is CodeEngn, what does CodeEngn transform into in the process of the serial construction 문제에서 어떤 api 함수를 건드려야 할지는 module에 나열된 api 함수들을 보고 감이왔는데,, 어떤식으로 바꿔야 할지 몰라서 헤매다가 불러오는 주소에 대한값을 바꿔줘야 한다는 것을 꺠닫고 바로실행. . 근데 이부분(40225C)는 뒤에 흐름을 살펴보니 원래 이프로그램의 문제인 serial 키를 뽑아내는 부분의 일부이다. 계속해서 뒤를 보면 이부분(40225C)부분 부터 네자리를 Dl(현재 2가 들어있다)을 카운터로 삼아서 암호화를 수행한다. 즉 CodeEngn에서의 Code 부분에대한 암호화(?라기보다는 문자를 두칸씩 이동한다)를 수행한다 따라서 이문제에서 원하는 답을 추측할 수 있엇고, 원래 이문제 자체의 키값은 아래와 같다 | 13 |
| 2015-03-12 19:43:45 | zeee1 | Basic L08 | - | 15 |
| 2015-03-11 17:24:30 | bblackeye | Basic L06 | - | 11 |
| 2015-03-11 16:41:21 | e32592 | Basic L11 | 인증 | 21 |
| 2015-03-11 16:18:10 | e32592 | Basic L10 | 이문제는 OEP코드와 성공메세지를 출력하는 분기점을 찾아 OPCODE 를 구하면 된다. 이제 성공메세지를 출력하는 분기점을 찾아서 OPCODE를 구해보자. 찾았다. 끝 | 19 |
| 2015-03-11 15:56:50 | zeee1 | Basic L07 | - | 13 |
| 2015-03-10 21:38:29 | bblackeye | Basic L05 | - | 9 |
| 2015-03-10 20:50:21 | zeee1 | Basic L06 | - | 11 |
| 2015-03-10 20:36:25 | bblackeye | Basic L04 | - | 7 |
| 2015-03-10 19:39:18 | bblackeye | Basic L03 | - | 5 |
| 2015-03-10 19:24:05 | bblackeye | Basic L02 | - | 3 |
| 2015-03-10 19:09:42 | bblackeye | Basic L01 | - | 1 |
| 2015-03-10 10:02:24 | inhack | Advance L05 | b | 13 |
| 2015-03-10 09:55:35 | inhack | Advance L04 | b | 11 |
| 2015-03-09 01:59:27 | soohyun0504 | Advance L09 | - | 21 |
| 2015-03-06 18:06:28 | revers3r | Advance L10 | 10 | 23 |
| 2015-03-05 22:36:29 | revers3r | Advance L09 | 짱짱 | 21 |
| 2015-03-05 21:08:43 | kang010330 | Advance L05 | - | 13 |
| 2015-03-05 14:53:05 | 677345 | Advance L05 | 677345 | 13 |
| 2015-03-05 14:44:16 | 3265754874 | Advance L03 | 3265754874 | 9 |
| 2015-03-05 14:16:30 | shortcode | Crypto L02 | - | 7 |
| 2015-03-05 13:49:39 | godkad | Crypto L01 | - | 5 |
| 2015-03-04 22:59:51 | asdasdasdasd | Basic L11 | asdasdas | 21 |
| 2015-03-04 20:03:46 | symnoisy | Basic L06 | Challenges : Basic 06 Author : Raz0r Korean : Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD English : Unpack, and find the serial. The solution should be in this format : OEP + Serial Ex) 00400000PASSWORD OEP 를 구해주고 serial 또한 구해줘야 하는 문제다. 문제에서 따로 특별한 점은 찾지 못햇지만, UPX로 패킹이 되어있고, 언패킹한후 들어가보면 키값을 비교하는 API 부분이 뭉개져있다 . 따라서 접근할때 실패했을때 나타나는 string인 wrong serial! 이라는 string 을 흰트로 하여 거슬로 올라가 해당 API 를 찾을 수 있었다 . (며칠전에 자다가 풀다가 break 걸어논 부분 부터 다시 이어서한거라 중간에 접근했던 방법이 자세히 기억이 나지를 않는다 ㅡㅡ ;; ) 이 API자체는 compare하는 api 로 param 1,2를 비교하게되는데, 스택의 원본 serial키 값과 내가 넣은 input 값을 비교하게 된다 해당 api 안으로 들어가보면 , 암호화 루틴이 나오게된다. input으로 넣어주면 성공. flag 값은 OEP + Serial 값이다 | 11 |
| 2015-03-04 15:49:26 | asdf | Basic L20 | - | 39 |
| 2015-03-04 04:30:13 | soohyun0504 | Advance L05 | - | 13 |
| 2015-03-04 04:09:19 | soohyun0504 | Advance L04 | - | 11 |
| 2015-03-03 23:34:30 | ojsung7 | Basic L01 | - | 1 |
| 2015-03-03 06:21:11 | soohyun0504 | Advance L03 | - | 9 |
| 2015-03-03 05:55:56 | soohyun0504 | Advance L02 | - | 7 |
| 2015-03-03 03:10:52 | symnoisy | Basic L05 | Challenges : Basic 05 Author : Acid Bytes [CFF] Korean : 이 프로그램의 등록키는 무엇인가 English : The registration key of this program is? 문제는 굉장히 쉽게 풀었다. UPX 패킹이 되있으므로, 유틸을 사용해서 언팩을 해주던가, 가내수공업으로 언팩을 해주는 방법 두가지가 있겠다. 따로 설명은 안하겟고, 맨마지막 jmp 부분에 브레이크를 걸어주고 덤프를 뜬다던가, UPX 의시작점 부분에서 ESP 의값을 하드웨어 브레이크를 걸어주고 덤프를 떠준다. 유틸사용이야 말해봐야 입아플거같고, 이프로그램은 키값과 동시에 Name 부분의 란이 따로 존재한다. UPX를 언패킹해주면,시리얼 키를 EDX 레지스터에 넣고 CMP하는 구문이있다. 따로 브레이크를 걸필요없이, 노출되어있어서 쉽게 찾을수 있었다. 코드엔진에서 물어보는 키값은 이것(등록키)이지만, 원래의 본프로그램의 경우, 키값을 맞춤과 동시에 그에 맞는 name 값을 input으로 넣어줘야 한다. serial키 부분보다는 name 부분에 좀더 신경을 쓴 프로그램 같다 우선, 해당 프로그램이 어떤 루틴을 갖는지 분석을 해보면(UPX를 언패킹 해서 OEP에 접근했을때 부터의 이야기이다) 1)name의 input이 있는지 없는지 에 따라 분기한다 2) serial 값이 있는지 없는지에 따라 또한 분기한다. 3)Register User 부분인데 이 아래에 존재하는 CALL 0x00403B2C에 암호화 루틴이 존재한다 4)name의 input 값이 맞는지 아닌지에따라 성공 실패 분기문이 갈린다. 5)serial 값이 맞는지 아닌지에 따라 성공 실패 분기 문이 갈린다 주석을 첨가한 약간의 코드를 첨부한다.(name 루틴부분을 분석할까 했는데 귀찮아서 안함 ㅡㅡ;나중에 심심할때 해보겟음 ) | 9 |
| 2015-03-03 02:29:49 | soohyun0504 | Basic L20 | - | 39 |
| 2015-03-03 02:29:10 | symnoisy | Basic L04 | Challenges : Basic 04 Author : CodeEngn Korean : 이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 English : This program can detect debuggers. Find out the name of the debugger detecting function the program uses. 원래 알고 있는 함수이지만, 확실한지 검증해보기 위해서 프로그램을 실행시킨뒤 확인해보았다. intermodular call 부분을 확인하다보면, 다음과 같은 API 를 발견할 수 있다 딱히 시간을 쓸 필요는 없는 문제였다. | 7 |
| 2015-03-02 23:32:56 | soohyun0504 | Basic L19 | - | 37 |
| 2015-03-02 05:42:45 | soohyun0504 | Basic L18 | - | 35 |
| 2015-03-02 04:56:36 | soohyun0504 | Basic L17 | - | 33 |
| 2015-03-02 02:58:18 | soohyun0504 | Basic L16 | - | 31 |