Захист даних за допомогою модифікації системного розділу жорсткого диска. Що таке Magisk, або як приховати root в Android

Що таке розділ, що резервується, або навіщо Windows ховає частину диска?

Вперше встановлюючи систему Windows 7, Windows 8 і т.д. на чистий або відформатований диск (а в попередніх версіях системи такого тому не було), перше, що робить windows, створює якийсь розділ на самому початку вінчестера. Він називається System Reserved Partition (зарезервований системою розділ або системний розділ). Розділ активно використовується системою для встановлення та завантаження основного тіла windows – того, що ми бачимо як саму операційну систему.

Коли ви відкриваєте папку Мій комп'ютер або просто комп'ютер, системний розділ ви не побачите. Йому не присвоюється жодного позначення, в провіднику windowsвін недоступний. Щоб побачити його, необхідно відкрити консоль керування комп'ютером (команда у рядку пошуку diskmgmt.msc) у розділі Управління дисками:

Навіщо потрібний розділ, що резервується?

Цей системний розділ містить у собі завантажувальні дані, код менеджера завантаження (програми, що дозволяє вибрати активний розділ диска, звідки завантажуватиметься windows). Там же перебуватиме середа відновлення windowsвнаслідок збою системи. Якщо ви використовуєте вбудовану функцію в windows шифрування BitLocker, завантажувальні дані параметрів функції Шифрування диска BitLocker також будуть розташовані саме там.

Для кожної з версій системи розмір диска також готовий. 100 Мб у Windows 7, 350 Мб у Windows 8/8.1, і, нарешті, 500 Мб у Windows 10. І, до речі, іноді цього місця бракує, і користувач отримує повідомлення про помилку після чергової порції оновлень.

Як заглянути в зарезервований розділ?

Якщо ви захочете подивитися на зміст цього розділу, просто надайте розділ ім'я. Як завжди, у вигляді латинської літери. Після того, як новий розділ з'явиться у провіднику Windows, активуйте показ прихованих папок та файлів, а також системних файлів. Це нагадаю, робиться через Панель керування у пункті Параметри папок.

Якщо за допомогою консолі windows це зробити не виходить, а файли типу BOOTSECT.bak і папки Boot, Recovery, а також System Volume Information, $RECYCLE BIN стали видимими і без подібних маніпуляцій, - ви не перший, хто працює з вашим жорстким диском . Без диска Зарезервовано системоюшифрування диска підтримувати буде просто неможливо. А оскільки шифрувальник готовий до роботи у всіх останніх версіях Windows, цей розділ завжди буде з'являтися.

системного розділу вже немає.

Чи можна видалити розділ, що резервується?

Ось гадки не маю, навіщо вам це може знадобитися. Вкрай не рекомендую це робити при працездатній windows. Та за будь-якої. Інакше ви майже гарантійно зіткнетеся з помилкою завантаження. Більш того, при спробі згодом виправити завантаження Windows при відмові завантажитись (якщо таке трапиться, звичайно), система закономірно покаже вам фігу у вигляді відсутності в пункт Усунення несправностей комп'ютера. І доведеться скористатися Windows.

Його ніяк не позбутися?

Зважте ще раз - розділ дуже корисний і може стати у нагоді. Однак, якщо ви вважаєте, що він тільки заважає, врахуйте це.

  • Перед інсталяцією Windows

Тут все просто. Якщо ви не хочете бачити згодом цей розділ, скористайтеся вбудованою утилітою Diskpart. Вона прошита в настановному диску Windows.

  • під час встановлення системи тиснемо Shift + F10, викликавши консоль cmd
  • запускаємо diskpartта перевіряємо кількість фізичних дисків командою list disk(нумерація починається з 0)
  • вибираємо потрібний командою select disk 0
  • і створюємо том, готовий до роботи, командою create partition primary

Продовжуємо інсталяцію Windowsіз зазначенням на цей диск (зарезервований розділ Windows створювати не буде)

  • Розділ вже присутній

