일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- web
- 해킹캠프
- 뭉뭉
- 라이트 업
- reversing.kr
- write-up
- 강의
- 드림핵
- c언어
- 풀이
- 히공
- ctf
- hackingcamp
- 워 게임
- 리버싱
- reversing
- write up
- 코드엔진
- 리버스 엔지니어링
- 라업
- ShaktiCTF
- 변수
- 2021
- vsCode
- 시탭
- PYTHON
- Basic
- 파이썬
- probgame
- 라이트업
목록hackingcamp (5)
히공

문제 dvm-rev sub_14A3이 가장 중요한 함수다. 이러한 함수다. ida 리모트 디버깅을 쓴다. 인자로는 opcode를 준다. f9를 누른다. jmp rax가 굉장히 중요하다. 아무거나 입력해준다. call하는 부분으로 오게 된다. 안은 이러했다. memcmp로 가는 것을 볼 수 있다. unk_7F4ABDDDFF00 = memcmp 끝나고 rsi 주소로 가보면 여기 주소와 비교하는거다. 코드를 패치하여 검사를 통과하도록 만들었다. 총 3번 입력받는다. opcode : S가 출력되면 입력을 받는다. opcode : P가 출력되면 memcmp를 호출한다. RAX값을 보니 8개를 입력받는 것을 알 수 있다. (read 함수 호출 후) 여기를 보면 sub_1100는 write함수로 이동하는 함수라고 알..

문제 please_analysis_me 파일의 main 함수다. cypher_code가 굉장히 중요해 보였다. 여기서 get_key가 굉장히 중요해 보였다. get_key의 리턴 값이 v7에 들어가는데 v7은 char형이다. 그러면 cypher_code에서는 어떠한 부분을 0x1C로 xor 한다고 볼 수 있다. get_key 함수다. 어차피 char형이 들어가므로 1바이트만 들어간다. 0x1C가 v7에 들어간다. (리틀엔디안) please_analysis_me는 elf 섹션 중 어느 곳을 암호화하는 것 같았다. opps_I_cannot_execute파일을 ida로 열어준다. 코드가 이상하다. shift+f7을 눌러 섹션을 본다. text를 0x1C로 xor 해줄꺼다. 0x1140~0x1AE5 부분 까지 ..

문제 revtine파일 하나가 있다. Ch0c0l4te_v3_1, Ch0c0l4te_v3랑 같은 친구다. 왜 두 개로 나뉜 것인지 모르겠다. Ch0c0l4te_v5는 "Ch0c0l4te"로 고정된다. 저 sub_1000036E0는 각 요소를 0xA와 xor하는 함수다. 여기서 free 해주는 것을 보아 분석할 필요가 없는 함수라는 것을 알 수 있다. 여기도 페이크 루틴이 많다. 여기가 가장 중요하다. sub_1000037F0 함수다. 암호화를 하는 것을 볼 수 있다. 여기에 인자로 들어가는 off_100008078가 많이 중요하다. off_100008078다. 문자열 중 이러한 문자열이 있다. 해석하면 나의 마음을 반대로 읽을 수 있느냐? 이런 뜻입니다. 여기서 복호화 코드를 만들어야 한단 것을 유추할 ..

문제 문제 파일들 UPX 패킹이다. 언패킹을 진행한다. 실행화면 ida에서 본 화면이다. 2를 입력했을 때 나오는 것들 여기서 1을 입력했을 때 sub_401080을 호출하는데 저게 굉장히 중요하다. 여기서 딱 수상한 루틴이 있다. 변수들 x32dbg로 풀었다. 메인함수 mov eax, dword ptr fs:[0x30] movzx eax, byte ptr [eax+0x68] NtGlobalFlag이다. 디버깅 중인지 아닌지 판단할 때 사용된다. 디버깅 중이면 0x70을 반환하고 아니면 0을 반환한다. 현재 eax값이 0x70인 것을 볼 수 있다. 패치를 통해 넘어가자 안티디버깅을 우회 했다. 이 부분에 bp를 걸어준다. 실행한다. 2를 입력한다. 그 후 여기에 bp를 걸고 1을 입력해준다. 이 함수가 ..

문제 메인함수다. 인자로 문자열 2개를 받는다. 2번째가 AA.....sks여야 한다. v15, v14에 인자1, 인자2를 복사한다. v15를 오픈하고 리턴 값을 v10에 저장한다. 두 번째 인자를 argv_s_2에 넣는다. 매우 중요한 핵심 루틴이다. v10(첫 번째 파일) 을 4바이트씩 끊어서 read_value에 집어넣는다. 그 후 for을 총 6번을 돌려 0x10과 xor 해준다. 그 후 두 번째 파일에 write를 4바이트씩 한다. 간단하게 코드를 만들 수 있다 name = "Data.enc" with open(name,'rb') as f: read_file = f.read() read_file = bytearray(read_file) write_byte = bytearray() for i in..