일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 변수
- 파이썬
- PYTHON
- Basic
- reversing.kr
- probgame
- reversing
- 시탭
- c언어
- ShaktiCTF
- vsCode
- web
- 히공
- 라이트 업
- 풀이
- 리버싱
- hackingcamp
- 리버스 엔지니어링
- 라이트업
- 코드엔진
- 해킹캠프
- 2021
- write up
- 강의
- 라업
- 드림핵
- ctf
- write-up
- 워 게임
- 뭉뭉
목록reverse engineering/CodeEngn (26)
히공
10번을 풀어보겠습니다. 이러한 문제입니다. 실행했을때 이런 화면이 나옵니다. peid로 확인해보니까 Aspack 패킹이였습니다. Aspack은 압축해제 -> 압축해제 끝 -> 프로그램 실행 이 순서입니다. pushad -> 압축해제 -> popad -> oep로 분기 방식으로 원본코드를 볼 수 있습니다. pushad 발견 pushad 실행 후 esp값 변화 확인 esp우클릭 후 덤프에서 따라기기 클릭 이러한 것이 밑에 뜹니다. 여기서 우클릭 - 중단점 - 하드웨어, 엑세스 - Dword 클릭 이제 esp가 가르키는 메모리 주소에 접근할 때 bp를 걸어두고 실행시키게 되면, 메모리 상에 복구를 마친 뒤 OEP로 분기전 상태가 되며 F9누르면 bp전까지 실행됩니다. f9로 실행하고 나서 jne구문 발견 이..
9번 문제를 풀어보겠습니다. 이러한 문제입니다. 자 StolenByte를 먼저 알아야 합니다. StolenByte StolenByte란 직역하면 훔친 코드 입니다. 패커가 훔친 코드의 일부분 입니다. UPX에서는 popad후 jmp전 일정 바이트를 넣습니다. 실행했을때 저런 messagebox가 나옵니다. pushad 발견 popad 후 jmp 원본 코드입니다. 뭐가 많이 비어있습니다. 어라? 이상하게 MessageBoxA를 호출하는데 push를 한번만 했습니다. docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxa MessageBoxA function (winuser.h) - Win32 apps Displays a modal..
8번을 풀어보겠습니다. 이러한 문제이다. UPX패킹이 되어있다. pushad발견 popad후 oep로 가는 jmp oep : 01012475 (처음 푸는 분들은 Success가 떠야 정상입니다.) 정답 : 01012475
basic 7번 문제를 풀어보겠습니다. 이러한 문제이다. 실행시켰을때 문자열을 가지고 찾아보자 GetDlgItemTextA를 호출하는 부분에 브포를 걸고 입력값을 받아와보자. 이런식으로 12345를 입력해보았다. GetVolumeInformationA를 실행하고 보니까 push했던 주소중 0x40225C에 로컬 디스크가 들어가는 것을 볼 수 있다. docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getvolumeinformationa GetVolumeInformationA function (fileapi.h) - Win32 apps Retrieves information about the file system and volume associa..
오늘은 코드엔진 basic 6번 문제를 풀어보겠습니다. 이러한 문제입니다. 실행시켰을때 입니다. UPX로 패킹이 되어있습니다. pushad 발견 popad 후 jmp 원본코드 그러면 OEP는 00401360 입니다. 문자열 찾기로 틀렸을때 나오는 Wrong serial!!! 로 이동해봅시다. 0040107D가 분기점입니다. 브포 걸고 실행한 다음에 12345 입력 후 Check Serial 클릭 401290을 호출한다. 그리고 내가 입력한 Serial이랑 AD56DFS547을 push한다. 반환값이 1이다. 일단 strcmp라고 추측해볼 수 있다. 다시 실행해서 AD46DFS547를 입력해보니 반환값이 0이다. 이제 f9로 실행을 하면 잘 동작한다. 그러면 Serial은 : AD46DFS547 OEP :..
05번 문제를 풀겠습니다. 이러한 문제 입니다. 실행시키면 이러한 창이 나타납니다. 문제를 풀기 전에 PEID라는 것으로 저 프로그램의 정보를 확인해 봅시다. 여기를 클릭하시면 다운하실 수 있습니다. (출처 : playthegame00.tistory.com/5) 실행시키고 05.exe를 열어보면 upx패킹이 되었다고 알려줍니다. 자 UPX 패킹이란 파일 크기를 줄이고 내부 코드와 리소스를 감추기 위한 목적으로 사용 됩니다. 실행 압축 방식으로 파일 내부에 압축해제 코드를 포함하고 있기 때문에 실행되는 순간에 메모리에서 압축을 해제하여 바로 실행할 수 있습니다 한마디로 어떠한 주소에 OPCODE(기계어)를 작성하고 그 작성한 주소로 jump하게 됩니다. x32dbg로 보면 pushad에서 멈췄습니다. UP..
4번 문제를 풀어보겠습니다. 이러한 문제입니다. 실행 했을때 이런식으로 뜨는군요. x32dbg로 실행했을때는 디버깅 당함이라고 출력됩니다. 자 그러면 문자열 검색으로 디버깅 당함을 검색해 봅시다. 여기를 들어가 봅시다. 보면 IsDebuggerPresent라는 함수의 반환값을 가지고 디버깅 당함, 정상을 분류하는것으로 볼 수 있습니다. 부가설명 : je,jne 는 zf(제로플래그)라는 것의 따라 점프를 할지 말지를 결정합니다. eax가 참일때 (0이 아니란 뜻) test eax, eax를 실행하면 zf가 0이 됩니다. je는 zf가 0일때 점프하지 않고, jne는 zf가 0일때 점프합니다. 같은 원리로 cmp도 zf를 바꾸는 역할을 합니다.(조금 달라요) 그러면 IsDebuggerPresent가 디버깅 ..