Простим натисканням миші його не видалити – система сама собі не ворог. І, перш ніж видалити, всі файли, що зберігаються там, потрібно перенести в інше місце. Тільки це звучить просто: ці маніпуляції пов'язані з редагуванням реєстру, копіюванням файлів між томами, зміною сховища завантажувача BCD. У версіях Windows 8 доведеться ще зачепити і середовище відновлення. За бажання я можу описати кілька прийомів, проте просто не раджу цього робити. Більше того, мені доводилося стикатися з деякими програмами, які запевняли, що з їх допомогою перенесення даних з резервного диска (з подальшим видаленням) пройде гладко. На жаль і ах - насправді проблем виявилося більше, ніж вони згадували. Залишіть як є.

Прочитано: 20

Меню Виправлення(Edit) програми Regedt32 містить команди, що дозволяють додавати, модифікувати та видаляти розділи та значущі елементи реєстру.

Для додавання нового розділу до будь-якого куща реєстру слід вибрати команду Додати розділ(Add Key) меню Виправлення.Під час виконання цієї команди вам пропонується ввести ім'я розділу та клас (клас у цьому випадку відноситься до типу даних). Діалогове вікно для введення цієї інформації показано на рис. 14.5. Списку, з якого можна вибрати тип даних, у цьому діалоговому вікні не наводиться, але надається можливість створити розділ, а тип даних визначити при введенні нового параметра до складу створеного розділу.

Команда Додати розділвикористовується додавання значних елементів до складу розділів реєстру. Діалогове вікно, що розкривається при виконанні цієї команди (рис. 14.6), містить список, що дозволяє вибрати тип даних для значущого елемента: рядкові значення (REG_SZ, REG_ MULTI_SZ і REG_EXPAND_SZ) або двійкові значення (REG_DWORD або REG_BINARY).

Щоб видалити з реєстру розділ або значущий елемент, виділіть об'єкт (розділ або значущий елемент), намічений для видалення, та виберіть команду видалити(Delete) меню Виправлення.Вам буде запропоновано підтвердити намір видалити вибраний розділ або значущий елемент.

Примітка

Як уже неодноразово повторювалося, редактори реєстру не підтримують операцій скасування (Undo), тому після підтвердження операції видалення у вашому розпорядженні не буде жодного іншого способу відновити віддалену інформацію, крім її відновлення за попередньо створеною резервною копією. Крім цього, редактор реєстру пропонує підтвердити операцію видалення, лише якщо в меню Параметри встановлено опцію Підтвердження видалення (Confirm On Delete). Тому, зважившись видалити розділи з реєстру, не зневажайте резервним копіюванням(І не шукайте собі зайвих завдань при вже існуючому рішенні).

Якщо ви випадково видалите щось із розділу реєстру HKEY_LOCAL_ MACHINE\System\CurrentControlSet, пам'ятайте про можливість відновлення вмісту цього розділу за допомогою останньої успішно завантаженої конфігурації (див. розділи 2 та 8). Для виконання цієї операції перезавантажте комп'ютер і відразу після появи меню завантажувача натисніть клавішу , а потім виберіть із налагоджувального меню опцію Завантаження останньої вдалої конфігурації (Last Known Good).

Крім команд видалення елементів реєстру та додавання до його складу нових розділів та параметрів, у меню Виправленняредактора Regedt32 є набір команд для редагування існуючих елементів реєстру (і слід зазначити, що цей набір опцій набагато ширший, ніж той, що надається новішою програмою Regedit). Меню Виправленняредактора реєстру Regedt32 містить команди Двійкові дані(Binary), Рядок(String), Подвійне слово(DWORD) та Багаторядкові(Multi String). Вибір кожної з команд запускає редактор значень відповідного типу – наприклад, вибір команди Двійкові данізапускає редактор двійкових значень – Binary Editor, вибір команди Подвійне слово- Редактор значень типу DWORD, а вибір команд Рядок та багаторядковівикликає відповідні редактори рядкових і багаторядкових значень. Зауважте, що таких широких можливостей у редакторі Regedit просто немає.

На просторах Рунета складно знайти конструктивну та грамотно подану інформацію про пристрій операційної системи Android. Здебільшого інформація має роздроблений і неповний характер, відсутня вступна частина з базовими поняттями, що робить її важкою для сприйняття та розуміння новачкам. За відсутності базових знань пристрою та алгоритму роботи операційної системи Android неможливо проводити налагодження або кастомізацію прошивок, займатися розробкою під ОС Android. Саме це і наштовхнуло мене на написання цієї статті, в якій я спробую, звичайною та зрозумілою мовою, донести "складні" речі.

