전체 글 234

[군론](6)[군의 중심 & 군의 합성]

군의 중심 Z(G)Z(G) = {$z \in G \ | \ \forall a \in G, \ zg = gz$}Z(G)또한 G의 부분군이다Z(G)가 G의 부분집합임은 자명하고,eg=ge 이므로, e는 항상 Z(G)에 포함된다-> Z(G)는 공집합이 아니다.a,b\in Z(G) \Rightarrow ag=ga, \ bg=gb \ (단, \ \forall g \in G)bg=gb \rightarrow g=b^{-1}gb \rightarrow gb^{-1}=b^{-1}g$(ab^{-1})g = a(b^{-1}g) = a(gb^{-1}) = (ag)b^{-1}=(ga)b^{-1}= g(ab^{-1})$ -> 따라서, ab^{-1} \in Z(G)이다.-> 따라서 판별법 2에 의해 Z(G)≤G만약 G가 아벨군이..

군론 2026.03.30

[군론](5)[부분군]

subgroup (부분군)G의 부분집합 H가 G의 연산 *에서 스스로 군이 되는 군 H ($H \le G$)특징H는 항상 G의 e를 포함한다임의의 subset은 well-defined와 associative를 상속받는다.$H|G|>1인 군은 적어도 2개의 부분군을 포함한다trival subgroup(자명 부분군): {e}improper subgroup(비고유 부분군): G 부분군 판별법 1공집합이 아닌 G의 부분집합 H가closure: $\forall a, b \in H, \ a*b\in H$inverse: $\forall a \in H, \ a^{-1}\in H$을 만족 $\Leftrightarrow$ H는 G의 부분군이다증명 (=>)closure, inverse는 이미 증명,associative, w..

군론 2026.03.27

[군론](4)[군 테이블 & 군의 증명 절차]

group table유한군에 대해 항상 group table을 만들 수 있다.표를 만들고 각 행,열은 군 G의 원소를 나열한다단, 맨 처음 행,열은 항등원 e를 적는다각 표는 해당 행 * 열 의 연산결과를 채워넣는다예) $\mathbb{Z}_4$의 group table*012300123112302230133012 성질latin square각 행/열은 군의 원소를 "1개씩"만 포함 순서는 모름. 여러가지 조합이 있을 수 있음증명 가 군이라고 하자. (단, a, b, c는 서로 다른 원소)만약 어떤 행에 중복된 결과가 있다고 한다면,a * b = a * c 일 것이다.by cancellation law, b = c 이 된다따라서 b, c가 서로 다른 원소에 모순이 되므로, 같은 행에는 중복이 없다그리고..

군론 2026.03.26

[군론](3)[군의 법칙 & 위수]

군G 안에서 항등원 e는 유일하다증명군 가 주어졌을 때,항등원이 e, e'가 있다고 해보자,e = e * e' = e'따라서 항등원은 유일하다 군의 각 원소에게 역원은 유일하다증명군 가 주어졌을 때,$a, b, c \in G$이고, b, c가 a의 역원이라 해보자.a * b = b * a = e 이고, a * c = c * a = e 이므로,b = b * e= b * (a * c)= (b * a) * c (결합법칙)= e * c = c즉, b = c 이므로, 역원은 유일하다. 역연산군 G에 대해, $a, b \in G, \ (ab)^{-1} = b^{-1}a^{-1}$증명$(ab)^{-1}$은 (a \ b)의 역원이다.이떄, 군에서 임의의 원소는 유일한 역원을 가지므로,$b^{-1}a^{-1}$가 (a ..

군론 2026.03.25

[군론](2)[군]

군정의집합 G와 이항연산 *이 결합된 구조 이떄, 군이 되기 위해선 G, *가 다음 조건을 만족해야 한다Closure (닫힘)이미 *를 판단할 때 검증이 되어있으나,혹시 나중에 부분군에서 실수할 수 있으므로, 알아만 두셈Associativity (결합법칙)$\forall a, b, c \in G, \ (ab)*c=a(b*c)$Identity element (항등원)$\forall a \in G, \ ea=ae=a$인 e가 존재해야 함Inverse element (역원)$\forall a \in G, \ a^{-1}a=aa^{-1}=e$인 $a^{-1}$가 항상 존재해야 함예) 은 group인가? 1. +가 이항연산자인가? +은 정수에 대해 닫혀있고 잘 정의되었으므로, +은 ..

