Восстановление структуры файла из APK-файла cocos2d-x JS Android, после расшифровки?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Восстановление структуры файла из APK-файла cocos2d-x JS Android, после расшифровки?

Сообщение Anonymous »

Сейчас я учусь реконструировать APK и добился значительного прогресса. Вот чего я достиг на данный момент:
  • Расшифровка и просмотр кода: Преобразовал байт-код Dalvik (файлы .dex) в читаемый вид. Код Java и JavaScript.
  • Распаковка: расшифрованные файлы JavaScript разделены. (Хотя они все еще минимизированы)
  • Расшифровка UUID: Выяснилось, как расшифровать UUID в имена файлов и наоборот, и нашли пути к ресурсам для некоторых UUID. li>
Однако мне не удается определить правильную структуру папок для определенных ресурсов в «Основной» папке.
Что я обнаружил на данный момент
Вот что я знаю о пакетах ресурсов в «Основной» папке:
  • < li>Каждый пакет ресурсов имеет UUID, который соответствует изображению, содержащему несколько ресурсов.
  • Для каждого пакета ресурсов существует файл JSON, но они не предоставляют много полезной информации о структура папок.
  • Каждый ресурс на изображении имеет собственный файл JSON, который включает:

    Название пакета в начале.
    Подробная информация о положении объекта на изображении.
[*]Манифест содержит сведения о каждом объекте. местоположение, но только ресурсы, перечисленные в /resources/config.json, имеют «пути», позволяющие повторно сопоставить их.

Мои вопросы< /h3>
  • Как определить правильную структуру папок для этих ресурсов?
  • Существует ли шаблон или инструмент, который поможет сопоставить эти ресурсы с соответствующими местоположениями?
Важное примечание: файла карты НЕТ — файл карты НЕТ. В манифесте перечислены запутанные имена и их md5 или sha-256 в зависимости от того, на что вы смотрите. Моя цель — вернуться к исходному формату, на который ссылается код.
Примеры кода и Структура
Я включил некоторые соответствующие фрагменты кода и детали структуры файлов, чтобы проиллюстрировать, с чем я работаю:

Пример config.json (UUID без путей):

Код: Выделить всё

{
"paths": {},
"types": [],
"uuids": [
"05mU7WsllFO4elu4Re6/pm",
"fcTsdoxZlLpKd3It99/+h6"
],
"scenes": {
"db://assets/main.fire": 127,
"db://assets/start.fire": 120
},
"redirect": [1, 0, 2, 0, 4, ...  0, 146, 0],
"deps": ["resources", "internal"],
"packs": {},
"name": "main",
"importBase": "import",
"nativeBase": "native",
"debug": false,
"isZip": false,
"encrypted": true
}

Пример связанного кода перед разделением:

(но вы можете видеть, что в нижнем разделе представлена ​​файловая структура/имена для пакетов, именно так я реконструировал и разделил его)

Код: Выделить всё

