Android 게임이 계속 해킹 당함 [닫힘]


143

그래서 우리는 이것을 여러 번 겪었습니다. 우리는 게임을 (저렴한) 출시하고 누군가가 그것을 해킹하고 거울에 올려 놓습니다. 모든 앱에 대해 Google 알리미를 설정하여 해킹을 수행하는 사람에게 매일 알려줍니다. 지금까지 Google에서 제안한대로 라이센스 서비스를 구현했습니다. 고유 한 장치 ID로 라이센스가 시작될 때마다 소금이 무작위로 만들어집니다. 애플리케이션이 처음 시작될 때 점검 서비스를 한 번 실행합니다. 그런 다음 키에 대한 512 문자 해시와 SharedPreferences와 비교되는 저장된 값을 생성합니다.

이제 한 번 확인하면 응용 프로그램이 차단되는 위치 일 것입니다. 우리의 바이트 코드는 검사를 시작하는 줄없이 보았고 다시 컴파일되었을 것입니다.

여기에서 이전에 코드가 깨지는 것을 보았을 때 코드를 난독 화하고 싶지 않습니다. 나는 좀 더 견고한 것을 원하고, 이것을 올바르게하는 법을 배우고 싶습니다. 이 시점에서 돈을 버는 것보다 배우는 데 더 관심이 있습니다. 사람들 중 2 %만이 해킹 된 버전을 찾을 것입니다.

지금까지 혼자서 게임의 여러 시작 영역에 배치되는 난수 생성기를 생각해 냈습니다. 라이센스가 시작되면 (예 : 50 회 중 1 회) 라이센스가 확인됩니다. 크래커가 각 경우를 제거하고 컴파일하고 제거하고 컴파일해야하기 때문에 해킹하기가 더 어려울 것입니다. 그러나이 방법은 여전히 ​​깨지기 쉽습니다 ... 그래서 너희들은 무엇을 제안합니까? 다시 한 번 저는이 보안 프로세스에 관심이 있으니 교육하십시오. 이것을 난독 처리 또는 타임 스탬프를 기준으로 주기적으로 확인하는 것에 대한 토론으로 바꾸지 마십시오.

감사


27
돈을 버는 것보다 배우는 데 더 관심이 있다고 스스로 말하지 않았다면 내 대답은 단순히 "두려운 가치가 없습니다"일 것입니다. 당신은 두통 자체에 관심이 있기 때문에 앞으로 나아갈 것입니다 (그러나 나는 당신에게 답이 없으며 다른 사람들처럼이 질문을 따를 것입니다).
Thiago Arrais

4
같은 게임이 계속 해킹당하는 경우 문제가있는 직원이 없다고 확신하십니까? 고려해야 할 가장 좋은 것은 아니지만 일어날 수 있습니다
Phil Lello

3
20k 줄 이상의 코드이지만 전체 프로세스를 직접 관리합니다.
BajaBob

3
@BajaBob 다음 당신은 두더지입니다 : D
Sulfkain

답변:


117

내 아이디어는 해커 증거는 아니지만 게임 해킹에 대한 관심을 일부 제거 할 수 있습니다.

프리미엄 모델

1) 처음 5-10 레벨을 무료로 만들어 사람들이 게임을 배우고 비용을 지불하지 않고 재미있게 놀 수 있습니다. 적은 것은 첫 번째 수준을 해킹하고 싶어하며 게임은 Freemium 모델에 의해 더욱 확산 될 것입니다.

쉐어웨어 / 클러스터 레벨 팩

2) 게임 레벨 또는 로직의 일부를 온라인 상태로 유지하십시오. 예 : 레벨 5 또는 10 또는 15에 도달하면 게임의 작은 부품을 다운로드하고 매번 게임에서 진행률 로그를 제출하고 가능한 값 + 해시 코드와 비교하여 유효성을 검증하십시오. 이로 인해 해킹 된 계정을 자동으로 폐쇄 할 수 있습니다.

스텔스 사기꾼 보호