군론 2026.03.24

[군론](1)[이항연산]

이항연산정의어떤 집합 S 위의 이항연산 *는 SxS에서 S로 가는 사상이다이때, 연산자 *가 이항연산이 되기 위해선 다음 조건을 만족해야 한다.Closure(닫힘): 연산 결과도 S에 들어가야 함$\forall a, b \in S, \ a*b \in S$well-defined(잘 정의됨): 연산을 하면 무조건 결과가 존재하며, 1개로 나옴(a, b) is mapped to exactly one element $\in S$참고) well-defined와 단사는 다른것이다.well-defined: $a=b \Rightarrow f(a)=f(b)$ (함수의 정의)injectivity: $f(a)=f(b) \Rightarrow a=b$예) 정수에서의 덧셈은 이항연산이다. +: $\mathbb{Z} \tim..

군론 2026.03.23

[백신 개발](7)[레지스트리 키 치료]

레지스트리 키 치료이전까지 만든 악성코드는 그냥 .exe 파일을 삭제만 해도 치료가 되어서 그냥 치료 부분은 생략했다. 그러나, 악성코드 개발일지 12, 악성코드 개발일지 13에서 만든 악성코드는 단순히 삭제만 해서는 완벽한 치료라고 할 수 없고, 레지스트리 값을 다시 원복시켜줘야 한다. 대충 찾아보니 레지스트리 원복하는 방법은 크게 2가지가 있었다.보안 권장 값으로 하드코딩(...)스냅샷과 비교해 복원지금은 바뀐 레지스트리가 2개 정도라 하드코딩을 해도 되지만...스냅샷을 비교하는 것으로 구현해 보겠다 python에서는 winreg라는 라이브러리로 레지스트리에 쉽게 접근 가능하다! take_snapshot경로를 입력받아서 레지스트리 키를 딕셔너리 형태로 반환한다path, value_name을 받은 경우..

[악성코드 개발](13)[레지스트리 조작]

레지스트리 조작하기악성코드의 지속을 위해 시작 프로그램에 레지스트리의 값을 새로 만들었는데,이번에는 기존에 있던 레지스트리 값을 바꿔서 악성코드를 만들어보자! https://www.igloo.co.kr/security-information/%ec%9c%88%eb%8f%84%ec%9a%b0-%eb%a0%88%ec%a7%80%ec%8a%a4%ed%8a%b8%eb%a6%ac-%eb%b6%84%ec%84%9d%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%b9%a8%ed%95%b4%ec%82%ac%ea%b3%a0-%eb%b6%84%ec%84%9d-%ea%b8%b0/↑레지스트리 관련 정리 자료 https://m.blog.naver.com/heeju5517/221866538898↑공격에 ..

[악성코드 개발](12)[persistency]

악성코드의 지속https://rninche01.tistory.com/entry/%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-%EC%A7%80%EC%86%8D%EB%A9%94%EC%BB%A4%EB%8B%88%EC%A6%98↑지속 매커니즘이 잘 정리된 글 내 수준에선 레지스트리 조작, 시작폴더, 스케줄작업 쪽을 건드는 것이 나을 듯 하다. 레지스트리 조작가장 일반적인 지속 매커니즘 중 하나다. Run 레지스트리 키에 프로그램을 등록하면 윈도우 로딩과 동시에 프로그램이 알아서 켜진다이러면 악성코드도 한번 실행만 하면 눈치채기 전까지는 마음껏 살아있을 수 있다! Run과 관련된 registry key 모음HKCU\Software\Microsoft\Windows\CurrentVersion\R..

[백신 개발](6)[Import table을 이용한 탐지]