Матеріал спрямований, в першу чергу, на вивчення звичайними користувачами та представлений як вступний екскурс у світ операційних систем Android. Тому тут буде представлена ​​стисла та поверхова інформація без технічних заглиблень та нюансів. Даний матеріал буде корисний усім, хто займається перепрошивкою та кастомізацією прошивок, розробкою під ОС Android, ремонтом мобільних комп'ютерних систем та звичайному користувачеві, для кращого розуміння принципів роботи та можливостей свого Android.

Розділи внутрішньої пам'яті Android

Внутрішню пам'ять пристрою на андроїді розбито на кілька логічних дисків (розділів). Наведемо класичну розмітку пам'яті:

Bootloader- Тут перебуває програма (завантажувач), що дозволяє запускати операційну систему Android, Recovery та інші сервісні режими.

Recovery- як видно з назви, тут встановлено інженерне менювідновлення або просто Рекавері.

Boot- Серце Андроїд ОС, тут знаходиться ядро, драйвера та налаштування управління процесором та пам'яттю.

System- системний розділ, в якому знаходяться всі необхідні для роботи Android ОС файли, це як папка Windowsна вашому диску С:\ (тут і далі буде проводити асоціацію з ОС Windows)

Data- розділ для встановлення додатків та зберігання їх даних. (Program files)

User- це всім відома sdcard або, простіше кажучи, місце під файли користувача (Мої документи). Тут ми змушені зробити відступ, т.к. розміщення цього розділу має кілька варіантів:

  • Розділ відсутній у внутрішній пам'яті, а замість нього використовується зовнішній накопичувач – найпопулярніший варіант. (Рис.1)
  • У пристроях з вбудованою пам'яттю великого розміру цей розділ бачиться як sdcard, а зовнішня картапам'яті бачиться як sdcard2 або extsd (можуть бути інші варіанти назви). Зазвичай зустрічається на пристроях з Android 3.2. (Рис.2 Варіант 1)
  • Даний варіант прийшов на зміну попередньому варіанту, разом з Android 4.0. Розділ User замінили папкою media на розділі Data, що дозволило використовувати всю доступну користувачеві пам'ять для встановлення програм та зберігання даних, а не ту кількість, яку виділив нам виробник. Іншими словами sdcard та data є одним цілим. (Рис.2 Варіант 2)

Тепер, коли ми знаємо, що і де знаходиться, давайте розберемося для чого воно там і як ця інформація може бути нам корисною.

Почнемо з Bootloader. Це завантажувач, який запускає Андроїд, рекавері тощо. Коли ми натискаємо кнопку увімкнення, запускається завантажувач і, якщо немає додаткових команд (затиснутих клавіш), запускає завантаження boot. Якщо ж була затиснута комбінація клавіш (у кожного пристрою вона своя) запускає, залежно від команди, recovery, fastboot або apx. На малюнку нижче показано, що запускає Bootloader і як взаємопов'язані розділи.

Як видно з малюнка №3, розділ Recovery не впливає на завантаження Android ОС, але навіщо він тоді потрібен? Спробуймо розібратися.

Recovery (рекавері) по суті є маленькою утилітою на ядрі Linux і завантажується незалежно від Андроїд. Його штатний функціонал не багатий: можна скинути апарат до заводських налаштувань або оновити прошивку (заздалегідь завантажену на sdcard). Але, завдяки народним умільцям, у нас є модифіковані рекавері, через які можна встановлювати модифіковані (кастомні) прошивки, налаштовувати андроїд, створювати резервні копії та багато іншого. Наявність або відсутність рекавері, а також його версія не впливають на працездатність ОС (дуже найчастіше питанняна форумах).

Особливо уважні читачі могли побачити на Рис.3 Fastboot. Це інтерфейс для роботи безпосередньо з розділами внутрішньої пам'яті, за допомогою командного рядка. Через нього можна прошити рекавері, ядро ​​або нову версіюпрошивки, або форматувати (видалити всю інформацію) той чи інший розділ.

