제가 아주 싫어하는 angr문제입니다. 이것만 한 1달은 붙잡고 있었네요
이문제가 angr문제의 대표적 예신데 제 환경에서 일반적인 angr코드로는 풀리지가않더군요. 그래서 다른 코드로 푼것을 올리도록 하겠습니다.
DEFCON 2016 baby-re
import string import angr from angr.procedures.stubs.UserHook import UserHook def main(): p = angr.Project('baby-re') win = 0x4028e9 #가야되는 위치 fail = 0x402941 #피해야될 위치 main = 0x4025e7 #메인함수 주소 PASS_LEN = 13 flag_addr = 0x7fffffffffeff98 find = (win,) avoid = (fail,) def patch_scanf(state): print(state.regs.rsi) state.mem[state.regs.rsi:].char = state.solver.BVS('c', 8) scanf_offsets = (0x4d, 0x85, 0xbd, 0xf5, 0x12d, 0x165, 0x19d, 0x1d5, 0x20d, 0x245, 0x27d, 0x2b5, 0x2ed)#각 scanf의 offset목록 init = p.factory.blank_state(addr=main) # scanf 패치 for offst in scanf_offsets: p.hook(main + offst, UserHook(user_func=patch_scanf, length=5)) sm = p.factory.simulation_manager(init) ex = sm.explore(find=find, avoid=avoid) print(ex) s = ex.found[0] flag = s.solver.eval(s.memory.load(flag_addr, 50), cast_to=str) print("The flag is '{0}'".format(flag)) return flag if __name__ in '__main__': print(main())
흔히 쓰는 코드보다 엄청나게 길지만 따지고보면 비슷합니다. 게다가 속도도 훨씬 빠른것같아요
angr사용법을 다음번에 올려야겠네요....
'리버싱 관련' 카테고리의 다른 글
angr사용법(1) (0) | 2018.04.23 |
---|---|
codegate2018 final shall we dance? writeup (4) | 2018.04.08 |
facebook Video_XXXX.mp4 분석 (0) | 2017.12.20 |
Codegate 2017 angrybird 풀이 (0) | 2017.12.14 |
Codegate 2017 HelloProtector 풀이 (0) | 2017.12.13 |
WRITTEN BY
- Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다
,