{
1: [function(e, t, i) {
"use strict";
const n = i;
n.bignum = e("bn.js");
n.define = e("./asn1/api").define;
n.base = e("./asn1/base");
n.constants = e("./asn1/constants");
n.decoders = e("./asn1/decoders");
n.encoders = e("./asn1/encoders");
}, {
"./asn1/api": 2,
"./asn1/base": 4,
"./asn1/constants": 8,
"./asn1/decoders": 10,
"./asn1/encoders": 13,
"bn.js": 15
}],

Структура файла

Вот частичное представление файловой структуры, с которой я работаю:

Код: Выделить всё

Directory: T:\assets
Subdirectory: ad-viewer
Subdirectory: assets
Subdirectory: dexopt
Subdirectory: jsb-adapter
Subdirectory: src
File: audience_network.dex
File: cid
File: main.js
File: project.json
File: tt_mime_type.pro

Directory: T:\assets\assets
Subdirectory: internal
Subdirectory: localizeData
Subdirectory: main
Subdirectory: manifest
Subdirectory: resources
Subdirectory: Script

Directory: T:\assets\assets\internal
Subdirectory: import
Subdirectory: native
File: config.json
File: index.js

Directory: T:\assets\assets\internal\import
Subdirectory: 09

Directory: T:\assets\assets\internal\import\09
File: 0967b326a.json

Directory: T:\assets\assets\internal\native
Subdirectory: 02

Directory: T:\assets\assets\internal\native\02
File: 0275e94c-56a7-410f-bd1a-fc7483f7d14a.png

Directory: T:\assets\assets\localizeData
File: config.json
File: index.js

Directory: T:\assets\assets\main
Subdirectory: import
Subdirectory: native
File: config.json
File: index.js

Directory: T:\assets\assets\main\import
Subdirectory: 05
Subdirectory: 06
Subdirectory: 08
Subdirectory: 12
.....
Directory: T:\assets\assets\manifest
Subdirectory: import
Subdirectory: native
File: config.json
File: index.js

Directory: T:\assets\assets\manifest\import
Subdirectory: 83

Directory: T:\assets\assets\manifest\import\83
File: 83f57686-53e5-4bc7-bdf0-33bcd506f93b.json

Directory: T:\assets\assets\manifest\native
Subdirectory: 83

Directory: T:\assets\assets\manifest\native\83
File: 83f57686-53e5-4bc7-bdf0-33bcd506f93b.manifest

Directory: T:\assets\assets\resources
Subdirectory: import
Subdirectory: native
File: config.json
File: index.js

Directory: T:\assets\assets\resources\import
Subdirectory: 00
Subdirectory: 01
Subdirectory: 02
....
Directory: T:\assets\assets\Script
Subdirectory: import
File: config.json
File: index.js

Directory: T:\assets\assets\Script\import
Subdirectory: c8

Directory: T:\assets\assets\Script\import\c8
File: c85c3dbd-5a7d-424c-8e07-965706736336.json

Directory: T:\assets\dexopt
File: baseline.prof
File: baseline.profm

Directory: T:\assets\jsb-adapter
File: jsb-builtin.js
File: jsb-engine.js

Directory: T:\assets\src
Subdirectory: assets
File: cocos2d-jsb.js
File: settings.js

Directory: T:\assets\src\assets
Subdirectory: libs

Directory: T:\assets\src\assets\libs
File: thinkingdata.mg.cocoscreator.min.js

Пример конкретного ресурса

  • UUID пакета ресурсов: 1e58fbfa7

    Файл изображения: assets\assets\main\native\1e\1e58fbfa7.png
  • Файл JSON: assets\assets\main\import\1e\1e58fbfa7 .json
    Содержимое JSON:

Код: Выделить всё

[
1,
0,
0,
[
"cc.Texture2D"
],
0,
[
"0,9729,9729,33071,33071,0,0,0",
-1
],
[
0
],
0,
[],
[],
[]
]

Traceback

Я ищу эту строку (1e58fbfa7) во всех файлах и нахожу соответствующий JSON для каждого из ресурсов на этом изображении, вот пример одного:
(Я понимаю, что это такое — они указывают, где на упаковке находится ресурс, относящийся к этому файлу/UUID)

Код: Выделить всё

[
1,
[
"1e58fbfa7"
],
[
"_textureSetter"
],
[
"cc.SpriteFrame"
],
0,
[
{
"name": "UI_Bt_world",
"rect": [
342,
446,
127,
115
],
"offset": [
0,
0.5
],
"originalSize": [
129,
116
],
"capInsets": [
0,
0,
0,
0
]
}
],
[
0
],
0,
[
0
],
[
0
],
[
0
]
]
Этот JSON — это \assets\assets\main\import\3a\3aa50555-73a6-416d-b35a-cfab79466fa7.json
Если я конвертирую что для UUID (3apQVVc6ZBbbNaz6t5Rm+n) я найду его в двух местах: config.json (фрагмент, представленный выше) и в другом месте (\assets\assets\main\import\9f\9fde386a-2232-446d-9554-549e101dde19. json), который чем-то похож на config.json, но не совсем... фрагмент:

Код: Выделить всё

[
1,
[
"ecpdLyjvZBwrvm+cedCcQy",
...
[
"node",
"_spriteFrame",
"_N$file",
...
[
[
"cc.Node",
[
"_name",
...
"_children"
],
-2,
4,
...
]
],
[
0,
"58H6b2PPdJip4dKNTXDv0T",
1,
0
],
[
4,
4278190080
],
[
5,
1242,
2688
]
]
],
0,
[
0,
12,
...
96,
97,
1
]
]
Я конвертирую это имя файла в UUID (9f3jhqIjJEbZVUVJ4QHd4Z) и нахожу его в другом файле (\assets\assets\main\import\d7\d726ed83-41aa-4389-bd34-dd1e963ba515 .json)...

Код: Выделить всё

[
1,
[
"9f3jhqIjJEbZVUVJ4QHd4Z"
],
[
"mainNode",
"node",
"scene"
],
[
[
"cc.SceneAsset",
[
"_name",
"asyncLoadAssets"
],
1
],
[
"cc.Scene",
[
"_name",
...
[
0,
-1,
2,
0,
1,
2,
0,
2,
1,
2
],
[
0
],
[
0
],
[
0
]
]
Я пошел еще глубже, преобразовал это имя файла в UUID (d7Ju2DQapDib003R6WO6UV), посмотрел и нашел его в одном месте... исходный файл конфигурации. Итак, я вернулся к началу!


Подробнее здесь: https://stackoverflow.com/questions/790 ... decryption
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»