Раз вже зайшла мова про інтерфейси, хочу розповісти про ще одне, досить відоме, - adb (android debugbridge). Це так званий режим налагодження і названий він так неспроста - через нього можна відстежувати роботу як системи в цілому, так і окремих додатків. Але це ще не все, коли допомоги adbможна отримати повний доступ до файлової системи пристрою і змінювати системні файли або витягнути важливу інформацію, коли ваш девайс завис на завантаженні. Всі функції режиму налагодження не описуватиму т.к. моя мета донести загальну інформацію, а не докладний оглядпро функції того чи іншого режиму.

Розібравшись із теорією, давайте запустимо Андроїд ОС.

Натискаємо кнопку живлення - запускається Bootloader, який завантажує Ядро (boot), воно, у свою чергу, запускає систему (System), ну, а вона вже підвантажує програми (data) і користувальницький простір (user). (Мал.3)

А тепер перейдемо в кореневий каталог і подивимося на нутрощі самої Android OS:

У цій схемі ми привели лише необхідні для ознайомлення директорії. Насправді їх набагато більше і на огляд лише однієї папки System знадобиться ціла стаття.

Так, папка data. Як можна здогадатися із назви, вона якось пов'язана з даними, але з якими? Так практично з усіма, це і дані про синхронізацію та облікові записи, паролі до точок доступу wifi та налаштування vpn, і так далі. Серед іншого тут можна виявити папки app, data і dalvik-cache - розглянемо їх призначення:

  • app - сюди встановлюються програми та ігри.
  • data - тут зберігаються дані додатків, їх налаштування, сейви ігор та інша інформація.
  • dalvik-cache – програмна область кеш-пам'яті для програми Dalvik. Dalvik це Java-віртуальна машина, яка є основою для роботи програм, що мають розширення *.apk.
  • Для того, щоб зробити запуск програм швидше, створюється їх кеш.

Папка System зберігає у собі системні дані та все необхідне роботи ОС. Давайте розглянемо деякі з цих папок:

  • app - тут знаходяться системні програми(смс, телефон, календар, налаштування тощо), а також програми встановлені виробником пристрою (фірмові віджети, живі шпалери і т.д.).
  • fonts - системні шрифти
  • media - містить стандартні мелодії дзвінків, повідомлень, будильників та звуків інтерфейсу, а також завантажувальну анімацію(bootanimation)
  • build.prop - Цей файл згадується, чи не першим, у розмовах та статтях про тонке налаштування системи. У ньому міститься величезна кількість налаштувань, таких як щільність екрана, час затримки сенсора наближення, управління wifi, ім'я та виробник пристрою та багато інших параметрів.

Права суперкористувача Root в ОС Android

Як і в будь-якій Linux-подібній системі, в операційній системі Android доступдо системних файлів та директорій здійснюється за наявності прав суперкористувача Root. У цьому розділі ми вирішили розглянути принцип роботи прав суперкористувача ОС Android, можливість редагування системних файлів або логічних розділів файлового простору за наявності прав суперкористувача Root.

— Знати що в якійсь папці це добре, але чи можна щось із цим зробити?

- Так! Але потрібні права суперкористувача (root) або, якщо проводити аналогію з Windows, права адміністратора. Спочатку всі пристрої на Андроїд йдуть без root правдля кінцевого користувача, тобто. купуючи девайс, ми не є у ньому повноцінними господарями. Це зроблено як для захисту від шкідливих програм, Так і від самого користувача - адже, в невмілих руках, повний доступ до системи може призвести до «смерті» операційної системи та подальшої необхідності перепрошивки пристрою.

"Ну і в чому користь такої небезпечної штуки?"- Запитайте Ви.

Зараз розповімо:

  • Можливість робити резервні копії даних та відновлювати їх після прошивки або випадкового видалення.
  • Тонка настройка системи вручну або за допомогою спеціальних програм.
  • Видалення системних програм, мелодій, шпалер тощо.
  • Зміна зовнішнього виглядуОС (наприклад, відображення заряду батареї у відсотках)
  • Додавання функціоналу (підтримка ad-hoc мереж, наприклад)

Даний список можна продовжувати ще довго, але, гадаю, даних прикладів буде достатньо для уявлення про можливості та широту застосування root привілеїв.