3) 게임에 배치 한 "작은 경고 플래그"도 계산할 수 있습니다. 처음에 "유효성"을 확인하지 말고 게임 로직 자체에이 플래그를 작성하지 마십시오. 아무도 그것을 찾지 않기 때문에 게임 플레이를 중단시키지 마십시오. 그런 다음 사용자가 레벨 몬스터의 끝에 도달하면 기록 된 경고 플래그가 있는지 확인하십시오. 이것들은 게임 안에 표시되지 않으므로 해킹 된 에디션을 모르는 사용자는 몇 시간 / 일 동안 플레이 할 수 있으며 게임에 "버그"가있어서 게임을 마치거나 다음 레벨로 진행할 수 없다는 것을 갑자기 깨달을 수 있습니다. 사용자가 모르는 것은이 버그는 해킹 된 클라이언트에서만 발생한다는 것입니다.

결론

크래커보다 똑똑합니다. 일이 끝났다고 생각하도록 속이십시오. 복사 방지를하고 고급 크래커가이를 제거 할 수 있음을 알고 있어야합니다. 그러나 그들은 균열이 완전히 작동하는지 확인하기 위해 50 레벨을 재생하고 싶지 않을 것입니다.

그들이이 문제를 깨닫고 나면 그것들도 깨지기 시작할 수 있습니다. 그러나 게임을 레벨 팩으로 나눈 경우에도 각 팩 다운로드간에 유효성을 검사 할 수 있습니다. 따라서 해킹 된 클라이언트 해시 데이터를 받으면 예외를 실행하고 클라이언트에서 게임을 중단하십시오. 혹시 게임이 추락했습니다. 해킹 되었기 때문에 말하지 마십시오. 프로그램 오류가 발생할 수 있습니다. :-)

다시, 그것은 해커 증거가 아닙니다. 그러나 다음 게임으로 넘어갈 정도로 짜증이 날 수 있습니다. 마지막으로, 게임을 정기적으로 업데이트 할 수 있으며 최신 버전 만 "레코드를 게시"할 수 있어야합니다. 따라서 활성 사용자는 계속 업데이트해야합니다.


5
와우, 멋진 아이디어. 이 모든 것을 정말로 고맙게 생각하고 레벨을 만들어 서버에 게시하고 그에 대한 유효성 검사를 고려하지도 않았습니다. 버전 ... 좋은 생각입니다. 모든 사람이 업데이트를 유지하고 부적합하게 만들지 마십시오. 고마워, 잠시 동안 바쁘게 해줄거야!
BajaBob

12
한숨, 안타깝게도 답을 +2 할 수 없음 :) 한 의견 : 문제가 해적판 게임에 있다는 것을 어떻게 보여줄 수 있습니까? 해적판에서 게임이 버그가 있거나 이상한 경우 사람들은 게임이 버그라고 생각하고 포럼의 게임을 악의적으로 생각할 수 있습니다. 청중이 많은 포럼이 많지 않기 때문에 이것이 Android에서 큰 문제라고 생각하지 않지만 "복사본 사본이 제대로 작동하지 않을 수 있습니다."
EboMike

3
1978 년부터 TRS80에서 복제 방지 기능이 제거되면 무작위로 작동하는 게임을 기억할 수 있습니다. 유효성 검사는 1 회 뿐이며,이를 제거하면 자유롭게 게임을 복사 할 수 있지만 이상한 게임 플레이 오류는 합법적 인 사본에서는 발생하지 않으며 해킹 된 사본에서만 발생합니다. 아무도 그것이 개발자의 잘못이라고 생각하지 않았습니다. 우리는 무엇이 일어 났는지 알았습니다.
Fixee

1
@EboMike 필자는 복사 방지에 대한 내 아이디어의 강력한 부분이 "가능한 한 정상적으로 작동하는 것"이라고 생각하며 크래커에게 불쾌한 보호 체계가 무엇인지에 대한 단서를 제공하지도 않습니다. 이것은 그들 중 더 호기심 많은 사람들이 보호를 사냥하게 만들 것입니다. 그것의 재미를 위해. 많은 사람들이 돈을 위해 돈을 쓰지 않는다는 것을 기억하십시오. 따라서 유혹하지 마십시오. 그냥 캐주얼하게 행동하십시오. : o) 그들보다 똑똑하다.
BerggreenDK

