[angr] CSCI-4968-MBE crackme0x03

2019. 3. 11. 17:29reversing/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
 
= angr.Project('./crackme0x03', auto_load_libs = False)
 
find_addr = 0x8048491
avoid_addr = 0x8048483
 
state = p.factory.entry_state()
 
= 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