[angr] CSCI-4968-MBE crackme0x03
2019. 3. 11. 17:29ㆍreversing/angr
[CSCI-4968-MBE] crackme0x03
이전의 문제들과 같이
알맞은 패스워드를 알아내는 문제이다.
ida로 바이너리를 열어보니,
입력값([ebp+var_4])과 [ebp+var_C] 값을 test 함수의 인자로 넘겨준다.
* ( [ebp+var_4(or C)] : ebp+var_4(or C) 값이 가리키는 값 )
test 함수로 들어가보면,
cmp를 기준으로 분기를 볼 수 있다.
두 인자를 비교해서
0이면(같으면) "Sdvvzrug#RN$$$#=," 문자열을 인자로,
0이 아니면(틀리면) "Lqydolg#Sdvvzrug$" 문자열을 인자로 shift 함수를 호출한다.
위 코드를 보면 더 자세히 알 수 있다.
shift 함수 내부를 보면
인자로 넘겨준 문자열을 디코딩 해주는 함수이다.
이를 파이썬으로 코드를 짜면 다음과 같다.
결과 :
"Sdvvzrug#RN$$$#=," : Password OK!!! :)
"Lqydolg#Sdvvzrug$" : Invalid Password!
따라서, 찾아야 할 주소와 피해야 할 주소는 각각
0x8048491 ("Password OK!!! :)" 출력),
0x8048483 ("Invalid Password!" 출력) 이다.
[code]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import angr p = angr.Project('./crackme0x03', auto_load_libs = False) find_addr = 0x8048491 avoid_addr = 0x8048483 state = p.factory.entry_state() s = p.factory.simulation_manager(state) s.one_active.options.add(angr.options.LAZY_SOLVES) s.explore(find = find_addr, avoid = avoid_addr) print('[*] FIND FLAG : ') print(s.one_found.posix.dumps(0)[4:10]) | cs |
[flag]
'reversing > angr' 카테고리의 다른 글
[angr] CSCI-4968-MBE crackme0x02 (0) | 2019.03.11 |
---|---|
[angr] CSCI-4968-MBE crackme0x01 (0) | 2019.03.11 |
[angr] CSCI-4968-MBE crackme0x00a (1) | 2019.03.10 |
[angr] ais3_crackme (0) | 2019.03.06 |
[angr] baby-re (0) | 2019.03.04 |