본문 바로가기

반응형

분류 전체보기

[CodeEngn]코드엔진 Basic RCE L20 문제: 이 프로그램은 Key파일을 필요로 하는 프로그램이다. 'Cracked by: CodeEngn!' 문구가 출력 되도록 하려면 crackme3.key 파일안의 데이터는 무엇이 되어야 하는가 Ex) 41424344454647 (정답이 여러개 있는 문제로 인증시 맞지 않다고 나올 경우 Contact로 연락주시면 확인 해드리겠습니다) 일단 CRACKME3.KEY 라는 파일이 필요한 듯 하다. 그리고 그 key 파일이 18(12)만큼의 바이트가 있는지 확인하는 듯 하다. 이렇게 저장을 하고 실행해보니 잘 읽음을 확인했다. 다음과 같은 알고리즘이 나왔다. ESI와 BL값을 세팅함을 확인할 수 있었다. - BL에 0x41 값 저장 - ESI의 1byte를 AL 레지스터에 저장 - AL과 BL를 XOR하고 AL에.. 더보기
[백준알고리즘]10773번 제로 python 문제: 나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다. 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자! 입력과 출력: 입력: 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다. 정수가 "0"일 경우에 지울 수 있는 수.. 더보기
[Reversing.kr]Easy crack 1번 처음 화면으로 들어갔는데, 그렇게 눈에 들어오는 것은 없다. text strings를 확인해본다. 익숙한 문자열로 가보도록 한다. ESP + 0x5에 있는 값과 0x61과 비교해서 안 갖으면 401135로 간다. 401135로 가보니, 이 401135는 실패로 가는 길인 듯 하다. 어쨌든, 위에서 봤던 부분을 다시 본다. ESP + 0x5에 있는 값과 0x61과 같아야 한다. 61을 계산기에 돌려본다. 61을 10진수로 바꾸면 97이 나오는데 이에 대한 ASCII는 'a'이다. 그럼 ESP + 0x5에 있는 값은 a여야 한다. 여기 위에서부터 이 글자들이 붙어지는 듯 하다. 특히 ESP+0xA이 들어가 있는 부분을 보아, 그 뒤에 붙어지는 듯한 예감이 맞는 것 같다는 생각이 든다. 예측한 결과를 종합해보.. 더보기
[백준알고리즘]10828번 스택 python 문제: 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있으면 1, 아니면 0을 출력한다. top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 입력: 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,00.. 더보기
[codeengn]코드엔진 Basic RCE L19 문제: 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 밀리세컨드에 대한 내용이므로 call을 확인하면 될 것이다. 이 파일을 Ollydbg로 열어 Search for->All intermodular calls를 확인한다. 맨 위로 올라가면 된다. 그럼 시간에 대한 함수가 있는데 이러한 모든 함수에 BP를 건다. 좀 내려보니까 isDebuggerPresent 함수가 보인다. 뭔가 단서가 있을 듯 하여 BP를 걸어주었다. isDebugger가 있는 곳으로 이동해 JNE가 있어서 JE로 바꿔봤다. -> JE로 바꿨는데 이게 꺼지는 지름길이었다. 일단 JNE로 다시 바꾸고, timeGetTime함수가 있는 곳으로 이동했다. 바로 밑에 CMP가 있다. 조금 수상쩍지만 그냥 진행해본다. 좀 내려가다보면 여기로 오는.. 더보기
[codeengn]코드엔진 basic RCE L17 문제: Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가 힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자) 일단 Ollydbg로 열어서 Key값을 넣고 Name에 아무거나 한자리를 넣어보도록 한다. 문제에선 한글자라고 분명 그랬는데, 'Please Enter More Chars' -> 글자를 더 넣어라 라고 되어있다. 이 부분을 바꿔봐야겠다. 일단 text strings를 확인한다.(Search for -> ~referenced text strings) 이 부분으로 이동한다. 이 부분으로 이동한 후, 위를 봤는데 EAX가 3이랑 비교하는 걸 보니, 3글자 이상이어야 이 부분을 통과할 수 있는 듯 하다.. 더보기
[백준알고리즘]1676번 팩토리얼0의 개수 python,c++ 문제: N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 입력: 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 출력: 첫째 줄에 구한 0의 개수를 출력한다. 예제: 10x9x8x7x6x5x4x3x2x1일 때, 10이 추가되는 부분은 10. 5x(짝수)로 2개가 곱해질 때이므로 예제의 출력에서 2가 나옴을 확인할 수 있다. 물론 5x(홀수)하면 0이 추가되진 않겠지만 팩토리얼이므로 5바로 옆엔 짝수가 올 수 밖에 없다 (5의 +1,-1이 옆에 올테니까) 이로써 생각해보면 5, 5x5=25, 5x5x5=125 -> 5의 배수 중 소수들 로 나누면 0의 개수가 나올 것이다(num은 500까지의 제한이 있으므로 625는 포함시키지 않는다) (+5가 있다는 것.. 더보기
[백준알고리즘]11653번 소인수분해 python,c++ 문제: 정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. 입력: 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. 출력: N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. 소인수분해: 소인수분해는 다들 알고 있듯이, 나눠지지 않는 수로 이루어진 식으로 나타난다고 쉽게 생각하면 된다. 예제: 소수로 이루어진 수들로 출력을 해야 하므로, while문으로 계속 돌면서 if문을 통해 나눠지면 print, 나눠지지 않으면 계속 돌리면 될 듯 하다. Python 간단하게 num을 입력받고, 소수 2부터 나눠보면 된다. 계속 돌면서 나눠지면 print하고, 아니면 +1을 해준다. num = int(input()); i=2 while num!=1 : if num%i == 0.. 더보기

반응형