Import Table을 이용한 탐지(악성코드 개발일지 11에서 이어짐...)지난번에는 난독화(obfuscation)를 이용해 windows defender와 백신 개발일지 5에서 만든 백신을 우회하였다.이번에는 이것 또한 잡을 수 있게 해봐야겠다... 악성코드 분석어셈블리를 보면 쉘코드를 불러오는데 사용되는 주요 함수가 그대로 보인다 VirtualAlloc: 페이로드 저장용 공간 생성 VirtualProtect: 할당된 메모리를 excute 가능으로 바꾸기 CreateThread: 새 스레드 생성 및 페이로드 실행이런 함수를 사용한다는 특징으로 잡아볼 수는 없을까? Import Tablehttps://learn.microsoft.com/en-us/windows/win32/debug/pe..

[악성코드 개발](11)[obfuscated-shellcode-excution]

obfuscated shellcode excution(백신 개발일지 5에서 이어짐)지난번 만든 shellcode injection 코드는 windows defender에 잡혀버리고 단순한 시그니처 백신으로도 잡힌다...이번엔 저번에 배운 obfuscation과 hellshell을 이용해서 한번 real PC에서도 작동하게 만들어보자! 페이로드 준비예전에 만들었던 calc.exe를 실행하는 msfvenom에 bin으로 저장하는 옵션을 넣어 다시 페이로드를 만들고...msfvenom -p windows/x64/exec CMD=calc.exe EXITFUNC=thread -f raw -o payload.bin그리고 hellshell로 ipv4 인코딩을 시켜준다 (obfuscation)Hellshell.exe ..

[백신 개발](5)[시그니처 탐지]

내가 만든 바이러스를 잡아보자(악성코드 개발일지 10에서 이어짐)바이러스 분석 (local_shellcode_injection.c)지난번에 드디어 뭔가 악성코드라고 할 수 있는 것을 만들었다!(물론 calc.exe를 실행하는 쉘코드가 아니라 reverse shell 같은 걸 넣으면 진짜 악성이 되고...) 조금 더 분석하자면자체 실행형: .exe 파일을 클릭해서 직접 실행시켜줘야 한다.dropper: 페이로드를 가지고 있다가 타겟의 메모리에 drop한다local injector: 다른 프로그램이 아닌 자신이 실행된 프로세스에 injection한다.이걸 어케 잡느냐가 문제인데...저번처럼 파일 전체의 해시로 잡는 방법도 있겠으나, 만약 악성코드의 문자열 하나라도 바뀌면 무용지물이 될 것이다...이번에는 사..

[악성코드 개발](9)[페이로드 암호화]

Payload encryption난독화와 마찬가지로 페이로드를 저장할 때 백신이 알아차리지 못하게 하는 방법이다.장점: 시그니처 기반 탐지를 우회할 수 있다단, 행동으로 판단하는 휴리스틱 탐지에서는 소용없음...단점: 암호화된 데이터가 많을수록 엔트로피가 증가한다따라서 엔트로피도 고려하면 걸릴수도 있다 XOR 암호화가장 단순하고 가벼운 암호 기법 문자열 같은거는 걍 이런걸로 숨기자 암호 해독도 해당 키로 다시 XOR해주면 되는 만큼 쉽고 간편하다 원문 -XOR-> 암호문 -XOR-> 원문 1byte key인 bKey를 이용해 shellcode를 암호화 하기Void XOR(IN PBYTE pShellcode, IN SIZE_T size, IN BYTE bKey){ for (int i = 0..

[악성코드 개발](8)[페이로드 난독화]

payload obfuscation페이로드를 그냥 raw로 저장하면 분명 백신에 걸릴 것이다...이때 사용하는 것이 바로 페이로드 난독화다!저장은 난독화를 하고 메모리에 virtualAlloc등으로 메모리에 올리기 직전에 난독화를 해제해 페이로드를 돌린다!release 모드로 컴파일하기!IPv4 / IPv6 난독화셸코드의 바이트를 IPv4 / IPv6 문자열로 바꾸는 방법IPv4 난독화: 각 바이트를 10진수로 바꿔 4바이트씩 인코딩하기(따라서 패딩으로 4바이트의 배수가 되게 페이로드를 조정)예) FC 48 83 E4 를 IPv4 인코딩 252.72.131.228IPv4 난독화 해제:NTAPI의 Rtllpv4StringToAddressA를 통해 IPv4 -> byte으로 바꿀 수 있다https://..

728x90
반응형