2
@Fixee and others 최근 배트맨 아캄 망명 게임은 그와 비슷한 것을 가지고있었습니다. 그런 다음 누군가 포럼에서 "버그"에 대해 불평했을 때 개발자는 능숙하게 "게임의 버그가 아니라 도덕적 코드의 버그"라고 말합니다.
Nzall

20

나는 잠시 동안 apk 디 컴파일과 해킹을 해왔다. (warez는 아니지만 대부분 xda 개발자 정책을 준수하는 Google 앱과 Android 프레임 워크에 대한 모드와 해킹).

smali를 읽는 법을 배운 후에는 원래 Java 코드를 읽는 것과 거의 비슷합니다 (그러나 더 많은 LOC가 있음). 따라서 키를 확인하기 위해 추가 한 코드를 찾아서 삭제하거나 교체 할 수 있습니다. 매번 재 컴파일 할 필요가 없으며 (일부 검색은 유사한 코드 조각을 찾기 위해 기적을합니다), 컴파일 / 재 컴파일주기를 찾아야하더라도 1-2 분이면됩니다. 디 컴파일하기 : 모든 것은 apktool과 apkmanager에 의해 자동화됩니다.

말하지만, 당신에게 제안하는 것은 일종의 온라인 스코어 테이블 또는 이와 유사한 것을 구현하는 것이며, 사용자가 온라인으로 스코어 테이블을 볼 때 구현 한 해시 코드를 확인하고 관련 gmail 계정과 비교할 수 있습니다. 그렇게하면 해킹을 Google에보고하고 warez 사용자에게 불쾌한 메시지를 보내 왜 불법인지 설명 할 수 있습니다.

물론, 점수 테이블을 제거하기 위해 새로운 핵을 구현할 수 있지만, 이는 warez에 대한 관심을 줄입니다.

행운을 빕니다.


최신 정보

이 질문에 대답을 조사한 후 : APK에 주입 코드 (정말에 대한 아마존의 DRM 메커니즘), 나는 아마존이 애플 리케이션을 보호하는 방법에 대해 조금 알 수 있습니다 : 그것은 방법 설치 타당성을 검사하기위한 포함 사방 (당신이 예를 볼 수 있습니다 그 질문에 대한 대답에서 어떻게하는지). 이로 인해 앱을 해킹하려는 시도는 어렵지 않지만 지루합니다. 그것의 : 해커가 많은 반복 작업을하고 너무 많은 시간을 보내고 싶어하지 않을 것이다 : 그 강력한 포인트입니다 믿고 도전하지 과의 지루한. 그 접근 방식에서 볼 수있는 주요 결함은 물론 유효한 답변을 반환하기 위해 Amazon 앱 자체를 해킹 할 수 있다는 가능성입니다. 그러나 현재 해시 검사를 방법에 흩어져있는 온라인 검사와 혼합하면 해킹 당할 가능성이 크게 줄어 듭니다.


3
많은 사람들이 "집에 전화하기"앱에 문제가 있다고 언급해야합니다. 개인적으로, 그것은 어리석은 일입니다. 안드로이드 폰은 너무 자주 여러 가지 방법으로 '전화를 집에 전화'합니다. 실제로 중요하지 않으며 익명 라이센스 확인 검사의 문제는 무엇입니까? 아직도 포기하고 싶었습니다. 어떤 사람들은 특히 집에 전화하지 않을 때 "집에 전화하기"에 대해 큰 악취를냅니다.
EboMike

3
글쎄, 사람들이 앱이 '집에 전화'하고 사용자에게 알리지 않으면 문제가있을 수 있음을 이해할 수 있습니다. 그러나 웹 기반 점수 표는 기꺼이 연결하는 사용자이기 때문에 해결합니다
Aleadam

사실, 일단 "익명으로"점수를 업로드하고 Gmail 계정 해시를 보내야하는 연결을 사용하면 다른 문제입니다. 다시 : 나에게. 나는 이것이 완벽하게 합리적이라고 생각하고 개인적 으로이 계획을 내 자신의 응용 프로그램에서 구현하고 싶습니다. 불만을 제기하는 사람들은 소수에있을 것입니다.
EboMike

