본문 바로가기

스터디

(58)
C++ 손건의 흑역사 (재미있는 C++ 문제) double a[2048 * 4] = {0,}, b[2048 * 4] = {1,};double c[2048 * 4] = {0,}, dummy[8],d[2048 * 4] = {1,}; 일 떄, 이중 포문을 돌린다고 했을 떄, 속도 차이가 있을까? 손건: 중간에 더미가 있으면 캐시가 오탐할 확률(?) 이 있으므로 위에가 더 빠르다. 우선 알아야 할 것이 있다. 1. Memeory fragmentation--> 메모리에 적재를 했을 때, 프로그램과 프로그램 사이에 적재 되어 있던 프로그램이 사라졌을 때, 새로 들어갈 프로그램이 빈 공간보다 클 경우에 메모리에 적재되지 못하는 현상을 메모리 단편화 라고 한다. A B -------- --------변수1 -------- 변수2 변수2 -------- 변수1 --..
C++ 에서 Reflection 을 지원하지 않는 이유 java나 C# 에서는 reflection 을 지원한다.하지만 C++에서는 reflection 을 지원하지 않는데,그 이유는 C#, Java C++primitive type class 있음 class 없음 (사용자 정의로 만들 수 있는 타입을 제외한 모든 타입. char, int 등) C#과 Java는 프리미티브 타입에 대한 클래스를 만들어 놓아서 상호 호환이 가능하다.하지만 C++에서는 그 클래스를 만들어 놓지 않아 호환이 되질 않는데, 왜 없는 걸까C#이나 Java는 타입에 대한 크기가 이미 결정되어 있다.하지만 C++은 결정되어 있지 않기 때문에, (머신 마다 크기가 다름 32bit,64bit 등)클래스를 만들지 못한다. (타입의 종속 X)--> C++ 의 목표는 자기보다 낮은 레벨의 언어를 만들지..
IDAPython ida pro Scripting 아이다 프로는 유명한 디스 어셈블 프로그램이다.주로 정적 분석에 쓰이는데, 최근 동적 분석으로도 쓰는걸 보았다.벨기에의 유명한 아키텍트가 개발한 아이다 프로는 개발자의 명성 처럼 뛰어난 능력을 자랑한다. 아이다의 강점으로는 다양한 플랫폼 지원과, IDC라는 자체 스크립트 언어를 가지고 있다.또한 개발자가 IDA의 플러그인 API를 사용할 수 있게 SDK를 제공하고 있다. IDA 파이썬을 설치한 후에, 우리가 이용할 수 있는 IDAPython 함수를 보자.IDA파이썬은 IDC와 완벽하게 호환된다. 즉, IDC가 지원하는 모든 함수를 IDAPython 에서도 사용할 수 있다.여기서는 주로 스크립트를 작성할 때 쓰는 함수를 살펴본다. 유틸리티 함수ScreenEA() : IDA 화면에 있는 커서의 현재 위치를 ..
10장 질문 보호되어 있는 글입니다.
윈도우 드라이버 퍼징 윈도우 드라이버를 공격하는 것은 이제는 버그 헌팅 뿐만 아니라 공격 코드 개발자에게도 일상적인 일이 됐다.몇년 전에는 드라이버에 대한 원격 공격이 몇개 있었긴 하지만,지금은 공격 대상 시스템에 대한 권한 상승을 위한 로컬 드라이버 공격이 훨씬 보편적으로 되었다.전에는 WarFTPD의 스택 오버플로우 버그를 찾아내기 위해 Sulley 를 이용했다. 한 가지 간과한 것은 WarFTPD가 사용자 권한으로 동작하고 있어서 사용자 권한밖에 얻지 못했다는 점.--> 원격으로 공격에 성공했어도 관리자 권한은 얻지 못했을 것이다. 만약 오버플로우나 Impersonation 공격 취약점이 있는 드라이버가 로컬에 설치되어 있는 경우, 그것을 이용하면 시스템 권한을 획득해 자유롭게 시스템의 모든 정보에 접근할 수 있다. 드..
my_ioctl_fuzzer.py import pickleimport sysimport random from ctypes import * kernel32 = windll.kernel32 # Defines for Win32 API CallsGENERIC_READ = 0x80000000GENERIC_WRITE = 0x40000000OPEN_EXISTING = 0x3 # Open the pickle and retrieve the dictionary fd = open(sys.argv[1], "rb")master_list = pickle.load(fd)ioctl_list = master_list["ioctl_list"]device_list = master_list["device_list"]fd.close() # Now test that we ca..
ioctl_dump.py import pickleimport driverlib from immlib import * def main( args ): ioctl_list = [] device_list = [] dbg = Debugger() driver = driverlib.Driver() # Grab the list of IOCTL codes and device names ioctl_list = driver.getIOCTLCodes() if not len(ioctl_list): return "[*] ERROR! Couldn't find any IOCTL codes." device_list = driver.getDeviceNames() if not len(device_list): return "[*] ERROR! Couldn't f..
ioctl_fuzzer.py import structimport randomfrom immlib import * class ioctl_hook( LogBpHook ): def __init__( self ): self.imm = Debugger() self.logfile = "C:\ioctl_log.txt" LogBpHook.__init__(self) def run( self, regs ): in_buf = "" # read the IOCTL code ioctl_code = self.imm.readLong( regs['ESP'] + 8 ) # read out the InBufferSize inbuffer_size = self.imm.readMemory( regs['ESP'] + 0x10, 4) inbuffer_size = struct..