일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리버싱
- 풀이
- 히공
- 리버스 엔지니어링
- write up
- probgame
- reversing.kr
- 코드엔진
- c언어
- 라이트 업
- reversing
- 2021
- 시탭
- 워 게임
- PYTHON
- 드림핵
- 강의
- ShaktiCTF
- vsCode
- 변수
- hackingcamp
- web
- 뭉뭉
- 해킹캠프
- ctf
- 라업
- 파이썬
- Basic
- write-up
- 라이트업
목록리버싱 (48)
히공
11번을 풀어보겠습니다. 이러한 문제입니다. UPX로 패킹이 되어있습니다. oep로 가는 jump발견 oep 발견 oep주소는 00401000입니다. Messageboxa의 인자는 4개여야 하는데 1개만 있습니다. 그러면 oep로 오기전 3개의 인자가 있겠지요? 그리고 nop의 개수는 12개. 12byte입니다. 12byte가 oep로 오기전에 있을것입니다. 그 훔쳐온 코드를 nop부분에 입력하면 00401000부터 재대로된 코드이기 때문에 oep는 00401000입니다. popad이후 12byte를 보니 0040736D~00407375가 12byte이다. 그리고 3개의 인자 딱 저 부분입니다. 저 부분이 stolenbyte가 되는것입니다. stolenbyte : 6A00680020400068122040..
10번을 풀어보겠습니다. 이러한 문제입니다. 실행했을때 이런 화면이 나옵니다. peid로 확인해보니까 Aspack 패킹이였습니다. Aspack은 압축해제 -> 압축해제 끝 -> 프로그램 실행 이 순서입니다. pushad -> 압축해제 -> popad -> oep로 분기 방식으로 원본코드를 볼 수 있습니다. pushad 발견 pushad 실행 후 esp값 변화 확인 esp우클릭 후 덤프에서 따라기기 클릭 이러한 것이 밑에 뜹니다. 여기서 우클릭 - 중단점 - 하드웨어, 엑세스 - Dword 클릭 이제 esp가 가르키는 메모리 주소에 접근할 때 bp를 걸어두고 실행시키게 되면, 메모리 상에 복구를 마친 뒤 OEP로 분기전 상태가 되며 F9누르면 bp전까지 실행됩니다. f9로 실행하고 나서 jne구문 발견 이..
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..
SSTF의 CRACKME101 문제를 풀어보겠습니다. ida로 본 메인함수 rbp-78이 Dtd>=mhpNCqz?N!j(Z?B644[.$~96b6zjS*2t& rbp-70이 scanf로 페스워드를 입력받는것 rbp-70(입력한 페스워드값)을 인자로 넣는것을 볼 수 있다. 똑같은 인자를 두번 전달함 (인자의 주소를 전달함) rbp-18이 받아온 인자값이다. rbp-20도 받아온 인자이다. rbp-8부분에 u7fl(3JC=UkJGEhPk{q`/X5UzTI.t&A]2[rPM9 이거를 넣는거를 볼 수 있다. 페스워드값으로 strlen을 쓰는것을 볼 수 있다. (call sub_10b0 이 strlen이다.) strlen의 리턴값만큼 for문을 돌리는 것을 볼 수 있다. 그리고 rbp-20[i] = rbp-8[i..
오늘은 코드엔진 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 :..
립케알에 2번째 문제를 풀어보겠습니다. 이러한 프로그램입니다. Reame.txt입니다. 시리얼이 저 값일때 네임값이 뭐냐고 물어보는군요. ida 헥스레이로 분석해보니 Name값으로 어떤 문자열을 만들고 시리얼하고 비교하는 문제 같습니다. 아무값이나 넣어보고 디버거로 확인해 봅시다. scanf로 받는 부분입니다. [esp+10]부분이 입력한 네임값 입니다. 여기가 이 for문의 해당하는 부분입니다. 40107c에서 ecx에 esp+esi+C부분에 있는 값을 넣는데 보니까 0x10,0x20,0x30이 배열형태처럼 저장되어 있었습니다. ecx 에는 0x10,0x20,0x30이 번갈아 가면서 들어가고, edx 에는 네임의 요소들이 하나하나 들어갑니다. 그리고 둘을 xor연산한 값을 16진수 형태로 문자열로 만들..
보호되어 있는 글입니다.