소스 코드를 다운로드하는 대신 왜 프레임 워크를 디 컴파일하겠습니까?
Phil Lello

1
@ 필자는 touchwiz 또는 FW의 소스 코드에 액세스 할 수 없으므로 특정 전화를 개조하려는 경우 때로는 가장 쉬운 방법은 디 컴파일하고 smalis를 변경하는 것입니다.
Aleadam

20

이 게시물에서 내 솔루션에서 가져온 apk cracked

자체 라이센싱 라이브러리 구현

또한 Google I / O 2011 YouTube 녹화에서이 내용을 확인하시기 바랍니다.

해적 피하기와 뱀파이어 막기

편집하다:

해적피하고 뱀파이어를 멈추는 발표 노트

몇 가지 기본 요점


위의 링크는 항상 링크 된 페이지로 이동하지 않는 것 같습니다. 때때로 작동하며 다소 OS 및 브라우저에 따라 다릅니다. 따라서 #%3ar.page.15URL 의 끝 을 기록해 두십시오 . 해당 페이지로 자동 리디렉션되지 않으면 링크를 확인하여보고자하는 페이지의 위치를 ​​확인하십시오.
TryTryAgain

1
좋은! 나는 그들이 Freemium을 믿고 게임 내에서 특정 "오류"를 숨기고 있음을 알았습니다 (라이센스 기술 사용). Android 전용 라이센스 서버 대신 크로스 플랫폼 솔루션을 원합니다. 하지만 흥미로운 것도 있습니다.
BerggreenDK

btw. 그것의 재미,이 답변은 15 엄지 손가락, 내 90 이미 교차하고 정답을 고려하지 않습니다 :-)
BerggreenDK

8

나는 당신이 실제로 난독 화하지는 않는다는 것을 알고 있지만 실제로 이것에 반응해야합니다.

여기에서 이전에 코드가 깨지는 것을 보았을 때 코드를 난독 화하고 싶지 않습니다. 나는 좀 더 견고한 것을 원하고, 이것을 올바르게하는 법을 배우고 싶습니다.

ProGuard는 내 경험에서 매우 신뢰할 수 있으며 AIDL과 같은 몇 가지 고급 기능과 Java 메소드를 호출하는 기본 코드를 사용하지만 문서를 읽고 올바르게 작업하는 데 약간의 작업이 필요하지만 ProGuard는 매우 안정적이며 앱을 최적화합니다.

사용자 지정 보안 / 암호화 트릭은 좋지만 난독 화없이 겸손한 의견으로 물에 돌을 던지는 것과 같습니다.

몇 달 동안 프로덕션 환경에서 ProGuard를 사용해 왔으며 완벽하게 작동합니다.

배우고 있다면 ProGuard 매뉴얼을주의 깊게 읽고 실험하고 출력 로그를 검사하십시오.


읽을 수있는 모든 것은 디 컴파일 될 수 있으며, 이는 단지 CPU 성능과 스텁의 문제입니다. 난독 화는 여전히 코드를 디 컴파일 / 비난 독화하는 동안 코드를 실행하도록 허용하지만 크래커는 여전히 실행중인 버전을 원본과 비교할 수 있습니다. 크래커를 지연 시키거나 경험이 적은 크래커를 중지시킬 수는 있지만, 절대 안전하지는 않습니다.
BerggreenDK

4

유능한 프로그래머가 많을 확률은 100 %입니다 (모든 프로그래머에게 적용됨). 그리고 그것이 사실이라면, 당신은 해킹을 고칠 수 없습니다. 그러나 파산하기 위해 많은 시간과 노력을 들일 수 있습니다.

진지한 돈을 벌고 싶다면 대상 사용자 그룹과 행동 과학에 대한 연구가 필요합니다. 게임을하는 사용자가 새로운 돈을 벌게해야합니다.

게다가, 당신은 모든 것을 잘못 알았습니다. 해커는 사용자 기반에서 가장 활동적인 회원이며 의도하지 않은 방식으로 행동합니다.

