일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C언어 알고리즘
- BOJ
- 달고나bof
- c언어
- C알고리즘
- 8086CPU레지스터
- 보안
- 신경망구현
- 딥러닝
- 백준
- 딥러닝파이썬
- 파이썬신경망
- 스트림암호
- 항등함수
- 버퍼오버플로우
- 백준알고리즘
- FTZlevel10
- C언어알고리즘
- 알고리즘
- 파이썬
- 밑바닥부터시작하는딥러닝
- 인공지능
- 신경망 학습
- 신경망파이썬
- BOF
- 소프트맥스함수
- 머신러닝
- 정보보안
- 활성화함수파이썬
- 신경망
- Today
- Total
목록전체 글 (235)
HeeJ's
문제: 우선 파일을 실행시켜 보았을 때, 이렇게 두 가지 문구가 뜬 다음 파일이 종료된다. 파일을 살펴보기 위해 ollydbg로 열어주었다. 파일을 열자마자 PUSHAD라는 명령어를 볼 수 있었고, 이는 이 파일이 UPX로 패킹이 되어있다는 것을 뜻한다. OEP를 얻기 위해서는 이 파일을 언패킹해야하기 때문에 언패킹을 진행해주었다. 이 언패킹된 파일을 다시 ollydbg로 열어주면 OEP 부분과 Stolenbyte가 이루어져 내용이 사라진 부분을 볼 수 있었다. OEP는 00401000이고, 이 Stolenbyte를 찾기 위해 다시 언패킹되지 않은 파일을 ollydbg로 열어주었다. POPAD부분을 찾아주고, 그 밑에서 PUSH해주는 부분을 찾을 수 있었는데, 아까 위쪽에서 StolenByte부분이 12..
문제: 파일을 저장했는데 .exe 파일이기에 우선 그냥 실행해보았다. 이렇게 Name과 Serial을 넣는 칸이 있는데, Name은 CodeEngn으로 주어졌고, Serial에 아무 값을 넣어주고 Check를 해보았다. Try Again ! 이라는 문구가 떴다. 이제 이 파일을 분석해보기 위해 Ollydbg로 열어주었다. 그리고, 분기문을 찾아주기 위해 문자열을 검색해 성공, 실패가 나눠지는 곳이 있는지 찾아주었다. 그랬더니 아까 실패했을 때 뜬 "Try Again !"이라는 문자열과 성공하면 보일 것 같은 "You cracked ..." 문자열이 보인다. 그래서 저 문자열로 가서 윗부분에 CMP 구문이 있는지 찾아주었다. 그 위치에서 성공, 실패를 가르는 분기문이 될 것이기 때문이다. CMP 구문을 찾..
문제 M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64, 81, 100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최솟값은 64가 된다. 입력 첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10000이하의 자연수이며 M은 N보다 같거나 작다. 출력 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 완전제곱수가 없을 경우는 첫째 줄에 -1을 출력한다. 문제를 보고 차분하게 코드를 작성하면 된다 m = int(inp..
OEP(Original Entry Point) => Pack 되지 않은 정상적인 파일을 디버거로 디버깅했을 때의 시작 위치 실행 프로그램의 실제 시작 위치가 된다. OEP를 찾는 방법 1. 코드를 단순하게 분석해나가며 진행 2. Stack을 이용 3. Exception Handler를 이용
문제에 들어있는 c코드를 다운 받기 누르면 새 창에 코드를 띄워준다. serial 값을 인코딩해주는 문장을 찾을 수 있다. 저 내용을 그대로 디코딩 해주면 flag를 찾을 수 있다. 이 flag를 제출하면
ghidra로 babyMIPS 파일을 열 main함수를 찾아주고 내용을 보니, 여러 if문들이 있고, 그 밑에 무언가 flag와 비교하는 듯한 내용이 보였다. 윗 부분에서는 입력받는 값으로 예상되는 acStack36도 찾을 수 있었다. 바로 이 부분이었는데, flag는 data+uStack44*4 XOR uStack44 XOR comp+uStack44*4라는 것을 예측할 수 있다. 이 data 값과 comp 값을 찾기 위해 각각의 변수를 더블클릭 하면 우측 창에 이렇게 00 00 00 사이에 값들이 하나씩 존재하는 것을 확인할 수 있다. 그래서 uStack44 *4를 해주는 것 같다. comp도 찾아주고, 이 값들로 flag를 찾는 코드를 작성해주었다. 실행시켜보면 flag를 얻을 수 있다. 왠지 모르게..
ROT13 ; 카이사르 암호의 일종으로, 영어 알파벳을 13글자씩 밀어서 만든다. 이 flag를 rot13 decoder에 돌리면 값을 얻을 수 있다.