여전히 Dashen apk를 예로 들며, 이전 앱 복호화 lua 스크립트 분석을 통해 Dashen apk의 lua 스크립트를 복호화할 수 있습니다. 이제 해당 리소스(구성 파일 및 사진 등)를 복호화해 보겠습니다. 더 중요한 구성 파일을 예로 들어보겠습니다. 해독 전:
파일 헤드에는 fuckyou!라는 서명 값도 있습니다. 이것을 보고 우리는 먼저 xxtea로 암호화한 것인지 생각해 보았으며, 먼저 xxtea로 복호화한 후 압축을 풀었는데, 분명히 작업 중에 오류가 발생했습니다. 우리가 방금 말한 것을 부정해야 합니다. 우리는 계속해서 구성 파일의 암호를 단계별로 해독합니다.
잠시 생각해보세요. 파일 헤더는: fuckyou! 파일의 암호를 해독하려면 필연적으로 다음 문자열을 처리해야 합니다. fuckyou! , 그래서 우리는 idaPro에서 fuckyou 문자열을 검색할 수 있어야 하고, 그런 다음 fuckyou 문자열이 있는 코드 세그먼트에서 함수 분석, 디버깅 및 암호 해독을 사용할 수 있어야 합니다. idaPro를 열고 문자열 보기를 열고 "fuckyou"를 검색하여 가설을 검증하세요
아무것도 아닙니다! 내 생각엔 최적화가 완료되었고 문자열이 어딘가에 최적화된 것 같습니다.好 단서는 깨졌지만 여전히 호기심으로 인해 계속 진행할 수 있습니다. 이때 Cocos2D 프레임워크 소스 코드를 탐색하고 인터넷에서 일부 정보를 결합하면 파일의 Cocos2D 처리가 CCFileUtils 클래스에 캡슐화되어 있음을 알 수 있습니다.
기능이 많고 기능이 많고 기능이 많고 기능이 많고 기능이 많고 기능이 많습니다.不一一贴了,从网上也找到了前辈的经验:
好了,我们现在回到idaPro,지금 수출窗口,搜索getData:
进这两个函数,反编译看다음으로는 그렇지 않습니다 별로 닮지 않았으므로 건너뛰고 먼저 동적 조정 중에 여기서 잠시 쉬어갈 수 있습니다.
getFileData를 다시 살펴보겠습니다. 앱은 Android 플랫폼에서 실행되므로 Android 플랫폼의 CCFileUtilsAndroid::getFileData를 살펴보겠습니다.
코드가 매우 길어서 이 기능의 핵심 부분이 완료되지 않았습니다. :
위 사진을 보니 바로 그런 느낌이 드네요, 하하! 하지만 여전히 계속해서 분석하고 검증해야 합니다. 함수가 파일 헤더의 기호를 처리할 때 문자와 직접 비교하지 않고 ASCII 값과 하나씩 비교하므로 문자열 창에서 fuckyou를 찾을 수 없습니다! 의. 그런 다음 함수가 텍스트가 암호화된 형식을 준수한다고 판단하면 처음 8바이트를 제거한 다음(씨발!) XOR 테이블의 값으로 XOR 연산을 수행하여 256바이트마다 반복합니다. T BYTE_A1C55F를 보면 됩니다:
이 시점에서 우리는 기본적으로 파일 암호 해독 기능과 프로세스를 결정할 수 있으며, 그런 다음 앱이 이 기능을 호출할 때 메모리가 명확한 내용이어야 함을 확인할 수 있습니다. 메모리. . 디버그할 때 getData 및 CCFileUtilsAndroid:doGetFileData 함수의 시작과 끝에서 중단됩니다. GetData 함수는 다음을 중단합니다.
:
두 함수 모두 중단되지만 doGetFileData 중단점에서만 일시 중지됩니다. 이는 doGetFileData 함수가 암호 해독 프로세스 중에 사용됨을 나타냅니다. 이는 우리의 예상과 일치합니다. 레지스터와 메모리를 살펴보겠습니다.
doGetFileData 이전의 내용은 암호문이고 함수가 반환되기 전에 일반 텍스트로 해독된 것으로 밝혀졌습니다. 이는 이전 분석이 정확하다는 것을 보여줍니다.
자, 이제 XOR 테이블 byte_A1C55F를 복사한 다음 앱의 암호 해독 프로세스를 모방하고(GitHub에서 xor 디코딩 스크립트를 찾아 약간 수정할 수 있음) master.apk를 디코딩하는 작은 도구를 작성할 수 있습니다. 리소스가 해독되었습니다:
위 내용은 cocos2d-LUA 리버스 엔지니어링에서 앱 리소스를 해독하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!