본문 바로가기

전체 글

레지스트리의 무선 AP 분석 [Python] - 레지스트리 무선 AP 분석 : 무선 네트워크의 연결에 대한 정보를 레지스터에서 갖고 있는데 해당 정보를 가져와서 읽는 것이다. 포렌식 수사에서도 사용된 일이 있는데 해당 경우에는 범인이 어느 장소에 위치해 있는지 확인하는 용도로 사용을 했다고 한다. from _winreg import * def val2addr(val): addr = '' for ch in val: addr += '%02x '% ord(ch) addr = addr.strip(' ').replace(' ', ':')[0:17] return addr def printNets(): net = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"+\ "\NetworkList\Signatures\Unmanaged.. 더보기
ADFGVX암호 코딩 [Python] from operator import itemgetter book = {'A' : 'AA', 'B' : 'AD', 'C' : 'AF', 'D' : 'AG', 'E' : 'AV', 'F' : 'AX',\ 'G' : 'DA', 'H' : 'DD', 'I' : 'DF', 'J' : 'DG', 'K' : 'DV', 'L' : 'DX',\ 'M' : 'FA', 'N' : 'FD', 'O' : 'FF', 'P' : 'FG', 'Q' : 'FV', 'R' : 'FX',\ 'S' : 'GA', 'T' : 'GD', 'U' : 'GF', 'V' : 'GG', 'W' : 'GV', 'X' : 'GX',\ 'Y' : 'VA', 'Z' : 'VD', '0' : 'VF', '1' : 'VG', '2' : 'VV', '3' : .. 더보기
코드에서 프로그램 과정 및 CPU [Reversing] 전처리기 : #include 같은 헤더 파일이나 메크로 파일을 만나게 되면 헤더파일을 삽입한다. 컴파일러 : 컴파일러는 3개의 단계로 나눠지며 'Front-end -> Middle-end -> Back-end'로 나눠진다. - Front-end 단계에서는 코드의 문법적 오류를 점검하고 중간언어(중간언어가 있으면 각 CPU 회사마다 언어에 대한 컴파일러를 갖고있지 않아도 된다.)를 생성한다. - Middle-end 단계에서는 변수의 정의와 선언이 잘 이루어졌는지 점검을 한다. 또한 코드에 대한 최적화를 어느정도 진행한다. - Back-end 단계에서는 최적화 단계를 한번더 진행하고 어셈블리어 코드를 생성한다. 어셈블러 : 어셈블러어로 만들어진 코드를 기계어로 바꿔준다. 어셈블리어와 기계어는 거의 대응하기 .. 더보기
범용레지스터 [Reversing] 범용레지스터에는 여러 종류가 있습니다. 산술논리 범용레지스터 : EAX, EBX, ECX, EDX 인덱스 주소 레지스터 : EDI, ESI 포인터 주소 레지스터 : EBP, ESP, EIP EAX : 산술 논리 연산값을 저장합니다. 'E'가 붙어있으므로 32bit 이고 AX는 16bit 입니다. 'E'는 'Extended'의 약자이며 2배 큰 크기를 의미합니다. EBX : 주소값을 저장하는 레지스터입니다. ECX : 반복 카운터 즉, LOOP 명령 사용시 ECX의 카운터 값이 -1 되며 반복되고 0이 되면 반복을 멈춥니다. EDX : EAX에서 연산후 넘치거나 나눗셈을 했을 때 몫과 나머지를 나눠야 할 때 EDX로 넘어가게 되고 FLAG 레지스터의 flag값을 확인하여 EAX의 연산값이 넘쳤는지 잦은 확.. 더보기
crack_me[1] 리버싱 [Reversing] Crack_me [1] 리버싱입니다. - x64dbg : 올리디버거와 같은 디버깅 툴입니다. 올리디버거는 업데이트가 끊킨듯 하여 x64dbg를 사용하였고 gui 환경도 더 깔끔한 편입니다. - PEview : 윈도우 PE 파일의 구조를 보기위한 툴입니다. 핵사값으로 PE 파일의 구조가 들어있습니다. - crack me [1]은 '컴퓨터에서 하드디스크를 CD-ROM으로 인식하게 만들어라' 라는 파일입니다. 먼저 해당 파일을 리버싱 하기위해 'x64dbg'에서 열어주고 'EntryPoint'를 찾아야 합니다. 'EntryPoint'는 프로그램의 시작위치로 디버거로 파일을 열었을 때 자동으로 중단점(Brack Point)를 잡아줄 때도 있지만 없을 때도 있습니다. 그럴 때 프로그램의 시작 위치를 찾는 여러 방.. 더보기
Caesar 암호 [Crypto] - Caesar 암호는 주어진 평문에 대하여 알파벳 순서에서 +3을 한 암호화 이다. 예를 들어 'ABC' 라는 평문이 주어지면 'DEF'가 되는 것이다. 주의할 점은 +3을 하고 마지막 부분 'XYZ'는 암호화를 진행하면 'ABC'가 된다. 시저암호에 대한 암호화, 복호화 코드를 파이썬으로 간단히 구현해 본다. temp = 'abcde' temp_list = list(temp) save = [] for x in temp_list: temp_ord = ord(x) temp_save = (((temp_ord + 3) - 97) % 26) + 97 save += chr(temp_save) print('cypher : ', "".join(save)) - 해당 코드의 출력값은 다음과 같다. - 현재 코드는 소문.. 더보기
Flag 레지스터 [Reversing] Flag 레지스터는 test, cmp 명령을 통해 즉, 조건문을 통과한 후 조건에 따른 참 거짓을 보여주는 레지스터입니다. 단순히 맞다 틀리다가 아닌 '어떤 상황이다.'를 알려주기 때문에 Flag 레지스터를 확인하는 것은 중요합니다. - 각각의 Flag의 의미는 다음과 같다. ZF : 비교 연산과정 후 두 값이 같으면 즉, 두 값을 뺏을 때 0이 되면 같다는 의미로 '1'로 셋트 된다. PF : 비교 연산 후 하위 1byte 중 1bit가 짝수 이면 '1' 홀수 이면 '0'으로 셋트된다. AF : 산술 논리 연산 후 하위 3bit에 올림 또는 내림이 발생할 경우 '1'로 셋트된다. OF : 산술 논리 연산 후 결과값이 넘칠 경우 '1'로 셋트된다. SF : 비교 후 최상위 비트가 0이면 양수 1이면 음수.. 더보기