— Це все чудово, але тепер будь-яка програма зможе отримати доступ до «серця» операційки та моїх даних?

- Ні. Ви самі вирішуєте дозволити тому чи іншому додатку отримати root доступ, чи ні. Для цього існує програма Superuser або її просунута сестра SuperSU. Без цієї або подібної програми скористатися root неможливо.

Як бачите, Андроїд не така вже й складна операційна система для розуміння користувача. Якщо ви раніше мали досвід роботи з Linux-подібними операційними системами, Ви знайдете багато схожого з Android системами і ця схожість обгрунтована. Android система є похідною та побудованою на базі ядра Linux. Сподіваюся, після прочитання статті, ви дізналися щось нове або отримали відповідь на питання, що давно цікавило.

Привіт Хабре!

Декілька років тому, коли я вперше познайомився з Android, я почув від свого колеги по роботі, що Android передбачає можливість встановлення модифікованих або саморобних прошивок. Зізнатись, тоді я був далекий від цього. І навіть півроку тому мене ледве цікавили подібні речі. Глибоко в душі, я був певен: те, що робить виробник, вже призначено для нормального використання.

Яке ж було моє розчарування, коли я придбав телефон із піднебесної, де заводськими налаштуваннями було заборонено використання Google, Skype, Facebook та інших програм. В принципі, на деякі речі можна було заплющити очі, але коли мій телефон не припускав використання облікової запису Google- я взяв із себе обіцянки обов'язково розібратися у що б мені це не стало.

Пройшло півроку і мої кастомні прошивки з успіхом використовуються у всьому світі.

У цій серії статей йтиметься про те, як робити reverse програмування для Android, реалізовувати патчі, твікі та моди.

Преамбула

І так! Давайте спершу визначимося з поняттями, які будуть використовуватись у даноїстатті. Ваше звичне розуміння при цьому може сильно відрізнятися.

Патч- Зміна або заміна існуючого програмного коду з метою модифікації алгоритму програми.
Мод- як правило, додавання додаткового функціоналу до існуючого програмного коду без зміни алгоритму.
Твік- удосконалення функціоналу програми з метою полегшення доступу до параметрів системи.

Також хочу зауважити, що всі приклади буде взято для телефону HTCале це не означає, що дана інформаціяне можна використовувати на інших телефонах.

Підготовка середовища

Обійдусь без докладних інструкційяк користуватися тим чи іншим програмним забезпеченням. Якщо вам цікава ця стаття і ви дочитали до цих рядків, то я сподіваюся, що ви вже досвідчений користувач і маєте досвід використання, чи хоча б експериментування в даній галузі. Інструкцій, статей та результатів тестування повно у відкритому доступі, втім, як і на Хабрі. Також обійдуся без опису деяких термінів, інакше стаття вийде дуже великою та нудною. Писатимемо лише у справі. Впевнений, що середовище у вас вже давно стоїть. Якщо ні, то пропоную завантажити та встановити.

1 . Android SDK. Це середовище розробки додатків для Андроїд. Для того, щоб робити модифікації, нам обов'язково доведеться перевіряти наш програмний код. Середовище розробки є найкращим, що ми можемо використовувати.
2 . Android Kitchen. Дана утиліта дозволить вам працювати з образами системних партій офіційної або неофіційної прошивки.
3 . JD-GUI. Декомпілятор програмного коду Java. Відразу зазначу, що це найкращий декомпілятор щодо зручності використання.
4 . DJ Java Decompiler. Ще один декомпілятор, або дизассемблер, як дехто любить називати, програмного коду мови Java. Не зручний у плані використання, але розбирає код, який інколи не розуміє JD-GUI.
5 . smali. Ще один дизассемблер, але вже дальвік коду. smali потрібен для дизассемблирования, а backsmali асемблювання коду.
6 . dex2jar. Утиліта для конвертації виконуваних файлів коду Dalvik.

Перетворення прошивки

Зрозуміло, прошивка, яка стоїть у вас на телефон від виробника, оптимізована з метою скорочення енергоспоживання. Щоб прошивку можна було змінювати, її необхідно перетворити на формат, що дозволяє змінювати код. Для цього використовується Android Kitchen. Можна звичайно й руками, як я й робив раніше, поки не знайшов цієї самої «кухні». Як витягувати системну область з телефону, встановлювати середовище, робити прошивки DEODEX, ви можете прочитати в інтернеті. Якщо вам уже нічого не зрозуміло, я думаю, варто почекати зі статтею, поки ви не наберете достатньо досвіду.

