메인 함수에서 exit함수를 호출하지 않도록 수정해줘야 한다. 어셈으로 보자
cmp eax, 0 부분을 cmp eax, 1로 바꿔주면 된다.
보면 이런 코드가 대략 2천줄 정도 있는데 z3 아니면 angr로 풀라는 소리같다.
z3으로 풀면 너무 시간이 오래 걸리기 때문에 angr를 사용했다.
그전에 수정해야 할 것이 있다.
먼저 sub_40072A() 함수는 그냥 nop 처리 해주고
sub_4006f6 에서 dword_606060 값을 리턴하는데 이게 fgets의 입력 size가 된다.
이 부분이 현재 1이므로 21(0x15)로 바꿔주어야 한다.
이런식으로 fgets 인자값중 size 인자를 변수 n 대신에 0x15로 바꿔주면 된다.
이제 파일을 저장한 후 angr 돌리면 된다.
[Solve]
1 2 3 4 5 6 7 8 9 | import angr p = angr.Project("./angrybird") path_group = p.factory.simgr() path_group.explore(find=0x404fab, avoid=0x4005e0) print path_group.found[0].state.posix.dumps(0) #Im_so_cute&pretty_:) | cs |
'CTF' 카테고리의 다른 글
[AceBear Security Contest] secure login (0) | 2018.02.02 |
---|---|
[Codegate 2017] EasyCrack 101 (1) | 2018.01.30 |
[SECCON 2017] JPEG file (0) | 2018.01.20 |
[Defcon 2016] Baby-re (0) | 2018.01.18 |
[CSAW CTF 2017] tableEZ (0) | 2018.01.16 |