070-7738-xxxx 등에서 스팹 전화가 꾸준히 온다.

올때마다 블랙리스트로 하나씩 막아 두었는데

매번 뒷 4자리가 다르게 해서 오거나 070-4xxx 에서도 몇 달이 넘도록 전화가 온다.


그래서 전화번호 앞자리만 가지고 막는 방법을 찾아봤는데...

전화 --> 설정 --> 블랙리스트에 가보면 wildcard로 전화 번호를 막는 방법이 있다.


070-7738로 시작하는 전화번호를 막을려면 0707738.* 이런식으로 막을수 있다고 써있다.

그런데 이게 안 먹힌다.


그래서 어쩔수 없이 하나씩 막게 했는데 도저히 안되겠어서 CM11 소스를 가져와 BlacklistUtils.java 소스에 로그를 남기는

코드를 집어넣어 놓고 해보았지만 로그에서는 db query를 넘기기 전까지는 잘된다.


결국 BlacklistProvider.java 쪽에 문제가 있는것을 확인하고 전화앱을 교체해 봤는데 ... 전화앱만 바꾸니 자꾸만 다운 되었다.

어쩔수 없이 복구..


좀 시간이 지난후에 한번 BlacklistProvider.java 소스를 자세히 봤다..


전화번호 블랙리스트는 com.android.providers.telephony/databases 에 있는 blacklist.db에 데이터를 집어 넣고

이를 sql query 로 가져와 매칭이 된것이 있으면 블럭시키는 구조를 가졌고 db 구조는 아래와 같았다.



_id

number

normalized_number

is_regex

phone

message

 1

 0707078xxxx

 +82707078xxxx

 0

 1

 0

 2

 0704198xxxx

 +82704198xxxx

 0

 1

 0

 3

 0704.*

 0704_%

 1

 1

 0

 4

 0707738.*

 0707738_%

 1

 1

 0


number 컬럼은 내가 입력한 전화번호이고, normalized_number는 나중에 필터링 할때 쓰는 번호,

is_regex는 와일드 카드 사용여부, phone은 전화번호 여부, message는 sms여부다.


일반 전화번호는 (예를 들어 0707078xxxx) normalized_number 에 "+"와 국제 전화번호 "82"가 들어가있는데

이상하게 와일드 카드에는 "+" 와 국제전화번호가 "82" 가 안들어가 있다.


DB query를 분석해도


select * from blacklist where "전화온 전화번호(국제전화번호)" like normalized_number;


이다.


아!!! 국제 전화번호를 앞에 넣거나 혹은 ".*0707738.*" 이런식으로 앞뒤에 와일드 카드를 넣어야 했던것이다.


결국 국제 전화 번호를 앞에 넣어 테스트 해보니 잘 작동 된다.

예)  0707738.* --> +82707738.*



*****************************************************************

정리) 전화  블랙리스트에 0707738.* 이런식으로 와일드를 사용하지 말고

+82707738.* 이런식으로 국제전화 번호를 앞에 추가 해서 넣거나

.*707738.* 이런식으로 앞뒤에 와일드 카드를 넣어써라.


+ Recent posts