Після того, як прошивка з оптимізованого вигляду (ODEX - оптимізований dalvik виконуваний код, якщо мені не змінює пам'ять) стала DEODEX (тобто НЕ оптимізованою), все виконувані файлиготові для модифікації.

Безпосередньо модифікації

Створення патчів
Як я вже й розповідав, мій телефон спочатку мав заборону використання Google. Ну хоч ти трісну, на Playstore не зайти, обліковий записне налаштувати, телефонна книгадо ладу не синхронізується. Навіщо потрібний такий Android? Довго копаючись у логах самого пристрою, я знайшов записи, які говорили про те, що використання Google заборонено. Найнезручніше в Android, ви бачите лог, але не знаєте, який системний додаток його виробляє. Щоб знайти від куди ноги ростуть, мені довелося розпатрати всі системні програми до дизассемблированного Java коду. Це зайняло достатньо часу, але я досі користуюся виконаною роботою при аналізі та пошуку потрібного коду. Етапи отримання такого інструментарію такі:
1 . Зробити DEODEX всієї прошивки
2 . Вашу нову DEODEX прошивку треба буде зібрати та прошити на телефон. Як це робиться – тема іншої статті.
3 . З кожного файлу, що знаходиться в /system/framework, витягнути файл classes.dex і переконвертувати в JAR за допомогою dex2jar.
4 . Кожен отриманий JAR відкрити в JD-GUI та пере-зберегти у вихідний код
5 . Розпакувати вихідний код із архіву.

У результаті вийшло стільки папок, скільки було JAR файлів в /system/framework, і кожна папка мала структуру вихідних кодів Java.
Шляхом нескладних маніпуляцій, я швидко знайшов місце, яке генерувало записи в logcat.

Не розглядатимемо всю логіку заборони, тому що для кожного випадку це окрема історія. Мені довелося витратити пару годин, перш ніж я знайшов де проводяться перевірки, побудувати в голові блок схему алгоритму і зрозуміти куди треба лізти, щоб трохи «попсувати» алгоритм.

Виявилось все просто. Є підпрограма, яка на основі заздалегідь встановлених констант, при зверненні відповідала, чи ставиться телефон до Китаю чи ні.

Код знаходився у файлі HTCExtension.jar, а клас, який містив цю підпрограмузнаходився в

Розпакування та аналіз оригінального файлу
1 . Спершу нам треба взяти оригінальний DEODEX JAR файл, який відповідає за потрібну частину коду. У нашому випадку HTCExtension.jar.
2 . Відкрити будь-яким архіватором та витягнути від туди classes.dex
3 . За допомогою конвертера dex2jar перетворити його на JAR файл. Команда: dex2jar.bat classes.dex
4 . Відкрити отриманий файл classes_dex2jar.jar в JD-GUI.
5 . Так, найчастіше JD-GUI декомпілює код не оскільки він виглядає в оригіналі, воно і зрозуміло, але читати цілком можна. У вихідному джерелі ми бачимо, що підпрограма перевіряє параметри проекту та мовний прапор прошивки. У нашому сумному випадку повертається значення TRUE.
public static boolean isChina() ( if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23 g == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return true;
6 . Щоб зробити патч, нам треба дизасемблювати сам код Dalvik. Для цього використовуємо baksmali. Найзручніше створити окрему папку і покласти туди три файли разом: HTCExtension.jar, smali.jarі baksmali.jar. Даємо команду java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

Це API вашої версії Android. Для JB - це 16
- папка, де знаходяться всі фреймворки прошивки.

У моєму випадку це була команда
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar
7 . У нашій новоствореній папці з'явилася папка HTCExtension, а в ній наші файли з кодом Dalvik.
8 . Шукаємо файл по дорозі \com\htc\util\contacts\BuildUtils$Customization.javaі дивимося код:
.method public static isChina()Z .registers 3 .prologue const/4 v0, 0x1 .line 276 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, , v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xda if-eq v1, v2, :cond_13 sget-short v1,Fc/ ;->Htc_PROJECT_flag:S const/16 v2, 0x17 якщо в1, v2, :cond_14 .line 297:cond_13:goto_13 return v0 .line 283:cond_14 sget-short v1, Lcom/tc/ Htc_PROJECT_flag:S if-ne v1, v0, :cond_1d .line 285 const/4 v1, 0x2 sget-short v2, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_LANGUAGE_flag:S if-eq. 291:cond_1d sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x1b if-eq v1, v2, :cond_13 .line 297 const/4 метод
9 . Страшно, чи не так? Нічого не зрозуміло. Але, ця справа можна виправити. Створивши кілька своїх патчів і набивши цим руку, ви легко зможете модифікувати код без сторонніх засобів. У нашому випадку, у цьому коді
.prologue const/4 v0, 0x1 відбувається надання змінної v0 значення 1, тобто TRUE. Далі йдуть усілякі перевірки, і якщо телефон не китайський, то значення змінної змінюється:
.line 297 const/4 v0, 0x0 goto:goto_13
10 . Найпростіший спосіб врятувати батька російської демократії, це змінити код наступного:
.prologue const/4 v0, 0x0 , тобто поміняти значення змінної з 1 на 0. Тобто що б не було, завжди поверталося значення FALSE і в JD-GUI код виглядав би як public static boolean isChina() ( if (( HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || Flag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return false;
11 . Так, метод, працюватиме. Але ж ми не шукаємо легких шляхів - це раз. По-друге, не зовсім красиво. Хочеться коду щось на зразок
public static boolean isChina() ( return false; )
12 . А як нам отримати Dalvik код цього вихідного коду? Для новачків ми зробимо невеликий трюк.

Створення коду Dalvik
1 . Відкриваємо Android SDK.
2 . Створюємо новий проект і в наш єдиний тестовий клас пишемо наступний код
package ru.habrahabr.test; public class test (public static boolean isChina() (return false;))
3 . Компілюємо наш проект і потім беремо зібрану програму з робочої області.
4 . Кладемо зібраний додаток до папки, де ми з вами потрошили JAR файл.
5 . Даємо команду java -Xmx512m -jar baksmali.jar -a -d -o test -x test .apk
6 . Ми дизассемблировали щойно зібраний додаток у Dalvik код.
7 . Відкриваємо наш файлик test.smali і бачимо там код
.method public static isChina()Z .registers 1 .prologue .line 7 const/4 v0, 0x0 return v0 .end method
8 . Все, код для патчингу готовий.
Накочування патча
1 . Dalvik код засмічений маркерами, що вказують на рядок коду в оригінальному вихідному файлі. Це потрібно при виведенні помилок, якщо такі є у вашій програмі. Без вказівок рядків код також чудово працює.
2 . Видаляємо рядки з нумерацією рядків, копіюємо та замінюємо метод (підпрограму) у нашому \com\htc\util\contacts\BuildUtils$Customization.javaфайл.
.method public static isChina()Z .registers 1 .prologue const/4 v0, 0x0 return v0 .end method
3 . Зберігаємо файл. Так, забув сказати, редактор потрібен нормальний, наприклад, Notepad++ або EditPlus. Кому який подобається.
Компіляція та складання патченого JAR файлу
1 . За допомогою backsmali ми розпатрали наш JAR файл, а тепер його треба зібрати назад.
2 . Даємо команду java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3 . У нашій татці з'являється файлик classes.dex
4 . Знову відкриваємо HTCExtension.jarфайл архіватором та замінюємо в ньому існуючий classes.dexна наш щойно створений.
5 . Все, наш HTCExtension.jarмістить модифікований програмний код.
Заміна оригінального файлу на патчений
Зазвичай, для рядових користувачів створюються спеціальні скрипти, які замінюються через recovery. Але нам таке не цікаво. По-перше, довго і нудно, по-друге ми ж досвідчені користувачіі можемо собі дозволити деякі тонкощі.

1 . Замінити поточний робочий файл можна наступними командами, якщо у вас вже стоїть прошивка DEODEX і є root доступ:

Adb push HTCExtension.jar /sdcard/HTCExtension.jar adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar of=/system/framework/HTCExtension.jar.back dd if=/sdcard /HTCExtension.jar of=/system/framework/HTCExtension.jar chmod 644 /system/framework/HTCExtension.jar rm /data/dalvik-cache/system@ [email protected]@classes.dex reboot

Перша команда закидає патчений файл на флешку
Друга команда відкриває shell
Третя команда дає root доступ
Четверта команда монтує систему в режим читання/запису
П'ята команда створює резервну копію файлу
6-а команда перезаписує існуючий файл новим патченим.
7-а команда налаштовує дозволи
8-а команда видаляє кеш
9-а команда робить перезавантаження пристрою.

2 . Спасибі, що дочитали до цього пункту, залишилося небагато.
3 . Після перезавантаження ваш новий патчений код набуде чинності.
4 . Якщо код не працює або вискакує помилка, шляхом не хитрих комбінацій можна повернути назад резервну копію.
adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar.back of=/system/framework/HTCExtension.jar rm /data/dalvik-cache/system@ [email protected]@classes.dex reboot

Епілог

Так, комусь видалася ця стаття надто специфічною, комусь малозрозумілою, а комусь марною. Я спеціально обійшовся без поглибленої деталізації та ілюстрацій як це все виглядає живим і на практиці. По-перше, ця праця буде невдячна і тільки породить ще більше питань. По-друге, не хочу бачити армію користувачів на форумах, які скаржаться, що вбили телефон.

До наступної статті я розповім, як робити Твіки. Буде прикладом використання автоматичного запису телефонних дзвінків рідними засобами телефону. Дякую за вашу увагу.

P.S. Якщо щось не зрозуміло чи бентежить, ставте питання - завжди буду радий відповісти і пояснити.

Постановка проблеми

Зберігання інформації в комп'ютері пов'язане з ризиком її випадкового або навмисного розкриття, тому для її захисту застосовують різні методи та засоби. Найчастіше як основний засіб, що перешкоджає вільному доступу до інформації в електронному вигляді, використовують шифрування, що реалізується апаратним або програмним способом. Як об'єкти криптографічного захисту виступають окремі файли, групи файлів, каталоги та, нарешті, логічні диски. Результатом шифрування є файлові архіви, що знаходяться на електронному носії. Подробиці реалізації різних криптографічних алгоритмів можна зазначити, що в цьому випадку ЦКУ необхідно також вирішувати завдання, пов'язані з гарантованим знищенням початкової незашифрованої інформації, щоб унеможливити її відновлення.

Справа в тому, що особливістю всіх використаних файлових систем (FAT, NTFS та ін.).є не можливість перезапису інформації в кластерах, що належать якомусь файлу, поки даний файлне буде помічено, як віддалений. Тобто під час шифрування файлу його зашифрований екземпляр записується не замість початкового файлу, а у вільні кластери електронного носія, і тільки після завершення процесу шифрування незашифрований файл видаляється, якщо це не передбачено алгоритмом.

Таким чином, можливе відновлення видаленої незашифрованої інформації, чим успішно справляються такі програмні продукти, як File Recover, Back2Life, R-Studio, GetDataBack for NTFS та ін.

Якщо не враховувати рекомендацій, пов'язаних з повним фізичним знищенням електронного носія,то унеможливити це можна лише шляхом багаторазового перезапису тих кластерів магнітного диска, де раніше зберігалася конфіденційна інформація. Наприклад, американський національний стандарт Міністерства оборони DOD 5220.22-M (E) передбачає перший прохід запис випадкових чиселУ відомому алгоритмі Пітера Гутмана (Peter Gutmann), який вважається одним з найнадійніших, на місце знищуваних даних по черзі пишуться всі відомі комбінації розрядів (всього здійснюється 35 проходів). — методи знищення інформації підтримують американські стандарти DOD 5220.22-M, Army AR380-19, NCSC-TG-025, Air Force 5020, NAVSO P-5239-26, HMG IS5,німецький VSITR, канадський OPS-II та російський ГОСТ P50739-95 та ін. шифрування, що виконується всередині логічного диска, завжди пов'язані з ризиком неповного знищення початкової інформації, тому необхідний інший підхід до цієї проблеми.

mob_info