1. Текстовий файл треба називати як і пекедж файлу... Для прикладу у Titanium Backup треба створити таку назву файлу: com.keramidas.TitaniumBackup.txt (обов’язково писати з великої літери та рядкові літери з назви пекеджу, інакше на знайде (Linux - ітітькалатіть)). Якщо файл користувацького патчу для застосунку вже існує, ви можете просто додати на початку назви файлу будь-який тексе та зберегти його поряд з існуючим. В цьому випадку, під час вибору у застосунку "Користувацький патч", Lucky Patcher запропонує вам на вибір список користувацьких патчів для застосунку. Якщо ви замочите написати патч зразу для цілої вервечки програм однієї фірми, то в кінці назви файлу користувацького патчу, можна використовувати ідентифікатор _%25ALL%25 , для прикладу назва файлу для всій голосів SVOX виглядатиме наступним чином: com.svox.classic.langpack_%25ALL%25.txt. На _%25ALL%25 змінюється частина в назві пакету, що міняється залежно від застосунку даної фірми.

2. Тож тут маємо приклад. Я понапижовував туди все що є в можливостях заст. На практиці вам знадобиться набагато менше функцій. У тулубі файлу пишемо приблизно в наступній формі (розділити лише одинарну прогалину-інакше вдаватиме помилку):

[BEGIN]
Цей користувацький патч додає троянду в зуби Keramidas. ver.4.4.4
[PACKAGE]
[CLASSES]
{"search":"15 01 00 30 ** 20 ** ** 31 ** 20 ** ** ** ** R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 12 ** R11 R12 R13 0E 00"}
{"search":"10 ** ** ** ** 0C 01 1A 04 R14 R15 1A 05 00 00 72 30 ** ** ** ** 0C 04"}
{"search":"0C 01 1A 03 ** ** 72 30 R16 ** ** ** 72 10"}
 
{"original":"12 01 22 00 ** 04 ** W0 ** W2 ** W3 22 02 ** 04"}
{"replaced":"** 11 ** ** ** ** W16 ** W16 ** W16 ** ** ** ** **"}
 
{"original":"0c 07 ** ** ** ** ** ** 38 ** ** ** 70"}
{"replaced":"** ** ** ** ** ** ** ** W11 W11 W11 W11 **"}
 
{"original":"12 ** 12 ** 6a ** ** ** 38 ** ** **"}
{"replaced":"** ** ** ** ** ** ** ** 00 00 00 00"}
 
[LIB]
{"name":"libtitanium.so"}
{"original":"00 ** 50 e2"}
{"replaced":"00 00 50 e1"}
 
{"original":"01 0c 80 e2"}
{"replaced":"00 00 a0 e1"}
 
 
[OTHER FILES]
{"name":"/files/shell.dex"}
 
{"original":"0F 00 00 00 1A 00 00 00 0F 00 00 00 59 00 00 00 2F"}
{"replaced":"0F 00 00 00 0F 00 00 00 0F 00 00 00 59 00 00 00 2F"}
 
[END]
Congratulations! Program cracked!
Run Titanium Backup and check License State!
Good Luck!
Chelpus.


Пояснюю тепер що де і як... Хоча мені здається тим кому треба, вже зрозуміли....:

Ну що ж:

[BEGIN] - позначка початку, весь текст після неї та до першого поля [CLASSES], [LIB], [END] тощо буде переміщено в початок користувацького патча.
[PACKAGE] - ця позначка говорить про те що патчити ми будемо не безпосередньо dalvik-cache, а витягнемо classes.dex з apk програми, пропатчимо (патчами, які йдуть слідом за ідентифікаторами [CLASSES] або [ODEX]), створимо образ odex зі змінами та підсунемо його застосунку. Саме такий образ, наприклад, потрібен TitaniumBuckup, тому що він перевіряє його та всі чек-суми всередині нього мають бути вірними. Цю позначку бажано завжди використовувати, тому що такий патч найбільш правильний. Але якщо це спричиняє які-небуть проблеми, можно і без нього.
[CLASSES] - тут йдуть рядки для патчу classes.dex. Вони можуть бути пошук(search) та оригінал-заміщене(original-replaced).
поле original-replaced в original ми вказуємо користувацький байт, який шукаємо в файлі, та заміняємо його на байти з replaced. Значення для цих рядків зазвичай шукають в IDA Pro. Значення байтів в шістнадцятковій формі, розділені одинарними прогалинаи, де ** чи ?? - це будь-який байт (потрібен для того аби патч працював на різних версіях застосунку, тому що деякі байти міняються).
поле search - шукає байти в позиціях помічених R[0, 1, 2, 3, ...], де номер це номер комірки куди зберігається байт (номери комірок повинні йти по-порядку від 0 та далі та не повинні повторюватися). Для прикладу: {"search":"15 01 00 R0 R1 R2 12 ** 0E 00"} означає що файли на тих позиціях буде збережено до R0, R1, R2. Тепер коли вони знайдені та збережені, можна їх використовувати в шаблонах пошуку зміни, заміняючи R на W: тут ** чи ?? – означає будь-який байт, W0, W1, W2 – це збережені байти в search, все інше просто HEX байти. Кількість байт origanal та replaced має обов’язково співпадати. Також обов’язково пам’ятайте що файли dalvik-cache та classes.dex не всі однакові, в цьому ви можете переконатися скопіювавши файл dalvik-cache-а з /data/dalvik-cache/ до себе на ПК та відчинити його в IDA Pro.
[ODEX] - замість ідентифікатора [CLASSES], можна використовувати цей. Тоді зміни classes.dex будуть збережені не в dalvik-cache, де вони час від часу зникають після оновлення кешу системи, а в окремому файлі з розширенням odex поряд з apk застосунку, що зафіксує всі зміни та залише оригінальний dalvik-cache незмінним – це на випадок, якщо застосунок його перевіряє. Можна використати [ODEX] після [CLASSES], тоді зміни буде внесено у dalvik-cahce та автоматично зафіксуються в odex.
[ODEX-PATCH] - бувають ситуації, коли треба вже пропатчений застосунок, наприклад, у того в якому вже зняли перевірку ліцензії автоматичним патчем. Тоді на поміч приходить ця позначка. Всі шаблони <оригінал-заміщене> після неї будуть застосовані до odex файлу, котрий вже зробить інші патчі. Наприклад, це вперше стало потрібним в Final Fantasy III, коли люди лікували гру Екстремальним режимом вилучення преревірки ліцензії, але щоб переклад відображувався у правильному кодуванню, потрібні були додаткові патчі в odex файлі, які стало можлио застосувати з допомогою цієї позначки.
[LIB] - це значить, що далі підуть рядки для патчу бібліотеки застосунка, name – це назва бібліотеки.
[OTHER FILES] - це значить, що далі підуть рядки для патчу файлу який лежить в теці застосунка /data/data/<назва пакету>, name – це шлях від /data/data/<назва пакета> та назви файлу. Щоб файли там з’явились, потрібно хоч раз запустити застосунок.
[ADD-BOOT] - Автоматично дадає тоточний користувацький патч в завантажувальний список, щоб патч застосовувався під час кожного перезавантаження. Це потрівбно під час патчення бібліотек які або коли використовуєте [CLASSES] без [ODEX] або без [PACKAGE], через те що патчитися буде dalvik-cache, а він має властивість оновлюватися системою і відповідно всі зміни зникнуть.
[END] - ідентифікатор кінця шаблону від патчв, весь текст з наступного рядка буде виділено при успішному патченні програми.

Все віредактували, зберігайте та кидайте файл com.keramidas.TitaniumBackup.txt в директорію /sdcard/LuckyPatcher/ ...
Усе, тепер застосунок підсвічуватиметься жовтим та можна застосувати до неї цей патч.


Ящо що, задавайте питання. Успіхів.