DĖMESIO! Tam, kad Jūsų kodai dirbtų pagal ART, negalima šuolių nuimti pilnai arba daryti juos besąlyginiais, todėl, kad lieka kodas, į kurį negalės patekti optimizatorius, ir jis krenta su kritine klaida per optimizavimą. Kad šito išvengti, būtina pakeisti šuolius apibrėžtais perėjimais, kurie visada suveikia. Pavyzdžiui, jei Jums būtinai reikia kažkokioje vietoje peršokti, tai šuolį ten pakeiskite į if-eq v0,v0 (baitai: 32 00 ?? ??)
. Jei Jums nereikia peršokti kažkokioje vietoje, tai ten galima padėti šuolį if-ne v0,v0 (baitai: 33 00 ?? ??)
arba patys pažiūrėkite kokiu ekvivalentu galima pakeisti.
Kodo failą reikia pavadinti kaip keičiamo APK pavadinimas (laikytis didžiųjų ir mažųjų raidžių).
Jeigu naudotojo kodo failas programai jau egzistuoja, Jūs galite paprastai pridėti failo pavadinimo pradžioje bet kokį tekstą ir išsaugoti jį šalia esančio.
Jei Jūs norite parašyti kodą tik vienos kompanijos serijai programų, tai gale naudotojo kodo failo pavadinimo, galima panaudoti identifikatorių _%25ALL%25
, pavyzdžiui kodo pavadinimas visiems SVOX
balsams atrodys taip: com.svox.classic.langpack_%25ALL%25.txt
. Čia _%25ALL%25
keičiasi dalis paketo pavadinime, kuri keičiasi priklausomai nuo programos esamos kompanijos.
Nenaudokite specialių simbolių/formatavimo kodo faile (naudoti tarpą 1 kartą). Jeigu dar būtinai reikia pridėti, pradžioje failo pavadinimo, savo vardą, pavyzdžiui, tai galima padaryti su %25ALL%25_
ir _%25ALL%25
. (Pavyzdys: chelpus.%25ALL%25_com.android_%25ALL%25.txt
). Jūs galite naudoti pasirinkto kodo kelio turinį %25PACKAGE_NAME%25
iki failo, šis %25PACKAGE_NAME%25
pakeis programos-taikinio paketo pavadinimą.
Kad ieškoti šablonams baitų, naudokite IDA Pro 6.1. Ji gali atidaryti dalvik-cache, odex, bibliotekas ir classes.dex.
Jei norėsite taikyti dalvik-cache arba odex kodą, nepamirškite, kad duomenų bazės skirtingose programinės įrangos versijose gali skirtis. Ir atminkite, kad ne visi classes.dex baitai sutampa su dalvik-cache ir odex. Šį pavyzdį galite pamatyti, jei atidarote classes.dex ir odex failą programoje IDA Pro.
Pradedant versija 6.5.4 ir naujesne, Lucky Patcher atsirado galimybė sukurti failus su plėtiniu lpzip. Tai zip archyvai, kurių viduje gali būti naudotojų kodai ir APK failai. Per tokių failų atidarymą, Lucky Patcher programoje, naud. kodai bus importuoti, o APK failus bus pasiūlyta įdiegti į sistemą.
[BEGIN]
<kodo komentarai, kurie yra matomi naudotojui prieš kodo taikymą>
Kodas skirtas XYZ Pro 5.0.5
[PACKAGE]
<išpakuoja classes.dex ir pritaiko visus kodus į [CLASSES] jį. Ir generuoja iš modifikuoto classes.dex odex failą.>
[CLASSES]
<šablonas ieškoti/perrešyti faile classes.dex (žr. žemiau)>
{"search":"63 R00 R01 R02 38 00 04 00 12 10 0F 00"}
{"group":"1"}
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A W00 W01 W02 00 00 12 S0 0F 00"}
[LIB]
<šablonas ieškoti/perrašyti, vadinamas vietinėmis, bibliotekas (žr. žemiau)>
{"name":"libtitanium.so"}
{"apk_build":604+}
{"original":"00 ** 50 e2"}
{"replaced":"00 00 50 e1"}
[LIB]
<šablonas ieškoti/perrašyti visas vietines biobliotekas>
{"name":"*"}
{"original":"00 ** 50 e2"}
{"replaced":"00 00 50 e1"}
[OTHER FILES]
<šablonas ieškoti/perrašyti kitiems failams iš /data/data/Package_Target_APK/ (žr. žemiau)>
{"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"}
[OTHER FILES]
<šablonas ieškoti/įdėti į kitus failus iš /mnt/sdcard/ (jei /mnt/sdcard/ kelias nerandamas, Lucky Patcher ieškos kitų variantų dėl sdcard)>
{"name":"/mnt/sdcard/Android/package-name/files/lives.xml"}
{"original":"63 68 65 6C 70 61"}
{"insert":"63 68 65 6c 70 61 61 61"}
[FILE_IN_APK]
<šablonas ieškoti/perrašyti failą iš APK paketo (kodas dirbs tik perrenkant APK su pasirinktu kodu)>
{"name":"/assets/bin/Data/Managed/O7SharpCompress.dll"}
{"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"}
[ADD-BOOT]
<Automatiškai prideda numatytą naudotojo kodą į užkrovimo sąrašą. Tai reikia per bibliotekų kodo keitimą (arba kada Jūs naudojate [CLASSES] be [ODEX] arba be [PACKAGE]), taip kaip keičiamas dalvik-cache kodas, o jis turi ypatybę atsinaujinti sistemoje ir visi pakeitimai dingsta>
[END]
<kodo komentarai, kurie yra matomi, naudotojui, po kodu>
Sveikiname, programa buvo modifikuota!
"search"
- leidžia ieškoti Jūsų šablono paieškoje ir saugoti baitus konkrečiose pozicijose.
{"search":"63R00 R01 R0238 00 04 00 12 10 0F 00"}
Šiame pavyzdyje baitai žalios - sudaro Jūsų šablono kaukę, o geltonai pažymėti baitai R00 -> R02 bus išsaugoti.
Išsaugotieji baitai turi būti eilėje R00, R01, R02, R03...
Išsaugotų baitų negalima kartoti.
“group“
- pažymi grupės šablonus (grupės numeris gali būti 1 arba didesnis). Jūs galite paklausti „Ką tai reiškia žmogau?”. Na žmogau, tai reiškia, kad jei bent vienas grupės šablonas pasisekė, bus rodomas sėkmingai pritaikyto kodo pranešimas. Tai naudinga, kai bandote padaryti universalų kodą kelioms konkrečios programos versijoms (pvz., taikyti kodą visoms „Google Play” versijoms, kad išjungtumėte automatinius naujinimus).
"apk_build"
- taikyti šį šabloną tik APK su build = apk_build. Jūs galite taikyti šabloną su build>=apk_build (Pavyzdys: {"apk_build":"206+"}) ar taikyti su build<=apk_build (Pavyzdys: {"apk_build":"206-"}).
"original"
- tai yra šablono kaukė, naudojama norint rasti ofsetą, kuriame bus pritaikytas kodas.
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
Šiame pavyzdyje baitai žalios - sudaro jūsų šablono kaukę, o tuo tarpu geltonos - yra pakaitos simboliai (??, **)
"replaced"
- tai bus po "original" išdėstymo, tai yra ofsetas, kuris bus perrašytas.
{"replaced":"12 00 6A W00 W01 W02 00 00 12 00 0F 00"}
Šiame pavyzdyje baitai žalios - bus perrašyti taikinio vietoje, baitai geltonos - išsaugoti baitai iš anksčiau įvykdyto "search"
"name"
- tai naudojama nukreipiant konkrečią biblioteką pagal pavadinimą (žr. aukščiau ęsantis [LIB])
S0, S1, SQ - nustato smali kintamuosius į 0 (konvertuoti hex numerį į: 43->03,54->04...) ar 1 (konvertuoti hex numerį į: 43->13,04->14...) atitinkamai arba nustatyti, SQ konvertuoti hex 34->44, 51->11...
Pavyzdžiui, yra kintamasis: const/4 v?,0x00
. Klausimo ženklas rodo, kad numeris var\
's nėra žinomas (pavyzdžiui, jis buvo pakeistas į naujesnę versiją), bet Jūs esate tikri, kad šis var lygus 0, ir jūs norite jį nustatyti į 1. Šiuo atveju šablonas atrodys taip:
{"original":"12 ?? ?? ?? ?? ??"}
{"replaced":"12 S1 ?? ?? ?? ??"}
Ir atvirkščiai, nustatyti kintamąjį į 0:
{"original":"12 ?? ?? ?? ?? ??"}
{"replaced":"12 S0 ?? ?? ?? ??"}
"replace_from_file"
- tai bus po "original"
išdėstymo, tai yra tai, kai ofsetas bus perrašytas baitais iš failo (failas turi būti išsaugotas šalia naudotojo kodo).
{"replace_from_file":"array.bin"}
Tai daroma siekiant išvengti rašymo labai ilgų keitimo šablonų.
"insert"
- Jei norite įterpti didesnį arba mažesnį duomenų ilgį už originalaus šablono ilgį.
(Pavyzdys)failas prieš kodą: "chelpa end"
{"original":"63 68 65 6C 70 61"}
{"insert":"63 68 65 6c 70 61 61"}
failas po kodu: "chelpaa end"
[LIB-ARMEABI], [LIB-ARMEABI-V7A], [LIB-ARM64-V8A], [LIB-MIPS] ar [LIB-X86] - bibliotekoms nuo /lib/armeabi/, /lib/armeabi-v7a/, /lib/arm64-v8a/, /lib/mips/, /lib/x86/
.
[ODEX-PATCH] - Naudojamas kodas jau sukurtam odex. Pavyzdžiui, taikant automatinį režimą, programoje kodu pašalinti licencijos patikrinimą, ir jei Jums reikės atlikti papildomus pakeitimus naudojant pasirinktą kodą. Jei mes naudosime paprastus [PACKAGE]-[CLASSES], [ODEX] ar [CLASSES]-[ODEX], odex failas bus sukurtas be jokių pakeitimų ir tik tada bus pritaikytas kodas.
Pavyzdys:
[BEGIN]
[ODEX-PATCH]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[END]
Sveikiname! ODEX modifikuotas!
[CLASSES] be [PACKAGE] - Taikyti kodą programų dalvik-cache. Nepamirškite, kad sistema periodiškai atnaujina programų dalvik-cache ir visi pakeitimai išnyks. Todėl turime pridėti [ADD-BOOT]. Dalvik-cache kodas yra pasenes, ir jis yra nepatikimas. Todėl jam reikalingas ROM Toolbox, nes jis gerai neveiks su odex failais.
Pavyzdys:
[BEGIN]
[CLASSES]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[ADD-BOOT]
[END]
Sveikiname!
[ODEX] - Kopijuoti dalvik-cache į /data/app/ ir pervardyti į odex failą, tada visi kodai taikomi šiam odex failui. Odex kontrolinė suma yra neteisinga ir negali praeiti patikrinimo, odex failas netinkamai sukurtas [PACKAGE] - [CLASSES].
Pavyzdys:
[BEGIN]
[ODEX]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[END]
Sveikiname!
[CLASSES]-[ODEX] - Taikyti kodą dalvik-cache ir kopijuoti dalvik-cache į /data/app/ ir pervardyti į odex failą. Odex ir dalvik-cache kontrolinės sumos yra neteisingos ir negali praeiti patikrinimo, odex failas netinkamai sukurtas [PACKAGE] - [CLASSES].
Pavyzdys:
[BEGIN]
[CLASSES]
{"original":"63 ?? ?? ?? 38 00 04 00 12 10 0F 00"}
{"replaced":"12 00 6A ?? ?? ?? 00 00 12 00 0F 00"}
[ODEX]
[END]
Sveikiname!
[COMPONENT] - Įjungti ar išjungti programų komponentus.
Pavyzdys:
[BEGIN]
[COMPONENT]
{"disable":"com.superApp.adsActivity"}
{"enable":"com.superApp.fullVersion.Provider"}
{"disable":"com.android.vending.CHECK_LICENSE"}
[END]
Sveikiname!
[SQLITE] - Kartais programa-taikinys ka nors keičia duomenų bazėje, kurioje ji užrašo kažkokius tai įvykius arba duomenis, tada į pagalbą ateina šis identifikatorius, po jo eina vaizdo konstrukcija
Pavyzdys:
[BEGIN]
Atkurti bandomąjį periodą
[SQLITE]
{"database":"/data/data/com.package.megaapp/databases/settings.db"}
{"execute":"DELETE FROM table_settings WHERE name = 'SETTING__LIC'"}
{"execute":"UPDATE table_settings SET UsedDays=0 WHERE name='Trial_set'"}
[END]
Sveikiname! Jūs turite naują bandomąjį periodą!
database - tai kelias į duomenų bazę Jūsų įrenginyje ir tikriausiai kitų naudotojų įrenginiuose.
execute - tai SQLite užklausa, susidedanti iš paprastų taisyklių.
[SET_PERMISSIONS] - analogas linux komandos „chmod permissions file_name” failams iš programos duomenų aplanko:
Pavyzdys:
[BEGIN]
Atkurti bandamąjį periodą
[SET_PERMISSIONS]
{"file_name":"/files/stats"}
{"permissions":"777"}
[OTHER FILES]
{"name":"/files/stats"}
{"original":"4D 4D 46 31"}
{"replaced:"4D 00 00 00"}
[SET_PERMISSIONS]
{"file_name":"/files/stats"}
{"permissions":"444"}
[END]
Sveikiname! Jūs turite naują bandomąjį periodą!
[COPY_FILE] - kopijuoja failą iš Lucky Patcher aplanko į nurodytą aplanką su nauju failo pavadinimu:
Pavyzdys:
[BEGIN]
Kopijuoti failą su pinigais
[COPY_FILE]
{"file_name":"money_for_game.bin"}
{"to":"/data/data/game_package/files/settings.xml"}
[END]
Sveikiname! Jūsų failas yra nukopijuotas ir dabar pinigai yra modifikuoti!
[SHARED-PREFERENCES] - Nustatymų failo xml, aplanke /shared_prefs/, redaktorius. Gali pašalinti ir įdėti parametrus (insert ir delete):
Pavyzdys:
[BEGIN]
Nustatyti daugiau pinigų
[SHARED-PREFERENCES]
{"file_name":"hillclimbprefs.xml"}
{"insert":"int"}
{"pref_name":"coins"}
{"value":"550000"}
{"insert":"string"}
{"pref_name":"license_status"}
{"value":"licensed"}
{"insert":"long"}
{"pref_name":"time_for_license_verify"}
{"value":"365000"}
{"delete":"boolean"}
{"pref_name":"unlicensed"}
{"file_name":"hillclimbprefs_config.xml"}
{"insert":"float"}
{"pref_name":"result_table"}
{"value":"123.4"}
[END]
Sveikiname! Jūsų failas nukopijuotas ir dabar pinigai yra modifikuoti!