본문 바로가기
반응형

Angr Tutorial For CTF9

08_angr_constraints #Angr Tutorial For CTF 이번 문제는 main함수에서 문자열을 입력받고, 해당 문자열을 특정 연산 후에 check_equals 함수에서 몇개의 문자가 맞는지 확인을 한다. 시작 주소는 scanf 이후로 잡고, buffer 변수를 만든다. start_address = 0x08048622 initial_state = project.factory.blank_state( addr=start_address, add_options = { angr.options.SYMBOL_FILL_UNCONSTRAINED_MEMORY, angr.options.SYMBOL_FILL_UNCONSTRAINED_REGISTERS} ) buffer = claripy.BVS('buffer', 16 * 8) buffer_address = 0x0804A050 initi.. 2022. 8. 27.
07_angr_symbolic_file #Angr Tutorial For CTF 문자열을 입력받은 후, ignore_me 함수에서 OJKSQYDP.txt에 값을 저장한다. 다시 main 함수로 돌아와 OJKSQYDP.txt 함수를 읽고, 일정한 문자열과 비교를 한다. 시작 주소는 memset이 끝나고 fopen 시작 부분으로 해준다. start_address = 0x080488E7 initial_state = project.factory.blank_state( addr=start_address, add_options = { angr.options.SYMBOL_FILL_UNCONSTRAINED_MEMORY, angr.options.SYMBOL_FILL_UNCONSTRAINED_REGISTERS} ) file 이름과 symbolic file 크기를 지정해준다. fread(buffer, .. 2022. 8. 26.
06_angr_symbolic_daynamic_memory #Angr Tutorial For CTF 이번엔 동적 할당을 한 변수가 나왔다. start_address는 scanf 이후로 한다. start_address = 0x08048699 initial_state = project.factory.blank_state( addr=start_address, add_options = { angr.options.SYMBOL_FILL_UNCONSTRAINED_MEMORY, angr.options.SYMBOL_FILL_UNCONSTRAINED_REGISTERS} ) # The binary is calling scanf("%8s %8s"). # (!) password0 = claripy.BVS('password0', 64) password1 = claripy.BVS('password1', 64) 동적 할당한다면 어.. 2022. 8. 25.
05_angr_symbolic_memory #Angr Tutorial For CTF sacnf로 전역변수에 값을 쓰고, 비교를 하는 함수다. 우선 %8s %8s %8s %8s 이므로 start_address를 scanf 이후로 맞춰주고, 변수들을 만들어 준다. 또한 8바이트를 받으므로 64(8*8)비트를 넣어준다. start_address = 0x08048601 initial_state = project.factory.blank_state( addr=start_address, add_options = { angr.options.SYMBOL_FILL_UNCONSTRAINED_MEMORY, angr.options.SYMBOL_FILL_UNCONSTRAINED_REGISTERS} ) # The binary is calling scanf("%8s %8s %8s %8s"). # (!) passw.. 2022. 8. 24.
04_angr_symbolic_stack #Angr Tutorial For CTF 음.. 이전 문제와 비슷한거 같은데.. scanf가 %u %u로 되어 있으니 시작 주소는 scanf 주소 이후로 맞춰준다. start_address = 0x8048697 initial_state = project.factory.blank_state( addr=start_address, add_options = { angr.options.SYMBOL_FILL_UNCONSTRAINED_MEMORY, angr.options.SYMBOL_FILL_UNCONSTRAINED_REGISTERS} ) * 시작주소는 scanf 이 후 어떤 주소든 상관없다. complex_function0 위로 잡으면 된다. 이 문제는 전과 같이 scanf로 받은 값을 레지스터에 저장을 안하고 스택에서 사용을 한다. 이래서 symboli.. 2022. 8. 23.
03_angr_symbolic_registers #Angr Tutorial For CTF 입력 받는 scanf 함수들이 get_user_input 함수에 들어있다. angr는 scanf에 %x %x와 같이 여러가지 입력을 지원하지 않는다. 따라서 시작 주소 기존의 entry_state가 아닌 scanf 이후로 맞춰둬야 한다. scanf는 get_user_input 함수에 있으니, 끝났을 때의 기준으로 맞췄다. start_address = 0x08048980 # :integer (probably hexadecimal) initial_state = project.factory.blank_state( addr=start_address, add_options = { angr.options.SYMBOL_FILL_UNCONSTRAINED_MEMORY, angr.options.SYMBOL_FILL_UNC.. 2022. 8. 22.
02_angr_find_condition #Angr Tutorial For CTF 음.. 1번 문제와 매우 같다. 하지만 이번 문제는 Good Job을 호출하는 부분이 많아 특정 주소를 못 적는다. 따라서 상태에 따라서 플레그를 출력 하게 해야 한다. # It is very useful to be able to search for a state that reaches a certain # instruction. However, in some cases, you may not know the address of the # specific instruction you want to reach (or perhaps there is no single # instruction goal.) In this challenge, you don't know which instruction # grant.. 2022. 8. 21.
01_angr_avoid #Angr Tutorial For CTF 흠.. 크기가 너무 커서 Hex-Ray가 작동하지 않는다. 이번 문제도 패스워드를 입력하면 complex_function에서 연산하고, avoid_me를 피한채로 maybe_good으로 들어가면 된다. avoid_me 에 들어가면 should_succeed가 0이 되므로 피해야 한다. import angr def main(): proj = angr.Project('./01_angr_avoid') init_state = proj.factory.entry_state() simulation = proj.factory.simgr(init_state) print_good = 0x80485E5 avoid_addr = 0x80485A8 simulation.explore(find=print_good, avoid=avo.. 2022. 8. 20.
00_angr_find #Angr Tutorial For CTF 문자열을 입력받고 해당 문자열을 complex_function으로 보낸다. complex_function에서는 어떠한 연산을 진행하고 return 한다. import angr def main(): # create project proj = angr.Project('./00_angr_find') # entry point init_state = proj.factory.entry_state() # create simulation simulation = proj.factory.simgr(init_state) # expected address print_good = 0x804867d # start explore simulation.explore(find=print_good) if simulation.found: .. 2022. 8. 19.
반응형