일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 코드엔진
- 라이트 업
- 리버스 엔지니어링
- 강의
- 해킹캠프
- write up
- 변수
- c언어
- 뭉뭉
- vsCode
- 리버싱
- 시탭
- probgame
- 라업
- reversing
- 풀이
- Basic
- reversing.kr
- write-up
- ShaktiCTF
- 워 게임
- hackingcamp
- 라이트업
- PYTHON
- 히공
- 2021
- 파이썬
- ctf
목록reverse engineering/reversing.kr (7)
히공
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 ..
ImagePrc 문제를 풀어보겠습니다. 실행화면 입니다. 그냥 아무거나 그리고 Check 버튼을 눌러보았습니다. WinMain 함수 입니다. WndProc 으로 보이는 함수 입니다. (인자도 WndProc 함수랑 같기 때문입니다) 27줄에서 CreateComatibleBitmap(v7,200,150)으로 비트맵을 만듭니다. msdn 주소 : 여기 비트맵의 크기는 200px, 150px 입니다. string 검색 Wrong을 찾았습니다. 여기서 x를 누르니 어디서 사용되는지 알려줍니다. 바로 여기 입니다. 24비트맵이란걸 알 수 있습니다. 여기서 비교를 해서 그린 그림이 맞는지 아닌지 검사합니다. x32dbg로 아까 그 부분을 열었습니다. 반복문 시작 전에 bp를 걸어주었습니다. 이런식으로 칠해주고 Che..
로또 문제를 풀어보겠습니다. 실행화면 입니다. 메인함수입니다. 64비트 문제여서 그런지 wprintf, wscanf_s 등 w붙은 함수를 사용하네요. x64dbg의 주석기능을 이용해서 코드의 설명을 넣었습니다. wscanf_s 부분에 bp를 걸고 f9를 입력해서 숫자를 입력해보겠습니다. 1 2 3 4 5 6을 입력했습니다. 그 후 system("cls")로 창을 이쁘게 정리해주고, sleep(0x1f4)를 해서 조금 쉬게 해줍니다. 여기서 랜덤으로 값을 가져오고, 그 값을 암호화 합니다. 그 후 [rsp+rbx*4+0x54] 부분에 순서대로 값을 저장합니다. 이것을 총 6번 반복합니다. 그 후 생긴 배열입니다. 이런 루틴이 있습니다. 총 6번 for문을 돌립니다. 비교 루틴이 보입니다. eax값은 1이고..
립케알 랜섬웨어 문제를 풀어보겠습니다. 이 문제 입니다. 이러한 readme.txt파일이 있습니다. EXE파일을 복호화 하라고 하네요. 파일 입니다. 실행파일 입니다. 한번 실행해보겠습니다. 자신이 나쁜놈이라면서 파일을 돈을 내고 받은 키값으로 파일을 복구하라고 하네요. 무섭기 때문에 키값은 입력하지 않겠습니다. (ㅠㅠ) UPX패킹 입니다. popad밑 jmp로 와서 f7을 눌러줍니다. 원본코드 입니다. Key : 부분에 bp를 걸고 f9를 눌러보겠습니다. 123456을 입력했습니다. fopen("file","rb")로 fopen을 호출합니다. fseek으로 파일 포인터를 0으로 맞춰주고, rewind로 파일 포인터를 0으로 맞춰줍니다. ftell은 파일의 크기를 반환해줍니다. [ebp-10]에 ftel..
메인함수 입니다. 헥스레이로 본 결과 입니다. sub_8048434가 scanf 였습니다. 입력받은것은 804A020에 들어갑니다. 그 다음 sub_804851 함수 입니다. scanf 에서 입력받은 804A020~804A025를 검사합니다. 간단하게 구할 수 있습니다. 정답 : L1NUX
립케알에 2번째 문제를 풀어보겠습니다. 이러한 프로그램입니다. Reame.txt입니다. 시리얼이 저 값일때 네임값이 뭐냐고 물어보는군요. ida 헥스레이로 분석해보니 Name값으로 어떤 문자열을 만들고 시리얼하고 비교하는 문제 같습니다. 아무값이나 넣어보고 디버거로 확인해 봅시다. scanf로 받는 부분입니다. [esp+10]부분이 입력한 네임값 입니다. 여기가 이 for문의 해당하는 부분입니다. 40107c에서 ecx에 esp+esi+C부분에 있는 값을 넣는데 보니까 0x10,0x20,0x30이 배열형태처럼 저장되어 있었습니다. ecx 에는 0x10,0x20,0x30이 번갈아 가면서 들어가고, edx 에는 네임의 요소들이 하나하나 들어갑니다. 그리고 둘을 xor연산한 값을 16진수 형태로 문자열로 만들..
립케알 문제중 첫번째 Easy Crack문제를 풀어보겠습니다. 실행화면 아무값이나 넣고 확인을 누르면 틀렸다는 메세지가 출력됩니다. 아까 봤던 틀렸다는 메세지로 찾습니다. 분기점 입니다. 분기점에서 올라가면서 분석해봅시다. 아무값이나 넣어보고 브포를 걸어서 분석해 봅시다. cmp로 [ebp+5]를 'a' 하고 비교합니다. 저희는 123456를 넣었는데 2부분하고 a를 비교하는것을 보면 ebp+4부터 입력한 문자열의 시작이라고 볼 수 있습니다. 일단 그러면 2부분을 a로 바꾸어서 보겠습니다. 5y하고 3456을 어떤함수에 인자로 넣어줍니다. 함수의 반환값이 0이여야 401135로 점프를 안합니다. (401135로 점프하면 틀렸다는 메세지 출력) strcmp인거 같으니 한번 3456부분에 5y를 넣어보겠습니..