본문 바로가기

전체 글

(64)
JVM JRE JDK • JVM (Java Virtual Machine): 자바 프로그램을 실행하는 가상 머신으로, 자바 코드를 플랫폼에 상관없이 실행할 수 있게 해줌 .class파일을 jvm이 설치되어있는 곳이면 어느곳이든 실행할 수 있게 해줌 • JRE (Java Runtime Environment): JVM을 포함하여 자바 프로그램을 실행할 때 필요한 라이브러리와 클래스들을 모은 환경 JVM과 자바 애플리케이션(.class)이 사용하는 라이브러리 • JDK (Java Development Kit): 자바 개발 도구로, JRE와 함께 컴파일러(Javac) 등이 포함되어 있어 자바 애플리케이션을 개발하고 실행할 수 있게 해줌 .java를 .class로 컴파일 시킬 수 있는 툴 JRE도 포함하고 있어서 컴파일 및 실행 시킬 ..
g++ 빌드 및 각 종 c++ 서버 관련 연동 g++ -c               - object파일로 컴파일 할때 옵션 -o name    -name.out으로 실행파일 빌드 옵션 -I              - include( header파일) 위치 추가 옵션 -L 라이브러리 위치           -라이브러리 검색 위치 추가 -l 라이브러리 이름             -라이브러리 추가 -static        -정적 링크로 빌드  -O0 -최적화 안함-O1 -기본 최적화-O2 - 더많은 최적화-O2 - 더더 많은 최적화 -g -디버깅 정보 포함 (디버그 모드 빌드) -std=c++11  - c++11을 사용 liba.a가 libb.a를 사용하고 있다면g++ -o main main.cpp liba.a libb.a 순서로 적어줘야 한다.g++ ..
2024.9.20 리버싱 공부(나뭇잎 책) 고급 안티 디버깅 기법 가비지 코드-의미 없는 코드를 대량으로 추가시켜서 디버깅을 힘들게 만드는 기법가비지 코드 중간 중간에 진짜 의미 있는 코드를 섞어버리거나 다른 안티디버깅 기법을 혼합해서 사용하면 디버깅이 힘들어짐. Breaking Code AlignmentA368과같은 디스어셈블리 코드의 가독성을 떨어뜨리는 기법 Encryption/Decryption(암호화/복호화)코드와 데이터를 숨기는 기법 주로 XOR을 씀 XOR을 두번하면 원래 데이터가 나오기때문데이터나 코드를 암호화시키고 사용 전에는 복호화해서 사용.주로 코드나 데이터 범위로 암호화 복호화 하지만 특수하게 실시간으로 코드를 재조합 하는 경우도 있음.1줄 실행하고 다음줄에선 그 다음줄 복호화 -> 복호화된 코드 실행 -> 그 다음줄에 또 복..
VPN 원리 VPN - 가상 사설망물리적인 네트워크가 아니라 소프트웨어적인 네트워크라 가상(Virtual)사용자의 트래픽을 암호화하고 보호하여 외부에서 쉽게 접근할 수 없는 개인적인 네트워크를 형성해서 사설망(Private Network) 원리VPN을 켜고 특정 서버에 접속을 시도하면 VPN클라이언트가 VPN서버에 접속을 시도해서 RSA와 같은 공개키 암호화 방식으로 세션키를 교환함.(세션키는 이후 데이터 암호화에 사용) 이로인해 VPN클라이언트와 VPN 서버간의 터널이 생성됨( 외부에서 접근하기 어려움) - 터널링 이제 VPN클라이언트가 VPN서버로 웹사이트나 서버의 주소를 세션키로 암호화해서 보냄 VPN서버는 복호화해서 목적지로 보냄 목적지 서버로부터 응답이 VPN서버로 오면 VPN서버는 암호화해서 VPN클라이언..
나의 개발 이야기 인공지능 활용.. 2024년 2월 어느날 메이플랜드라는 게임에 살짝 빠지게 되었다.   당시 나는 인공지능을 공부하고 있었기에 사냥이 반복적인 패턴이 있다는 것을 발견했고, 인공지능을 이용하면 이를 해결 할 수 있을 것이라고 생각했다.  몬스터 위치를 인식하고 잡고 아이템 먹고 반복하는 지루한 게임을 인공지능을 사용해서 이겨내고 싶었다.그래서 메이플 랜드용 인공지능을 개발하기 시작했다. 학교에서 인공지능 개발 툴을 사용한 경험이 있었기에 제작해보았다.처음에는 인식을 잘 못 하다가 수정을 하고 방법을 고민해서 구현해 보았다.정확도를 높이고 정보를 활용해 어떻게 코딩할지 고민하며 효율적인 방법을 고민 했다. 재밌었다. 결국 결과는 처음 예상한 것 보다 성공적이었다. 자세한 과정과 기능을 설명하고 싶지만 문제가 될 것 같아서 ..
grub 세팅 잘못해서 부팅이 안됨. grub세팅 잘못해서 부팅이 안 될 경우 현재 상태가 우분투 2개 윈도우 1개가 깔려있다. 그 중 새 우분투 세팅 잘못만져서 부팅이 안된다.  기존 우분투에 들어가서 고장난 우분투 디스크를 마운트하고 chroot로 고장난 우분투에 들어가서 vi로 잘못 만진 grub세팅을 바꾼다. 근데 update-grub이 안먹어서 grub.cfg를 수정해주었더니 정상적으로 됐다.
grub에서 iso파일 부팅 https://darktornado.github.io/blog/grub-boot-with-iso/   grub에서 바로 .iso 파일 라이브 부팅하기grub에서 바로 .iso 파일 라이브 부팅하기 May 17, 2023 리눅스 .iso 파일 파일을 리눅스 부트로더인 grub의 부트 메뉴에 추가해놓고, 그 .iso 파일을 통해 바로 라이브 부팅을 하도록 만들거에요. 그러니darktornado.github.io https://blog.encicle.com/ubuntueseo-grubleul-tonghan-iso-buting sudo vi /etc/grub.d/40_custom  위 블로그들을 참고해서 /etc/grub.d/40_custom에 아래와 같이 추가했다menuentry "Ubuntu 24" {   ..
2024.9.10 리버싱 공부(나뭇잎 책) IA-32 Instruction- 32bit Instruction(32비트 명령어)hex를 보고 명령어로 해석32비트 명령어는 instruction Prefixes, opcode, ModR/M, SIB, Displacement/ Immediate 이렇게 구성되고 여기서 필수는 Opcode hex를 보고 opcode 표에서 찾고 prefix인경우 다음코드가 opcode, ModR/M이 필요한 명령어의 경우 다음 hex가 ModR/M이런식으로 해석하는걸 반복해서 Hex보고 명령어로 해석할 수 있으면 좋다. 안티 디버깅-Static주로 디버거를 탐지하여 프로그램이 정상적으로 실행 안되게 하는 방법.디버거에 올리면 Run이 안되는 경우 -Dynamic디버거를 방해해서 원본 코드와 데이터를 확인할 수 없게 만드는..