예를 들어 Zynga 게임을 Facebook에서 가져 가면 해킹 당했다고 생각하십니까? -물론 약 +100000 명의 플레이어 만 플레이 할 수 있습니다. 왜냐하면 당신은 모든 것을 자동화하는 봇을 사용할 수 있기 때문입니다.

실제 사용자의 거대한 활성 사용자 기반 봇넷을 가지고 아카이버 유형의 게이머가 게임을하고 싶어합니다. 만약 당신의 플레이가 멋져 보인다면, Avarage Joe도 플레이하고 싶어합니다. Avarage Joe가 플레이하면 친구가 놀고 싶을 것입니다. 아마도 다른 것을 신경 쓰지 않을 것입니다. 아마 친구보다 나아지거나 시간을 죽이거나 대화 할 것이 있습니다. Avarage Joe의 친구는 Joe보다 더 나아지기 위해 기꺼이 돈을 지불 할 가능성이 높지만, 오히려 네가 더 나아질 수있는 것에 투자하고 싶습니다.

실제 가치가 무료로 게임을하고 있다면 무료 해킹 된 버전을 사용하는 사용자는 그 비용을 지불하지 않았을 것입니다. 그러나 당신은 Avarage Joes와 그들의 친구 일 것입니다. 따라서 이것은 가장 저렴한 광고와 같습니다. 대규모 사용자 기반으로 돈을 벌고 싶다면 레벨과 그래픽을 약간 변경하여 새로운 버전의 게임을 만드십시오.



2

정말 흥미롭고 혼란스러운 질문입니다. :-) 실습으로 Amazon을 통해 앱을 출시하려고 할 수 있습니다. 그들 자신의 DRM 메커니즘을 가지고있다. ProGuard보다 잘 작동하는지 궁금합니다 ...


1
오늘 현재 Lucky Patcher 앱은 Amazon DRM도 깨뜨 렸습니다! ProGuard 외에도 다른 솔루션은 DexGuard 일 수 있습니다. 그러나 DexGuard는 구입하는 데 수백 유로가 들지만 코드를 불법 복제하지 못하도록 막을 수는 없습니다.
ChuongPham

2

내 의견의 핵심 요소 중 하나는 코드를 분산시켜 한곳에 모두 포함시키지 않는 것입니다. 라이센스를 검색하고 확인하는 LicenseChecker.checkLicense ()라는 함수가 있으면 즉시 비활성화 할 수 있습니다.

당신이 가진 한 가지 장점은 크래커가 코드의 주석을 볼 수 없으며 (난독 화하면 메소드 / 변수 이름) 이상한 것을 발견한다는 것입니다. 한 활동의 ​​onCreate ()에서 라이센스 ID를 얻습니다. onResume ()에서 확인할 다른 값을 얻습니다. 스레드를 작성하고 검사를 수행하십시오. 그런 다음 관련이없는 다른 코드 조각 (플레이어 컨트롤 일 수도 있음)이 값을 가져 와서 비교하여 결과를 어딘가에 저장할 수 있습니다. 그런 다음 관련이없는 다른 세 가지 코드는 모두 독립적으로 해당 값을 확인하고 일치하지 않으면 응용 프로그램을 비활성화합니다.

이제는 이것이 스스로 두통을 일으킬 수 있다고 미리 말해야합니다. 분명히 혼란스럽고 불쾌한 코드는 디버깅하기가 더 어렵고 오류가 발생하기 쉽습니다. 최악의 경우, 합법적으로 구매 한 응용 프로그램에서 오 탐지를 만듭니다.

물론 모든 것이 리버스 엔지니어링 될 수 있습니다. 크래커가 앱이 비활성화 된 곳을 찾으면 읽은 값을 추적합니다. 그런 다음 저장된 위치를 추적하고 다시 추적 할 수 있습니다. 또는 훨씬 쉽게 최종 검사를 비활성화 할 수 있습니다. 보안은 가장 약한 링크만큼 좋습니다.

