IT

Android 게임이 계속 해킹 당함

lottoking 2020. 6. 19. 07:52
반응형

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


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

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

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

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

감사


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

프리미엄 모델

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

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

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

스텔스 사기꾼 보호

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

결론

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

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

다시, 그것은 해커 증거가 아닙니다. 그러나 다음 게임으로 넘어갈 정도로 충분히 짜증날 수 있습니다. 마지막으로, 게임에 대한 정기적 인 업데이트를 제공 할 수 있으며 최신 버전 만 "레코드를 게시"할 수 있어야합니다. 따라서 활성 사용자는 루프를 유지하기 위해 업데이트해야합니다.


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

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

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

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

행운을 빕니다.


최신 정보

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


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

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

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

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

편집하다:

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

몇 가지 기본 요점


I know you're not really into obfuscation, but I really need to react to this:

From here, I don't want to obfuscate our code as I have seen it broken before. I want something a little more solid, and I also want to learn how to do this properly.

ProGuard is very reliable in my experience, and this although I use a couple of advanced features such as AIDL and some native code which calls Java method.. It takes a little work to read the documentation and do things properly, but once you're there ProGuard is extremely reliable and also optimizes your app.

Custom security/cryptographic tricks are good, but without obfuscation it's like throwing a stone in the water in my humble opinion.

I've used ProGuard in production for many months, and it just works flawlessly.

If you're into learning, then read the ProGuard manual carefully, experiment with it, and inspect its output logs.


Chance, that there are more talented programmers then YOU (applies for all programmer), is 100%. And if that is true, you can not fix hacking. But you can spend as much time and effort on it to go bankrupt.

If you want to make some serious money you need to do some research on your target user group, and behavioral science. You need to make users playing that bring in new money, and thats it.

Besides, you got it all wrong. Hackers are most active members of your user base, thy just behave in a way you did not intend them to.

Take Zynga games on Facebook for example, do you think thy get hacked? - Sure, and about +100000 players only play, because thy can use bots, that automate everything.

Having huge active user base botnet of actual people, makes archiver type gamers want to play the game - and if thy play, and it looks cool, then Avarage Joe will also want to play. If Avarage Joe plays, then his friends might want to play, and thy probably will not care anything other, then being better then his/her friend, killing time or having something to chat about. Avarage Joe friends will most likely be willing to pay to be better then Joe, but rather thy would like to invest in something that makes them able to be better.

Besides if the real value is playing the game for free, then users who use the free hacked version, will most likely never would have payed for it. But thy are Avarage Joes and their friends just might. So this is like the cheapest commercial you can have. If you want to make money of your large userbase, then just make new versions of the game with small changes to levels and graphics.


Piracy will always be an issue. By in large crackers are better at playing this Security Though Obscurity game than developers.


What an interesting and disturbing question. :-) As an exercise, you might try releasing an app through Amazon; they have their own DRM mechanism; I wonder if it works any better than ProGuard...


One of the key elements in my opinion is to spread out the code so it's not all in one place. If you have a function called LicenseChecker.checkLicense() which retrieves the license and checks it, you can be sure it will be disabled promptly.

The one advantage you have is that the crackers cannot see the comments of your code (and, if you obfuscate, method/variable names), so come up with something weird. In the onCreate() of one activity, you get the license ID. In onResume(), you get another value to check it against. Maybe create a thread and do some checks there. And then, some other irrelevant piece of code (maybe the player control) might pick up the value and compare it and store the result somewhere. Then three other irrelevant pieces of code will all independently check that value and disable your application if it doesn't match.

Now I should say upfront that this can cause headache for yourself - obviously, cluttered, nasty code is harder to debug and prone to cause errors. Worst case, you create false positives in legitimately purchased applications.

And, of course, everything can be reverse-engineered - once the crackers find the place where the app is disabled, they trace back the value that's being read from. They could then trace back where it's being stored, and trace that back..... or, much easier, they can just disable the final check (which is why I recommended 3 different places, all triggering delayed). Security is only as good as the weakest link.

You will not be able to stop piracy. Your best bet is to delay the spreading of a pirated copy until the initial hype about your app has calmed down.


First, I do NOT consider myself a pro in the SW security field whatsoever, but:

I think an important thing is to let the application be dependent in some part(s) on the signature check. Don't let it affect immediately, but let it set some flags or change some values. later on, use those flags, check them, let the absence/incorrectness of them cause an exception of some kind which will terminate the application maybe. As long as the signature check is only relevant at the moment, it is easy to bypass it, to remove the line, once it touches more areas in the code, your application becomes harder (or less easier...) to hack. Also as I see it, not all checks should call the same routine for the sanction, because this will also make it easy to find the protection mechanism and terminate it.

Of course, the sanction to take in cases of illegal SW may vary, you might want to crash the application when used illegally, but you might as well want to keep it running, and only send message that asks the user to buy a legal copy of the application.

If this is just what you didn't want to hear, then I'm sorry for your time :)


Android users are just going to have accept the pain of constant phone-homes. The only secure Android app is an always-connected Android app.

This is, in large part, due to Google's refusal to lock-down the installation, like Apple has. On IOS you have to jailbreak the phone. On Android you can load any APK on a stock, factory install.

Keep some/most/all your content on the server; deliver it in chunks; validate the license/session on each call.


It will be incredibly hard to inhibit this kind ov behavior. Anything that is handled on the client-side is hackable using APK decompilation and modding, memory editing with software such as Game Guardian ect.

The only way I can see how partially getting around it, would be to make an online game instead. Or have certain functions handled online. Or if anti-tamper encryption like denuvo ever is available for Android / iOS.

참고URL : https://stackoverflow.com/questions/5600143/android-game-keeps-getting-hacked

반응형