전체 글 114

[CryptoHack] Extended GCD

베주 항등식 (Bezout's Identity) 두 정수의 최대공약수를 원래 두 수의 배수의 합으로 나타낼 수 있다. 이때 x 와 y 는 베주 계수(Bezout coefficient)라고 한다!! 정리하자면 GCD(a, b) = d라고 할 때, - ax + by = d를 만족하는 정수 x, y가 존재한다 - d는 정수 x, y에 대해서 ax + by로 표현할 수 있는 가장 작은 정수이다. - ax + by로 표현될 수 있는 모든 정수는 d의 배수이다. 확장 유클리드 호제법(Extended Euclidean algorithm) 위와 같은 베주 항등식과 비슷하게 확장 유클리드 호제법은 ax + by = d 라고 할때, d = GCD(a, b)에 대하여 (x, y)의 값을 찾는 효율적인 알고리즘이다!! 나중에..

[CryptoHack] Greatest Common Divisor

GCD(Greatest Common Divisor): 최대공약수 -> 두 숫자 (a,b)의 가장 큰 약수 ex) a = 8, b = 12 인 경우 a의 약수 = {1, 2, 4, 8} b의 약수 = {1, 2, 3, 4, 6, 12} 따라서 gcd(a, b) = 4 if 만약, a 와 b 가 소수(prime number)인 경우 then gcd(a, b) 는 무조건 1 이다. => gcd(x, y) = 1 인 경우, x와 y는 서로소(coprime number) 이다. Euclidean algorithm (유클리드 호제법, 유클리드 알고리즘) 두개의 자연수의 최대공약수를 구하는 알고리즘 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수..

XOR 연산 정리

공부하면서... 내가 헷갈렸던 부분 정리! 1. 왜 xor 연산을 하려면 바이트형식으로 바꿔서 해야하는걸까? -> 주된 이유는 xor 연산이 비트 단위 연산이기 때문에!! 파이썬에서는 정수형끼리는 xor 연산 가능!! (자동적으로 2진수로 바꿔서 실행됨) ex) print(2^4) # 결과: 6 그러면 16진수는 어떨까? ex) hex_A = 0x1A hex_B = 0x3F byte_A = int.to_bytes(hex_A, length=1, byteorder='big') byte_B = int.to_bytes(hex_B, length=1, byteorder='big') result = bytes(x ^ y for x, y in zip(byte_A, byte_B)) result_hex = int.from..

study/수학&암호 2024.01.03

[CryptoHack] You either know, XOR you don't

Quiz) 풀이) 1. 문제에서 주어진 값을 바이트로 변환했다. 2. key 값을 모르는 상태인데, XOR의 특징 중 하나인 A^B = C 이면 C^A = B 인 것을 이용하여 플래그의 처음 부분인 crypto{ 를 cipher와 xor 하여 거꾸로 key를 찾는 방법을 사용했다. 3. 이때 결과로 myXORke+y~~ 라는 문자열이 나왔는데 myXORkey 라는 텍스트로 실험을 해봤다. 4. 똑같이 cipher와 myXORkey 를 xor 했더니 답이 바로 나왔다! 결과

[CryptoHack] XOR Properties

XOR의 4가지 특징 Commutative(교환법칙): A ⊕ B = B ⊕ A Associative(결합법칙): A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C Identity: A ⊕ 0 = A Self-Inverse: A ⊕ A = 0 교환법칙(Commutative): XOR 연산은 순서에 관계없이 같은 결과를 얻음 결합법칙(Associative): XOR 연산은 연속된 여러 항목을 괄호의 위치에 관계없이 결합할 수 있음 XOR 연산의 항등원은 0 자기 자신과 XOR 되면 0 퀴즈) 풀이) 헥스값을 먼저 바이트로 변환하고 계산해야함!! 처음에 이렇게 풀었더니 다음과 같은 오류가 발생함.. 보니까 바이트배열끼리의 XOR 연산은 지원되지 않는것 같음! 따라서 하나하나 다 정수형으로 변환해줘야하는 것 같다..

[CryptoHack] XOR Starter

XOR 표현식 = ^ 2진수 예시) 0110 ^ 1010 = 1100 10진수를 XOR 하기 위해서는 2진수로 바꿔야한다. 문자를 XOR 하기 위해서는 각 문자를 유니코드로 바꾸고 다시 2진수로 바꿔서 계산해야함. quiz) Given the string label, XOR each character with the integer 13. Convert these integers back to a string and submit the flag as crypto{new_string}. 풀이) pwntools 라이브러리의 xor() 사용해서 쉽게 풀 수 잇음. 1. pwntools xor() 사용 하는 방법 2. 직접 xor 하는 경우

[논문] 윈도우 환경에서의 메모리 해킹 방지 시스템 연구

기본 정보 논문 저자: 김요식 , 윤영태, 박상서 게재처: 정보보증논문지 연도: 2005 요약: 역공학(Reverse Engineering) 기술이 진보함에 따라 컴퓨터 소프트웨어에 대한 불법 조작 및 변조 등의 위협이 증가하고 있으며, 인터넷에 공개된 단순한 도구를 이용하여 누구나 쉽게 크래킹(Cracking)을 할 수 있게 되었다. 자사의 소프트웨어를 위협으로부터 방어하고자 하는 제작사들의 노력과 이를 무력화시키고자 하는 소위 크래커들의 노력은 지금까지도 계속되고 있다. 이에 본 논문에서는 소프트웨어가 가지는 위협 모델과 크래킹 기술에 대해 분석 및 실험하고, 소프트웨어를 위협으로부터 보호하기 위한 윈도우 환경에서의 메모리 해킹 방지 시스템을 제안한다. 주제: Malware, reverse engin..

study/논문 2023.11.20

[코드엔진/CodeEngn] Basic RCE L13

실행파일을 열기전... 정적 분석을 하기 위해 IDA 로 돌려봤는데 오류뜨고 화면이 안 뜨네요... 일단 exeinfo로 열어서 파일을 살펴보겠습니당 언어가 C#으로 되어있고 .Net으로 되어있는것으로 보아 ILSpy로 볼 수 있을 것 같습니다 ^^ 우선 실행을 먼저 해보겠습니다 패스워드를 찾으면 되는 문제네용 ILSpy로 돌려봤습니다 ILSpy의 맛은 또 직접 실행할 수 있는거 아닐까요? 코드 저장하고 수정해봅시다 여기서 plainText를 암호화하여 생성하는 것을 볼 수 있고 우리가 입력한 값이 plainText와 같은지를 보고 있으므로 그냥 plainText를 프린트하면 될 것 같네요... 중간에 써주고 실행하면 나오네요 ㅎㅎㅎㅎㅎ

WARGAME/reversing 2023.11.13