일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- ShaktiCTF
- c언어
- 라이트업
- 워 게임
- 2021
- ctf
- PYTHON
- Basic
- 리버스 엔지니어링
- 뭉뭉
- vsCode
- 라업
- 라이트 업
- reversing.kr
- 히공
- 풀이
- 코드엔진
- 시탭
- write up
- web
- 드림핵
- 해킹캠프
- hackingcamp
목록리버스 엔지니어링 (7)
히공
보호되어 있는 글입니다.
이러한 문제 입니다. 실행화면 입니다. x32dbg로 열었습니다. f9를 눌러줍니다. 문자열들이 있습니다. 아까 봤던 문자열로 이동해줍시다. 코드가 보입니다. 위에 문자열 비교 함수가 있습니다. bp를 걸어줍니다. 1234를 입력합니다. 제가 입력한 문자열이랑 "677345"를 비교합니다. 정답입니다. 정답 : 677345
이러한 문제입니다. 패킹 되어있습니다. 이 곳에 bp를 걸고 f9를 눌러 실행해 줍시다. 원본 코드 입니다. f9를 눌러 실행을 했더니 안티디버깅 기법을 사용했는지 에러 메세지를 출력합니다. 호출하는 함수를 찾습니다. bp를 걸어줍니다. f9를 이용해 실행하니 여기서 멈췄습니다. 이 부분을 je로 변경해줍니다. 그 후 timeGetTime함수에 bp를 걸어줍니다. docs.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timegettime timeGetTime function (timeapi.h) - Win32 apps The timeGetTime function retrieves the system time, in milliseconds. The ..
position문제를 풀어보겠습니다. 맞다. 틀렸다를 출력하는 함수 입니다. 이 함수를 분석하겠습니다. 일단 while 조건문을 보면 name의 각 문자들이 a~z 여야만 한다고 합니다. signed int __stdcall sub_401740(int a1) { int v1; // edi int v3; // esi int v4; // esi __int16 v5; // bx unsigned __int8 v6; // al unsigned __int8 v7; // ST2C_1 unsigned __int8 v8; // al unsigned __int8 v9; // bl wchar_t *buf; // eax __int16 v11; // di wchar_t *v12; // eax __int16 v13; // di ..
메인함수 입니다. 헥스레이로 본 결과 입니다. sub_8048434가 scanf 였습니다. 입력받은것은 804A020에 들어갑니다. 그 다음 sub_804851 함수 입니다. scanf 에서 입력받은 804A020~804A025를 검사합니다. 간단하게 구할 수 있습니다. 정답 : L1NUX
12번을 풀어보겠습니다. 패킹은 안되어 있습니다. cmp, jne로 eax와 7A2896BF가 같으면 점프를 하지않고 맞췄다는 메세지박스를 출력합니다. 7A2896BF(16진수)는 10진수로 2049480383 입니다. 헥스 에디터로 오픈했습니다. (2번째 문제 풀때쓰던것) 이걸로 이제 맞았다고 출력되는 부분을 살펴봅시다. Congratulation부터 right key까지 출력되는 부분입니다. 2049480383이거를 복사 수정되었습니다. Key : 2049480383 영역 : 0D3B0D45 합치면 : 20494803830D3B0D45 입니다. 성공! 답 : 20494803830D3B0D45 ++ 추가로 컨트롤 + s로 저장하고 실행하면 오류가 뜹니다. 원인은 여기서 파일크기를 변경합니다. 이것이 문..
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..