53일차
미션1
본인서버 점검
92번 본인 계정 백업 되도록 설정후 94으로 백업되도록 각자 조치
1,2,3 1 != 0 0 != 0
strncmp(buf,"reversing",9) => 0
0 != 0 > 거짓
if(strncmp(buf,"reversing",9) != 0) {
printf("Invalid password");
return -1;
}
ZF : 1
초기화 > ZF : 0
비교해서 값이 일치하면 ZF : 1
비교해서 값이 일치하면 ZF : 0 > ZF : 1
hidden_value= 0xdeadf00d
명령어 정리(항상 머리속에는 스택구조가 있어야 함)
mov eax, ebx EBX 레지스터 내의 값을 EAX 레지스터로 복사
lea eax,[ebx+8] EBX+8을 EAX에 저장함
test eax,eax 두개의 오퍼랜드를 비교 (AND 연산을 수행해보고 플래그를 설정함)
leave 함수에서 사용한 지역변수 스택을 비움
ret 스택에 저장된 주소로 복귀
jmp adddress 무조건 해당 주소로 옮겨감
F9는 종단점 있는곳까지 실행
F4는 선택까지 실행
F8은 함수안으로 들어가지 않고 실행
F7은 함수안으로 들어가서 실행
Ctrl+f2 다시 실행
Ctrl+G 주소 (따라갈 표현식 입력)
Shift+D 문자열 참조
51 00 07 51 00 08 00 48 65 6c 6c 6F 77 zz
51 00 07 51 00 08 00 48 65 6c 6c 6F 77 zz
51 00 07 51 00 08 00 48 65 6c 6c 6F 77 zz
51 00 07 51 00 08 00
48 : H
프로젝트 시간
트로이 목마 만들기
step1
일지쓰기 웹 사이트 하나 만들기
이름 메모 날짜 등록 > 끝날때까지 계속 저장 예정
step2
브릿지 어댑터로 설정
빅팀 서버 준비 : IP 할당
칼리 서버 준비 : IP 할당
해커는 칼리 중계서버 설치 및 작동 여부 확인
빅팀은 서버에 자바 다운로드 자동으로 되게 필요한 자료 찾기
자바는 자바 설치 및 이클립스 설치
Editplus로 자바 확인
집에 있는 자바교재 있으면 가져와서 소스코드 분석
messageRelayServer.py
from packet import Packet
class RelayServer:
runVirus : 5715
runClient : 7270
Vicitm : runVirus -> 5715
Client : Hacker -> 7270
def main():
r=RelayServer()
r.run()
if __name__ == '__main__':
main()
Packet.py 암호화 처리됨
class Packet:
def __init__(self):
self.toIP = ""
self.returnIP = ""
self.state = ""
self.length = ""
self.data = ""
def __str__(self):
return "!" + str(self.state) + "!" + self.toIP + "!" + self.returnIP \
+ "!" + str(self.length) + "!" + self.data
def rcvSizeOfCommand(self,s):
sizearray = []
size = 1
data = None
while data != "!":
data = s.recv(size)
if data != "!":
sizearray.append(data)
size = 0
for i in range(0,len(sizearray)):
size += int(sizearray[i]) * pow(10,len(sizearray)-i-1)
return size
def rcvIP(self,s):
iparray = []
size = 1
data = None
while data != "!":
data = s.recv(size)
if data != "!":
iparray.append(data)
return "".join(iparray)
def rcvTypeOfCommand(self,s):
data = s.recv(1)
if data == "!":
data = None
data = s.recv(3)
exc = s.recv(1)
if exc == "!":
return data
def rcvData(self,s,size):
if size is 0:
return ""
size += 16 - size%16 if size%16 is not 0 else 0
data = s.recv(size)
while len(data) < size:
data += s.recv(size-len(data))
return data
def rcvDataNoPadding(self,s,size):
if size is 0:
return ""
data = s.recv(size)
while len(data) < size:
data += s.recv(size-len(data))
return data
def construct(self, sock):
debug = False
if debug: print self
self.state = self.rcvTypeOfCommand(sock)
if debug: print self
self.toIP = self.rcvIP(sock)
if debug: print self
self.returnIP = self.rcvIP(sock)
if debug: print self
self.length = self.rcvSizeOfCommand(sock)
if debug: print self
if self.state == "100":
self.data = self.rcvDataNoPadding(sock,self.length)
else:
self.data = self.rcvData(sock,self.length)
if debug: print self
def padData(self):
import os
while len(self.data)%16 is not 0:
self.data += '\x0a'
def encryptData(self,key):
from Crypto.Cipher import AES
cipher = AES.new(key,AES.MODE_ECB)
self.padData()
self.data = cipher.encrypt(self.data)
def decryptData(self,length,key):
from Crypto.Cipher import AES
cipher = AES.new(key,AES.MODE_ECB)
self.data = cipher.decrypt(self.data)[:length]
def RSAEncryptData(self,key):
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
rsakey = RSA.importKey(key)
rsakey = PKCS1_OAEP.new(rsakey)
self.data = rsakey.encrypt(self.data)
self.data = self.data.encode('base64')
def RSADecryptData(self,key):
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from base64 import b64decode
rsakey = RSA.importKey(key)
rsakey = PKCS1_OAEP.new(rsakey)
decoded = b64decode(self.data)
self.data = rsakey.decrypt(decoded)
def send(self,sock):
sock.send(str(self))