일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 파이썬
- c언어
- write-up
- hackingcamp
- 드림핵
- 해킹캠프
- web
- 시탭
- 리버스 엔지니어링
- reversing
- ShaktiCTF
- probgame
- 라이트업
- write up
- ctf
- 히공
- vsCode
- 리버싱
- 2021
목록풀이 (32)
히공
문제 입니다. 실행화면 입니다. x32dbg로 열었습니다. 원본 코드를 복호화 하는 작업 같습니다. f9를 눌러줍니다. 문자열을 찾아줍니다. 실패 메세지로 이동합니다. 여기가 체크 하는 부분입니다. bp를 걸어줍니다. 비번값인 "1234"와 "LOD-59919-A0024900"를 비교합니다. 정답 입니다. ++ 페스워드 생성 루틴을 분석하겠습니다. 0x401127에 bp를 걸어줍니다. 를 입력해주고 Test를 눌러줍니다. for문을 돌려 페스워드 값을 만듭니다. def dword(a1): return a1 & 0xffffffff Name = input("input name : ") esi = 0 ecx = 0 edx = 0xA edi = 0 for i in Name: eax = ord(i)+1 eax+=..
이러한 문제입니다. 이런식으로 출력이 됩니다. x32dbg에서 No, that is not the.....를 찾았습니다. GetDlgItemTextA밑에 bp를 걸어줍니다. Name값을 가져옵니다. 그리고 GetDlgItemTextA의 반환값이 3이하면 틀렸다는 메세지를 출력합니다. 그 다음 GetDlgItemTextA에서는 비번값을 가져옵니다. lstrcmpA로 입력한 비번과 3265754874를 비교합니다. 입력했습니다. 반환값이 0 입니다. 근데 이상합니다. 현재 eax값은 0인데 0을 0으로 나누면 오류가 납니다. 이러한 오류가 뜹니다. 한번 더 F8을 누르니 정답이라고 뜹니다. 문자열 찾기로 성공 메세지로 왔습니다. 여기에 bp를 걸고 다시 실행해봤습니다. 다시 입력해 줍니다. 이 곳으로 와서 ..
이 문제는 windows 10에서 실행이 안됩니다. windows 7환경에서 실행해야 합니다. 이러한 문제 입니다. 실행화면 입니다. 메인 함수 입니다. 입력받는 부분 입니다. 핵심 함수 입니다. 1234를 입력하고 핵심 함수로 왔습니다. f7로 들어가겠습니다. 한 요소씩 C R A A A C K E D ! 하고 비교하는걸 볼 수 있습니다. 성공 정답 : CRAAACKED!
이러한 문제입니다. 패킹 되어있습니다. 이 곳에 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 ..
15번 문제를 풀어보겠습니다. 이러한 문제입니다. name, serial을 입력하고 Check it ! 을 누르면 정답인지 아닌지 확인합니다. 이런식으로 확인합니다. 패킹은 안되어있습니다. x32dbg에서 실패했을때 나왔던 Try Again으로 검색해보았습니다. 이런 코드를 발견했습니다. bp가 있는곳이 분기점 입니다. 한번 Name에 CodeEngn, 비번에는 1234를 넣고 f9를 눌러서 eax값과 45B844의 값을 확인해보겠습니다. eax값 입니다. 제가 입력했던 비밀번호 입니다. 덤프 따라가기로 45B844의 값을 확인해보겠습니다. (dword ptr 로 받아오니 4바이트만 비교합니다.) 0x6160 입니다. (리틀엔디안이기 때문에 반대로 봐야합니다.) 0x6160은 10진수로 24928입니다...
13번을 풀어보겠습니다. 정답을 구하라고 합니다. 그냥 정답을 입력하는 프로그램 입니다. C#으로 만들어졌습니다. 한번 디컴파일 해보겠습니다. dotpeek 으로 디컴파일 해보았습니다. visual studio로 열어주었습니다. str의 값을 알아내야 합니다. (C#을 몰라도 풀 수 있는 문제입니다. 저는 C# 몰라요.) 그냥 str를 출력하도록 변경 답 : Leteminman
12번을 풀어보겠습니다. 패킹은 안되어 있습니다. cmp, jne로 eax와 7A2896BF가 같으면 점프를 하지않고 맞췄다는 메세지박스를 출력합니다. 7A2896BF(16진수)는 10진수로 2049480383 입니다. 헥스 에디터로 오픈했습니다. (2번째 문제 풀때쓰던것) 이걸로 이제 맞았다고 출력되는 부분을 살펴봅시다. Congratulation부터 right key까지 출력되는 부분입니다. 2049480383이거를 복사 수정되었습니다. Key : 2049480383 영역 : 0D3B0D45 합치면 : 20494803830D3B0D45 입니다. 성공! 답 : 20494803830D3B0D45 ++ 추가로 컨트롤 + s로 저장하고 실행하면 오류가 뜹니다. 원인은 여기서 파일크기를 변경합니다. 이것이 문..