불법 복제를 중지 할 수 없습니다. 가장 좋은 방법은 앱에 대한 초기 과대 광고가 진정 될 때까지 불법 복제본의 확산을 지연시키는 것입니다.


1

첫째, 나는 SW 보안 분야의 전문가 라고 생각 하지 않지만 :

중요한 것은 응용 프로그램이 서명 확인에 일부 의존하도록하는 것입니다. 즉시 영향을 미치지 말고 플래그를 설정하거나 값을 변경하십시오. 나중에 해당 플래그를 사용하고, 확인하고, 부재 / 부정확성이 응용 프로그램을 종료시킬 수있는 예외를 발생시킵니다. 서명 검사가 현재 관련성이있는 한 코드를 더 많은 영역에 닿으면 응용 프로그램을 해킹하기가 더 어려워집니다 (또는 덜 쉬워집니다). 또한 내가 볼 수 있듯이 모든 검사가 제재를 위해 동일한 루틴을 호출해서는 안됩니다. 보호 메커니즘을 쉽게 찾고 종료 할 수 있기 때문입니다.

물론 불법 SW의 경우에 대한 제재는 다를 수 있으며, 불법적으로 사용될 때 응용 프로그램을 중단하고 싶을 수도 있지만 계속 실행하고 싶을 때 사용자에게 합법적 인 사본을 요구하는 메시지 만 보내야합니다. 응용 프로그램의.

이것이 당신이 듣고 싶지 않은 것이라면, 나는 당신의 시간 동안 유감입니다 :)


7
불법 복제 된 앱을 발견했을 때 앱이 다운되면 크래시가 발생하는 이유를 명확하게 명시하지 않는 한 역효과를 겪을 수 있습니다. 불법 복제 방지 검사에 실패한 경우 임의의 시간 후에 게임 충돌을 일으킨 일부 게임 개발자에 대해 읽은 것을 기억합니다. 물론, 수많은 사람들이 해적판을 썼지 만 해적판을 운영하고 있기 때문에 충돌이 일어난다는 것을 몰랐습니다. 이로 인해 개발자들에게 많은 언론 보도가 나 왔으며 판매에 타격을 줄 수있었습니다.
Mitch Lindgren

3
@Mitch-동의합니다. 나는 그것을 하나의 가능성으로 주었지만 "최고의"기술 전략은 아마도 "최고의"비즈니스 전략이 아닐 수도 있습니다.
MByD

0

안드로이드 사용자는 끊임없는 전화 집의 고통을 받아 들일 것입니다. 유일한 안전한 Android 앱은 항상 연결된 Android 앱입니다.

이는 대부분 애플이했던 것처럼 구글의 설치 잠금을 거부했기 때문이다. IOS에서는 전화를 탈옥해야합니다. 안드로이드에서는 모든 APK를 재고, 공장 설치에로드 할 수 있습니다.

일부 / 대부분 / 모든 내용을 서버에 보관하십시오. 덩어리로 배달하십시오. 각 통화에서 라이센스 / 세션을 확인하십시오.


설명 : 두 플랫폼 중 하나를 근절 할 수는 있지만 실제로 적은 수의 IOS 사용자 만 설치를 원하지 않을 것입니다. 또한 세계 여러 곳에서 불법 복제를 유발하는 Android 앱의 비용을 지불하는 것은 어렵거나 불가능합니다.
yetimoner

이것은 실제로 2011 년 내 대답에서 얻은 아이디어 중 하나였습니다. 왜 다시 게시해야합니까?
BerggreenDK

0

이런 종류의 ov 행동을 억제하는 것은 매우 어려울 것입니다. 클라이언트 측에서 처리되는 모든 것은 APK 디 컴파일 및 모딩, Game Guardian 요법 과 같은 소프트웨어로 메모리 편집을 사용하여 해킹 가능 합니다.

내가 부분적으로 돌아 다니는 것을 볼 수있는 유일한 방법은 온라인 게임을 대신하는 것입니다. 또는 온라인에서 특정 기능을 처리하도록합니다. 또는 denuvo와 같은 변조 방지 암호화가 Android / iOS에서 사용 가능한 경우.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.