2개의 플래시 게임이 있습니다(as3으로 작성). 둘 다 최고점이 해킹당합니다. 각 게임 점수의 정상 범위는 5000을 넘지 않습니다(일반 유저는 2000~3000점만). 현재 해킹 방지 방법은 다음과 같습니다.게임을 마친 후 플래시는 post 매개변수 send: username= mike&score= 2000&hash= md5(secret.username.score)를 사용합니다. PHP 페이지에서 해시!= md5(secret. username. score)의 경우 오류를 반환하고 데이터베이스에 데이터를 삽입하지 않는지 확인했습니다.이 방법으로는 충분하지 않을 겁니다. 그렇지 않으면 제 플래시 게임이 해킹되지 않을 겁니다. 저의 플래시 게임 보안/해킹 방지를 개선하기 위해 제가 할 수 있는 일이 있습니까?해커는 어떻게 해킹하나요? 치트엔진, 탬파데이터, tamperIE 등의 타사 소프트웨어 사용??모든 표준 해킹 방법을 나열할 수 있습니까? (해킹 방법/문제를 안다는 것은 문제의 50%를 해결한 것을 의미합니다. 적어도 문제가 어디에 있는지 알고 사전에 주의를 기울입니다) 글쎄요, 제 제목엔 49700이 있어요. 어느 게임이나 최고점이 49700포인트이기 때문입니다(실제로, 이 점수의 대부분이 자신의 데이타베이스에 삽입되어 있다, 다른 유저는 생각하고 있다). 그래서 나는 그들이 같은 방법을 쓰고 있다고 믿습니다.감사합니다。결국은 사람들이 시스템을 해킹하는 데 걸리는 시간을 늘리거나 시간을 할애할 가치가 없도록 할 겁니다. 약간의 복잡성을 더하기 위해 해시에 소금을 추가할 수 있습니다. 이는 플래시 게임에 값으로 전송되며(HTML 플래시 개체에 매개변수로 추가), 해시 확인코드에 포함시킬 수 있습니다. 모종의 세션 ID 또는 임의의 번호를 송신할 수 있으므로, 항상 다릅니다. 다른 방법으로 두 개의 해시를 생성하여 둘 다 확인할 수도 있습니다.물론 사람들이 실제 게임 기능을 해킹할 수 있는 방법을 찾아냈을 가능성을 무시하지는 마세요. 아니면 정말 좋은 선수들인지…
게임을 해킹하고 싶다면 게임을 디컴파일하여 md5 비밀을 찾아낼 수 있습니다. 당신의 플래시 게임 바이너리에서 제공된다는 사실은 그것이 실제 비밀이 아니라는 것을 의미하므로, 내가 비밀을 인용 부호로 묶었다는 점에 주의하십시오.점수를 해킹하지 못하게 하는 것은 아마 불가능할 겁니다. 당신이 할 수 있는 희망은 모든 점을 더 어렵게 만드는 것입니다.
완전히클라이언트측에서실행이된다면점수유효성검사를안전하게하는것은실제불가능합니다. 원격으로 시큐리티를 유지하려면 , 서버측에서 적어도 일부를 실시할 필요가 있습니다. 이 작업을 수행하는 두 가지 방법이 있습니다.주기적으로 점수 업데이트를 서버로 보내 서버 측에서 점수가 “과도하게” (게임 컨텍스트에서 정의됨) 점프하지 않은지 확인합니다. 점프하면 플레이어가 해킹을 하고 있다고 안전하게 가정할 수 있습니다.게임 전체 이동 시퀀스(임의의 스폰서 또는 모든 AI 이벤트와 함께)를 마지막으로 점수와 함께 서버로 보내 실제로 점수가 정확한지 확인합니다. 이것은 분명히 모든 게임에서는 작동하지 않지만 몇몇 게임에서는 작동할 수 있습니다. 당신은 게임에 대해 구체적으로 아무 말도 하지 않았으니, 저는 이것을 여기에 남깁니다.
당신이 말했듯이, 이를 해킹하기 위해 이루어지는 작업에 따라 수정해야 할 다른 구멍이 있습니다. 메시지에 실제 정보를 보내고 코드에 “비밀”이 포함되어 있으므로 보다 간단한 대상이 됩니다. 보안을 개선하기 위해 할 수 있는 몇 가지 다른 해시 기능을 사용하세요. MD5는 내용을 모르고 동일한 서명으로 메시지를 생성할 수 있다고 알려진 결함이 있습니다. SHA1, SHA2는 보다 높은 보안을 제공하기 위해 MD5의 약점에 의한 공격을 막습니다.각 메시지에 고유한 ‘비밀’ 을 지정합니다. 게시할 때마다 서버에서 전송이 되면 같은 해시를 계속 재사용하는 것을 방지하고 코드를 보고 해시를 작성하기가 어려워집니다.결과를 재삼 해시합니다. 예를 들어, value=hash(hash(…, salt), salt) 이는 사람들이 프로그램을 디컴파일 할 때는 도움이 되지 않지만, 해시를 재생성하려고 할 때는 도움이 됩니다. 그 자체로, SWF를 디컴파일로부터 보호하는 소프트웨어를 찾아 주세요. 플래시를 많이 사용하지 않아 이에 대한 믿을 만한 링크가 없어요.
Flash에서 가장 간편한 방법이거나 가장 치우기 어려운 방법은 Cheat Engine을 사용하여 단순하게 점수를 저장하는 메모리 위치를 검색한 후 값을 원하는 값으로 변경하는 것입니다. 전 세계 모든 서버를 제출한 해싱/솔팅/검증을 제출하기 위해 유효한 해시이며, 패키징하기 전 게임이 유효하다고 생각하므로 이 문제를 수정하지 않습니다.항상 사전에 정의된 값 내라면 점수에 대해 ‘정상 검사’를 수행할 수 있지만 결정된 해커는 허용되는 최대 값을 쉽게 파악하고 항상 해당 값을 제출할 수 있습니다.예를 들어 점수 값을 곱한 값으로 저장한 후 점수 값에 대한 getter 및 setter에 값의 곱셈/분할을 포함하여 Cheat Engine에서 찾기가 더 힘들어지기 때문에 메모리에서 점수 값을 난독화하려고 시도할 수 있습니다. 보기 및 점수제출 위젯에 대한 적절한 점수를 설정합니다. 이마저도 실리 전술일 뿐입니다.부정한 점수가 원인이 되어 비용이 발생하지 않는 한, 부정행위를 하는 0.01%의 사람들에게 시간을 낭비하는 것을 걱정하지 마십시오. 혹은 점수표를 수동으로 조정하세요.부정행위를 방지하기 위해 고려해야 할 포인트는 ‘이게 실제로 얼마나 중요한가’입니다. 상금과 함께 일종의 고득점 기반 경쟁을 실행할 경우 우선순위가 매우 높습니다. 일주일에 한 번만 확인하고 나쁜 점수는 버리세요.
사용 중인 암호화 시스템은 H MAC와 매우 비슷하지만 구현이 그다지 안전하지 않습니다. md5 알고리즘은 망가졌지만 MAC은 비밀의 시작 부분 때문에 해쉬 충돌을 생성하는 접두사 공격에 면역입니다. 공격자는 해쉬 충돌을 생성하기 위해 문자열의 구걸을 제어할 수 있어야 합니다.TamperData는 브라우저에서 들어오는 트래픽을 수정/캡처/재생하는데 매우 유용한 해킹 도구입니다. 따라서 현재 날짜와 시간인 hmac(secret, date_time.(score.username)을 인증하여 재생공격을 방지해야 합니다.해커는 아마도 SWF 디컴파일러를 사용하여 SWF 파일에서 비밀 값을 찾고 있을 것입니다. 이에 대응하려면 http://www.amayeta.com/ 등의 SWF 난독화를 통해 비밀을 묻어야 합니다. 이 중 어느 것도 “은색 총알”이 아닌 해커를 더 엄격하게 만듭니다. 당신은 클라이언트가 정확한 점수를 알려줄 것을 신뢰하기 때문에 해커는 항상 자신의 점수를 수정할 수 있습니다. 권장 변경을 적용한 경우에도 여전히 CWE-602를 위반하게 됩니다.
단순히 서버측에서 게임을 실행하는 것만으로 스코어 해킹을 막을 수 있지 않을까요?게임이 임의의 게임으로 실행될 경우 임의의 값을 사용자의 브라우저로 전송하면 사용자가 트릭을 시도하는 것이 의미가 없고 플래시 파일을 디컴파일하여도 이점이 없습니다.
제가 생각한 것은 게임이 인증을 요구하는 것처럼 보이기 때문에 사용자 이름과 기타 정보를 얻어야 하는 호출이 있다고 가정할 수 있다는 것입니다.다른 개발자의 조언은 Ajax의 구성요소를 사용하라는 것이었습니다.익. 대부분의 해커들은 대부분의 보안 문제를 해결할 방법을 찾고 있습니다.게임이 동작하는데 꼭 필요한 것 이외에는 서버에 반송하지 않습니다.사용 가능하고 부정적인 메모리의 양에 따라 무작위로 사용한 사람이 있습니까? 해당하는 소프트웨어에서 특정 메모리 위치를 찾는 대신 왜 mem을 여러 개의 가짜 값으로 보내고 열린 메모리의 위치를 기반으로 결과를 도출하지 않습니까?이 제안에 대해 저를 공격하지 마세요. 저는 대부분의 남들과 마찬가지로 학습자입니다.
Flash 앱에 일종의 RSA(비대칭) 암호화를 추가할 수 있습니다. Flash 앱에 공용 키를 넣고 서버 측 개인 키를 사용하여 전송된 점수를 해독합니다.이것은 해커가 Flash 앱을 해킹하는 것을 막을 수는 없지만, 엉덩이에 약간의 고통을 줍니다.이하는 RSA 암호화를 위한 AS3 라이브러리입니다.그 이외에는 다른 한편으로 RSA를 구현하는 방법에 대해 사용 중인 서버 기술(PHP, .Net 등)에 따라 달라집니다.이 질문에 대답할 수 있다는 점에 주의해야 합니다.