Как сделать дамп памяти из usb прошивки

Обновлено: 06.07.2024

rkDumper
Утилита для автоматического снятия дампов прошивок RockChip устройств

Прикрепленный файл

Версия 1.08 Windows rkDumper_108.zip ( 66.71 КБ )

1. Автоматически снимает дамп NAND по разделам в соответствии с информацией в файле "parameter" (RKFW/RKAF)
2. Создает файлы конфигурации config.cfg для RKAndroidTool (1.xx, 2.xx)

Важно:
1. На устройстве должен быть выключен режим "USB debug" либо предварительно переключите его в режим прошивки (LOADER mode) при помощи RKAndroidTool
2. Все драйвера должны быть предварительно проинсталлированы
3. Для работы в ОС выше Windows XP утилите требуется запуск от имени администратора

Протестировано на:
WinXP (32), WinVista(32), Win7 (32/64), Win10 (64)

0bb4:2910 MSC device (USB debug off)
0bb4:0c02 MSC device (USB debug on)

2207:0000 MSC device (USB debug off)
2207:0010 MSC device (USB debug on)

Прикрепленный файл

1.08 (08.08.2019)
- bug fixed.
1.07 (10.07.2019) rkDumper_107.zip ( 66.71 КБ )
+ support of RK3388 added;
+ support of RK3036G added;
+ drivers version&date;

Прикрепленный файл

minor improvements.
1.06 (04.04.2018) rkDumper_106.zip ( 65.74 КБ )
+ /part key added;
+ /nrst key added;
+ USB version decoding;
+ Low Speed mode detection;

Прикрепленный файл

minor improvements.
1.05 (09.10.2017) rkDumper_105.zip ( 67.21 КБ )
+ /load key added;
+ "idb" command added;
+ support of RK3399 added;
+ support of RK2818 added;
+ "chip" command added;
+ "bad" command added;
+ "MASKROM mode" detection added;

Прикрепленный файл

minor improvements.
1.04 (03.05.2017) rkDumper_104.zip ( 46.36 КБ )
+ support of RK3328 added;

minor improvements.
1.03 (10.03.2017) rkDumper_103.zip ( 46.24 КБ )
+ support of RK3229 added;
+ /last key added;
+ RSCE file size correction added.
1.02 (24.02.2016) rkDumper_102.zip ( 40.63 КБ )

изменена логика работы ключа /user;

Прикрепленный файл

изменена логика обработки ошибок;
+ добавлен режим parm;
+ добавлен ключ /pfile.
1.01 (15.01.2016) rkDumper_101.zip ( 34.62 КБ )
+ добавлена поддержка RK2928;
+ добавлена поддержка RK3126;
+ добавлена поддержка RK3368;
+ добавлено определение режимов MTP&PTP;

Прикрепленный файл

улучшены некоторые алгоритмы.
1.00 (02.09.2015) rkDumper_100.zip ( 34.98 КБ )
! Release;
+ добавлен ключ /incl;
+ добавлен ключ /excl;


Если у Вас имеется устройство на неуказанном в списке SoC Rockchip, напишите в личку название Вашего устройства, название SoC и его VID/PID. Я соберу персональную версию для проведения теста.
1. rkAndroidTool
1.1. rkAndroidTool 2.3
1.2. AndroidTool_Release_v2.35.rar ( 1.73 МБ )
1.3. RK_Android_Tool_2.3.9.zip ( 2.05 МБ )
1.4. AndroidTool_Release_v2.43.zip ( 1.54 МБ )
1.5. AndroidTool_Release_v2.47.zip ( 1.56 МБ )
1.6.AndroidTool_Release_v2.51.zip ( 1.58 МБ )
1.7. EN-AndroidTool_Release_v2.58.rar ( 1.69 МБ )
1.8. RKAndroidTool_v.2.69.rar ( 797.02 КБ )
2. Linux Upgrade Tool 1.2.7 Linux_Upgrade_Tool_1.27.rar ( 1.17 МБ )
3. Драйвера
3.1. DriverAssitant_v4.3.zip ( 9.36 МБ )
3.2. Rockchip DriverAssitant_v4.4.rar ( 9.19 МБ )
3.3. Rockchip_Driver_Assistant_4.5.zip ( 9.37 МБ )
3.4. DriverAssitant_v4.6.zip ( 9.38 МБ )
3.5. DriverAssitant_4.8.rar ( 9.26 МБ )
4. Fix для установки драйверов на Win8 и Win10 Rockchip_driver_USB_fix.zip ( 687.21 КБ )
5. Утилита для записи прошивок на SD-карту SD_Firmware_Tool._v1.46.zip ( 455.49 КБ )
6. Тема поиска прошивок

Альтернативная ссылка для скачивания XDA-developers
"Старый" метод получения дампа

Баг репорт:
DNS AirTab p82w перешит в CM 10.1 v1.4

Дампил, а затем сравнивал с оригиналами.

Found LOADER Rockchip device
Partitions:
misc = 0x00002000 : 0x00002000
kernel = 0x00004000 : 0x00006000
boot = 0x0000a000 : 0x00008000
recovery = 0x00012000 : 0x00008000
backup = 0x0001a000 : 0x000c0000
cache = 0x000da000 : 0x00040000
userdata = 0x0011a000 : 0x00800000
kpanic = 0x0091a000 : 0x00002000
system = 0x0091c000 : 0x00140000
user = 0x00a5c000 : ----------
Partition "misc" saved (format: unknown)
Partition "kernel" saved (format: RockChip KRNL signed file
)
Partition "boot" saved (format: RockChip KRNL signed file
)
Partition "recovery" saved (format: RockChip KRNL signed file
)
Partition "backup" saved (format: unknown)
Partition "cache" saved (format: ext4 image)

Правильно сдампились только разделы kernel, boot и recovery, остальные

misc - (размер 4 194 304), внутри содержит
по адресам с 000000 по 00BFFF - везде 00
по адресам с 00BFFF по 3FFFFF - везде FF

cache - (размер 134 217 728), внутри содержит вначале 00 с мусором, а затем
с адреса 60F000:

Starting recovery on Sun Oct 19 21:17:32 2014
framebuffer: fd 4 (1024 x 768)
CWM-based Recovery v6.0.1.5
recovery filesystem table
=========================
0 /tmp ramdisk (null) (null) 0
1 /boot emmc /dev/block/mtdblock3 (null) 0
2 /cache ext4 /dev/block/mtdblock6 (null) 0
3 /data ext4 /dev/block/mtdblock7 (null) 0
4 /emmc vfat /dev/block/mtdblock10 (null) 0
5 /kernel emmc /dev/block/mtdblock2 (null) 0
6 /recovery emmc /dev/block/mtdblock4 (null) 0
7 /sdcard vfat /dev/block/mmcblk0p1 /dev/block/mmcblk0 0
8 /sd-ext auto /dev/block/mmcblk0p2 (null) 0
9 /system ext4 /dev/block/mtdblock9 (null) 0

W:Unable to get recovery.fstab info for /datadata during fstab generation!
I:Completed outputting fstab.
I:Processing arguments.
I:Checking arguments.
I:device_recovery_start()
Command: "/sbin/recovery"

I:Checking for extendedcommand.
I:Skipping execution of extendedcommand, file not found.
I:Can't partition unsafe device: /dev/block/mmcblk0p1
I:Can't format unknown volume: /external_sd
Starting recovery on Thu Oct 2 12:13:07 2014
framebuffer: fd 4 (1024 x 768)
CWM-based Recovery v6.0.1.5
recovery filesystem table
=========================
0 /tmp ramdisk (null) (null) 0
1 /boot emmc /dev/block/mtdblock3 (null) 0
2 /cache ext4 /dev/block/mtdblock6 (null) 0
3 /data ext4 /dev/block/mtdblock7 (null) 0
4 /emmc vfat /dev/block/mtdblock10 (null) 0
5 /kernel emmc /dev/block/mtdblock2 (null) 0
6 /recovery emmc /dev/block/mtdblock4 (null) 0
7 /sdcard vfat /dev/block/mmcblk0p1 /dev/block/mmcblk0 0
8 /sd-ext auto /dev/block/mmcblk0p2 (null) 0
9 /system ext4 /dev/block/mtdblock9 (null) 0

W:Unable to get recovery.fstab info for /datadata during fstab generation!
I:Completed outputting fstab.
I:Processing arguments.
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
E:Can't mount /cache/recovery/command
I:Checking arguments.
I:device_recovery_start()
Command: "/sbin/recovery"

I:Checking for extendedcommand.
I:Skipping execution of extendedcommand, file not found.
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
E:Can't mount /cache/recovery/log
E:Can't open /cache/recovery/log
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
E:Can't mount /cache/recovery/last_log
E:Can't open /cache/recovery/last_log
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
W:Can't unlink /cache/recovery/command
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
E:Can't mount /cache/recovery/log
E:Can't open /cache/recovery/log
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
E:Can't mount /cache/recovery/last_log
E:Can't open /cache/recovery/last_log
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
W:Can't unlink /cache/recovery/command
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
E:Can't mount /cache/recovery/log
E:Can't open /cache/recovery/log
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
E:Can't mount /cache/recovery/last_log
E:Can't open /cache/recovery/last_log
W:failed to mount /dev/block/mtdblock6 (Invalid argument)
W:Can't unlink /cache/recovery/command

-- Wiping data.
Formatting /data.
Creating filesystem with parameters:
Size: 4294967296
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 16384
Label:
Blocks: 1048576
Block groups: 32
Reserved block group size: 255
Created filesystem with 11/262144 inodes and 34891/1048576 blocks
warning: wipe_block_device: Discard failed

Formatting /cache.
Creating filesystem with parameters:
Size: 134217728
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 1024
Label:
Blocks: 32768
Block groups: 1
Reserved block group size: 7
Created filesystem with 11/8192 inodes and 1550/32768 blocks
warning: wipe_block_device: Discard failed

Formatting /sd-ext.
I:Formatting unknown device.
No app2sd partition found. Skipping format of /sd-ext.
Formatting /sdcard/.android_secure.
I:Formatting unknown device.
Data wipe complete.

-- Installing: /sdcard/cm10/CrewRKTablets_RK30_CM10.1_sensor_x=y_y=z_z=-x.zip
Finding update package.
I:Update location: /sdcard/cm10/CrewRKTablets_RK30_CM10.1_sensor_x=y_y=z_z=-x.zip
Opening update package.
Installing update.
>>> Mount /systemminzip: Extracted file "/system/lib/hw/sensors.rk30board.so"

Install from sdcard complete.

-- Installing: /sdcard/cm10/Oma RK30 CM10.1 Format NAND.zip
Finding update package.
I:Update location: /sdcard/cm10/Oma RK30 CM10.1 Format NAND.zip
Opening update package.
Installing update.

================================================
| . Wiping Script . |
| This operation will remove all your data. |
| You have 15 seconds to turn OFF the device |
| to cancel this procedure. Oma. |
================================================

Writing inode tables: 0/32 1/32

backup - программа долго обрабатывала (хотя этот раздел вообще никогда не прошивался), а затем создала файл (размером 402 653 184).

На userdata - програма вылетела.
userdata.img - (размер 0)

Прикрепленный файл

Прикрепляю:
лог работы программы (в архиве): rkDumper.rar ( 19.69 КБ )

файл параметеров разметки разделов (переименовал в .txt) - тоже имеется мусор вначале и в конце: parameter.txt ( 619 байт )

ЗЫ Возможно, до решения проблемы с вылетами, имеет смысл сделать ключик /skip:0,1. 9
(где цифры - разделы, исключаемые при снятии дампа).

Для начала общие замечания:
1. Утилита запрашивает данные из устройства и записывает их в файл AS IS
2. Устройство постоянно пишет данные в разделы и даже одна перезагрузка приведет к тому, что дампы между собой не будут совпадать.

misc - (размер 4 194 304), внутри содержит
по адресам с 000000 по 00BFFF - везде 00
по адресам с 00BFFF по 3FFFFF - везде FF cache - (размер 134 217 728), внутри содержит вначале 00 с мусором backup - программа долго обрабатывала (хотя этот раздел вообще никогда не прошивался), а затем создала файл (размером 402 653 184). Не прошивался - не значит, что раздела не существует; размер соответствует прописанному в parameter.
Тут не вылетела, а остановила выполнение с ошибкой. Длина раздела (2GB) не влезла в unsigned long int (замечательно, что Вы сделали лог в режиме debug). Нужно менять на unsigned long long int (потребуется время).
Поправка: >=4GB
файл параметеров разметки разделов (переименовал в .txt) - тоже имеется мусор вначале и в конце:

Это не мусор, файл parameter и в прошивках и в памяти устройства хранится в виде PARM-signed файла. Снять подпись и переподписать можно с помощью утилиты imgRePackerRK

Как итог: есть одно замечание; вынес в шапку, ждите исправление

Об этом подумаю, но позже

ONYX BOOX C67SML COLUMBUS
(электронная книга с e-ink экраном, rk3026, android 4.2)

ЗЫ: диск монтируется как G-внутренняя, H-sdcard:
через RKAndroidTool 2.1 все работает.

C67SML COLUMBUS
(электронная книга с e-ink экраном, rk3026, android 4.2)
<. >
ЗЫ: диск монтируется как G-внутренняя, H-sdcard:
через RKAndroidTool 2.1 все работает.

Самое большое неудобство подобных утилит - я никак не смогу повторить ситуацию. Судя по логу, не удается открыть диски по символьному линку (для определения связи с буквой). Поэтому сразу вопрос: какая ОС? Я тестировал только под Win7 и WinXP.

PS. У Вас RK3026. Если VID/PID отличается от 3066, то дамп все равно снимать откажется. Переведите в LOADER mode утилитой RKAndroidTool 2.1 (кнопка "Switch") и попробуйте сделать дамп (VID и PID будет виден в логе)

Suvorik1969

Заранее подготовить папки в корне диска ( раздела ) на ПК.

В именах папок и пути к ним не должно быть ничего кроме латиницы, цифр и нижнего дефиса.

В данном случае, как пример, взят смартфон Lenovo S1L ( Mediatek MT6753 ).

По аналогии ниже описанных действий Вам нужно брать данные со скаттер-файла своего смартфона ( прошивки ) и так же на своём гаджете использовать Terminal Emulator for Android для вычисления размера полного дампа.

Для исполнения данной команды в этом эмуляторе терминала рут-права не требуются.

Размер полного дампа на устройстве с процессором МТК вычисляется так ( открыть спойлер ).

Запустить приложение Terminal Emulator for Android на Вашем гаджете.

Ввести команду cat /proc/partitions

Вводить команду нужно точно так же, как она написана здесь строчкой выше - с одним пробелом после cat и далее с теми же слешами без пропусков и лишних символов.

Приложение отобразит все разделы с памяти устройства количеством блоков в разделе ( один блок = 1024 Байта ).

В строчке mmcblk0 отображена вся память целиком.

Значение со строчки mmcblk0 умножаем на 1024 и получаем размер полного дампа в Байтах.

Переводим полученное значение размера из Dec в Hex и получаем нужное значение для ввода в поле "Length" окна Flash Tool.

На смартфоне Lenovo S1L значение строчки mmcblk0 показало равным 15267840.

15267840 х 1024 = 15634268160 (Dec) = 0x3A3E00000 (Hex).

Для вычислений и перевода из Dec в Hex вполне подойдёт калькулятор с Windows на ПК.

В открытом калькуляторе на вкладке "Вид" выбрать "Программист" - калькулятор переключится в программный вид и автоматом будет выбран режим Dec ( десятичные ).

В этом режиме производим умножение.

Далее при полученном результате выбираем Hex ( шестнадцатиричные ).

Калькулятор переведёт значение из Dec в Hex.

Вот это значение (Hex) и есть нужный Вам тот размер полного дампа с Вашего гаджета, который Вы будете указывать в дальнейшем в окне Flash Tool.

18.jpg
2016-11-08_085030.jpg

2016-11-08_085447.jpg
2016-11-08_085507.jpg

На ПК запустить SP Flash Tool ( SP_Flash_Tool_exe_Windows_v5.1548.00.000 или более поздняя версия ).

1. В папке с программой Flash Tool правым кликом по значку flash tool вызвать контекстное меню.

2. Запустить Flash Tool левым кликом по "Запуск от имени администратора". Если Вы на ПК под учётной записью администратора, то можно и просто двойным кликом по значку flash tool запустить программу.

3. При запуске Flash Tool в первый раз вам выдаст оповещение об отсутствии агента и скаттер-файла в программе. Просто нажмите на "ОК" и откроется стартовое окно программы Flash Tool.

1.jpg
2.jpg

4. Нажать на кнопку "Download Agent".

5. Выбрать папку с программой Flash Tool.

6. В папке выбрать файл "DA_SWSEC.bin".

7. Нажать на кнопку "Открыть".

3.jpg

8. Нажать кнопку "Scatter-loading".

9. Выбрать папку, где находится скаттер-файл с той прошивки, на которой у Вас в данный момент Ваш гаджет.

10. В папке выбрать сам scatter-файл ( выглядит как "MT6753_Android_scatter" с номером Вашего процессора МТК ). Можно выбрать либо из папки с заводской прошивкой для своего аппарата под SP Flash Tool, либо как отдельно сохранённый скаттер-файл. В моём примере скаттер-файл отдельно сохранён в заранее подготовленной папке без всех остальных файлов для установки прошивки с ПК.

11. Нажать на кнопку "Открыть".

4.jpg

12. В окне Flash Tool появится список разделов ( с полными путями к файлам или нет - не имеет значения ). Перейти на вкладку "Readback".

5.jpg

13. На вкладке Readback нажать кнопку Add.В списке ниже появится новая строчка.

14. Сделать двойной клик мыши по строчке. Программа предложит выбрать путь и ввести имя файла для сохранения.

15. Указать на компьютере папку где резервная копия полного дампа будет хранится до момента потребности в ней.

16. Задать имя, при этом обязательно оставляем начальные ROM_ в имени и используем только латиницу, цифры и нижний дефис. Дабы в будущем не ломать голову, вспоминая нужные данные старт адреса и длины, я их прописываю в имени через нижний дефис ( пробел, кириллица или иные знаки в имени не допустимы ).

17. Нажать на кнопку "Сохранить".

7.jpg

18. Следом появится окно Readback block start address. Убедиться, что стоит пункт "Hex".

19. В пункте Region выбрать: EMMC_USER (MT6592 и выше).

В строке Start Address ввести нулевое значение 0x0.

В строке Length ввести Вами ранее вычисленное значение размера полного дампа и преведённого в Hex ( в моём примере это значение 0x3A3E00000 ).

20. Нажать на кнопку "ОК".

8.jpg

21. Проверить и удостовериться, что введены правильные значения во всех столбцах.

22. Нажать на кнопку "Read Back".

Далее после нажатия на "Read Back" аккуратно, одним разом без перетыканий подсоединяем выключенный гаджет к ПК по USB и тут же оставляем гаджет без перекладываний, переворачиваний и тому подобных физических воздействий как на него, так и на ПК.

Процесс сливания дампа начнётся сразу же после подсоединения гаджета по USB.

И лучше на время процесса сливания дампа с гаджета отлучитесь от ПК ( попейте чайку минут 20 - 25 ).

На гаджетах с не съёмными аккумуляторами может присутствовать кнопка "reset", как например на смартфоне Lenovo P780.

Такая кнопка служит аналогом вытаскивания-вставки аккумулятора.

В этом случае нажмите эту кнопку на пару секунд и отпустите её перед подсоединением к ПК.

9.jpg

Дальнейшие действия с 23-го по 29-е будут производиться без Вашего участия :

23. Сразу после подсоединения выключенного гаджета по USB к ПК и успешного срабатывания драйверов в Диспетчере устройств на ПК должен определиться подсоединённый выключенный гаджет, как MediaTek Preloader USB VCOM (Android) (COMx) ( в моём случае как COM4 ) и так же отразиться в нижнем ряду окна Flash Tool.

24. Пробежит красная полоса "Download DA 100%".

10.jpg

25. В окне Flash Tool слева внизу под картинкой отобразится информация по чипу с Вашего гаджета.

26. В нижнем ряду окна Flash Tool (слева направо) начнётся отсчёт размера слитого дампа в Мб и далее после 1000 Мб в Гб, скорость сливания в Мб/сек, текущее время, объём уже слитого дампа в процентах и постепенное заполнение шкалы синим цветом.

11.jpg

27. По окончании сливания дампа шкала будет заполнена синим цветом полностью, там же на шкале надпись достигнет "Read back 100%".

28. Появится небольшое окошко "Read back Ok".

29. Flash Tool автоматически программно отключит подсоединённый гаджет, в Диспетчере устройств на ПК исчезнет строчка "MediaTek Preloader USB VCOM (Android) (COMx)".

16.jpg

30. Теперь можно закрыть программу Flash Tool и отсоединить гаджет от ПК. Дабы посмотреть что у Вас получилось - откройте папку со слитым дампом, правый клик на файле, вкладка "Свойства". Там в скобках отображён реальный размер слитого дампа.

17.jpg

Советую сразу же создать проверочный файл хеш-сумм MD5 для того, чтобы в будущем Вы смогли убедиться в целостности слитого дампа, заново создав файл хеш-сумм MD5 и сравнив его с прежним. Для создания файла хеш-сумм MD5 я использую на ПК утилиту FileMenu Tools - посмотреть инструкцию по созданию файла хеш-сумм и скачать утилиту можно по ссылке здесь (спойлер 2 и 4 )

Внимание ! На новых процессорах МТК от MT67xx и позже ( а смартфон S1L как раз на процессоре MT6753 ) для последующего успешного восстановления со слитого полного дампа необходимо отдельно переписывать разделы tee1 и tee2 на устройство либо отдельно слитым дампом с этих разделов, либо в программе Flash Tool в режиме "Download Only" ( при наличии пакета прошивки для установки с ПК ).

После записи одного только слитого полного дампа на устройство на процессорах МТ67хх, оно у Вас не включится.

Мы рассмотрим здесь вариант, когда допустим, что нет у нас пакета прошивки для установки с ПК на наше устройство.

Следовательно нам необходимо слить кусок дампа с разделов tee1 и tee2.

А для этого нам нужны Start Address и Length.

Следовать нижеописанному ( открыть спойлер ).

И так же по аналогии всех действий сливания полного дампа, следом, отсоединив выключенный смартфон от ПК после сливания полного дампа, приступаем к сливанию куска дампа с разделов tee1 и tee2 суммарно, начиная вводить полученные значения Start Addres и Length на шаге 16 и далее ( выше по скриншотам ).

Запустить тот же Terminal Emulator for Android на Вашем гаджете.

Ввести команду cat /proc/emmc

Вводить команду нужно точно так же, как она написана здесь строчкой выше - с одним пробелом после cat и далее с теми же слешами без пропусков и лишних символов.

Дамп tee1 и tee2.jpg

Приложение отобразит все разделы с памяти устройства в секторах, как стартовый адрес каждого раздела ( Start Addres ), так и размер занятого пространства в каждом разделе ( nr_sects ).
Чтобы узнать реальные значения в (Hex) необходимо выведенные на экран значения умножать на 200 в том же (Hex).
Итак, нам нужны данные старт адреса и длины обоих разделов tee1 и tee2 в одном куске дампа.
Старт адрес - понятно, тут мы берём данные с экрана со столбика Start Address и строки tee1 - это 00030000 = 0x30000.
Умножаем ( в Hex) 0x30000 на 200 и получаем значение 0x6000000.
Sart Address : 0x6000000
Далее, чтобы наш кусок дампа включал в себя полностью два раздела tee1 и tee2, мы должны взять за окончание дампа стартовый адрес с последующего за разделом tee2 раздела fpr, то есть 00035000 = 0x35000.
Так же (в Hex) умножаем 0x35000 на 200 и получаем значение 0x6A00000.
Теперь вычитаем разницу между началом и концом куска дампа :
0x6A00000 - 0x6000000 = 0xA00000
Вот эта разница и есть длина дампа разделов tee1 и tee2.
Length : 0xA00000
Итого.
Sart Address : 0x6000000
Length : 0xA00000

Для просмотра скаттер-файла рекомендуется Notepad++ . В качестве зеркала версия: Notepad++ 6.6.9

Ну, и в заключение, здесь под спойлером видеоролик всего, что описано выше ( сливание полного дампа и куска дампа tee1+tee2, а так же создание и сохранение контрольных файлов хеш-сумм слитых дампов ).

Для нормальной видимости всего шрифта в видеоролике выберите в просмотре качество 720р.

Ниже видеоролик записи слитого дампа обратно на смартфон ( восстановление с состояния полного окирпичивания )

image


Содержание оперативной памяти является очень важной информацией при изучении предыдущих действий с машиной. Оперативная память может содержать как части самих исполняемых процессов, так и части удаленных файлов, пользовательских сессий, криптографических ключей. При современном распространении сложных систем защиты информации, основанных на криптовании восстановление их ключей становиться чуть-ли не одной из основных задач для исследования. В защищенных системах зачастую оперативная память это единственное место где могут сохраниться защитные ключи и другая временная, но очень важная информация.

Процесс получения информации, которая содержится в оперативной памяти состоит из двух этапов: изъятие содержимого оперативной памяти
и
анализ полученных во время изъятия данных.

Обращая внимание на первый этап стоит заметить, что изъятие оперативной памяти может быть выполнено с помощью ряда средств: непосредственный доступ к памяти с использованием специальных плат расширения, порта FireWire, и даже физическом изъятии запоминающего устройства оперативной памяти (потребует замораживания плат),

image

но в данном материале мы рассмотрим программные средства, которые позволяют изъять содержимое оперативной памяти защищенных машин путем так называемой «горячей» перезагрузки и запуска машины в Live-режиме.

Для выполнения этой задачи будем использовать специальный дистрибутив Ubuntu CyberPack (IRF) 1.0, состоящий из минимального набора компонент, а именно, только те, которые необходимы для изъятия данных из памяти. Соответственно отсутствует и графический интерфейс.

Использование такого подхода к изъятию содержимого оперативной памяти имеет ряд преимуществ и недостатков сравнительно с другими перечисленными выше средствами.
Плюсы:
— использование Live-дистрибутива позволяет проводить действие не зависимо от того какая операционная система установлена на исследуемой машине;
— отсутствуют затраты на приобретение дорогостоящих специальных устройств, кабелей, плат, и др.
Недостаток:
— содержимое оперативной памяти будет неполным — ее часть будет перезаписана данными, необходимыми для запуска Live-дистрибутива (приблизительно 125 Мб).

Для использования доступны специально собранные дистрибутивы для машин с памятью объемом до 3 Гб (і386) и свыше 3 Гб (amd64). С их помощью можно создать загрузочный CD/DVD-диск или загрузочный USB-диск.

Замечания:
— второго шанса система нам не дает — у нас есть только одна попытка. т. е. при повторной перезагрузке исследуемого компьютера большая вероятность того что мы уже не найдем необходимой информации. Отсюда следует что не надо перезагружать его несколько раз, экспериментировать, прицеливаться.
Необходимо заранее подготовится и знать как компьютер себя поведет после перезагрузки.
Большинство современных компьютеров позволяют прямо при старте указать откуда производить загрузку, но если этого нет, тогда необходимого настроить BIOS машины на загрузку с CD/DVD-привода или USB-привода/накопителя, после чего загрузить Live-дистрибутив с указанного устройства.

Перезагружаем компьютер.
ВАЖНО: перезагрузка ни в коем случае не должна быть холодной (путем нажатия кнопки «ресет» или выключение\включение питания), а именно — перезагрузка должна быть осуществлена средствами самой работающей системы (например нажатием кнопок Ctrl-Alt-Del или путем выбора пункта «перезагрузка» в системе)

image

После загрузки дистрибутива пользователю доступна привычная строка консоли Linux, и краткая информация для запуска модуля.

Замечание: Для дальнейших действий понадобиться примонтировать заранее подготовленный носитель (внешний жесткий диск, флеш-накопитель) с файловой системой ext2/3/4, в который будет сохраняться файл с содержимым оперативной памяти.

Далее следует примонтировать логический раздел накопителя к папке /tmp загруженной в Live-режиме операционной системы:

Все подготовительные шаги сделаны — можно переходить к изъятию содержимого оперативной памяти:

В результате мы получили содержимое оперативной памяти машины в файле «ram-image.mem» на накопителе. Теперь его можно обрабатывать в т.ч. извлекая части исполняемых процессов, удаленных файлов, информацию о пользовательских сессиях, криптографических ключах и многое другое.

P.S.
Также стоит обратить внимание что все современные системы используют в своей работе и swap-память (так называемый «файл подкачки»)
Файл подкачки – это своеобразное дополнение к оперативной памяти (которая занимается временным хранением данных для быстрой доставки их на обработку процессору) Вашего компьютера. Даже не столько дополнение, сколько её уширение или, можно сказать, продолжение. Дело в том, что когда не хватает оперативной памяти система может переносить данные из памяти на диск (так называемая дополнительная память), в котором соответственно также хранятся данные.
И для полной картины анализа памяти необходимо также получить и их.
Различные операционные системы используют разные способы их хранения.

В случае с Windows это обычно файлы в корне на системном диске С:
pagefile.sys для Win XP и Win 7 и достаточно просто скопировать файл

Для Linux — это отдельный раздел на носителе.
Например:
Команда sudo fdisk -l /dev/sda
покажет нам все разделы в системе
/dev/sda1 * 2048 78125055 39061504 83 Linux
/dev/sda2 78125056 117186559 19530752 82 Linux своп / Solaris
/dev/sda3 117186560 625141759 253977600 83 Linux
Исходя из чего мы видим что раздел подкачки находиться в /dev/sda2
Скопировать его можно также с помощию команды dd.
Например:
dd if=/dev/sda2 of=/media/<путь куда записать>/linux-swap.dd

Для MacOS необходимо скопировать все файлы из директории /private/var/vm/swapfile*

Обработка и анализ полученных результатов (как дампа оперативной памяти так и swap-памяти) может проводиться как в ручную с помощью например HEX-редактора, так и с помощью ряда программ о которых будет рассказано в следующий раз.


В данной статье я опишу лишь процедуру считывания прошивки из микросхемы ПЗУ. Дальнейший анализ дампа памяти и его дисассемблирование опишу в других статьях, так как это будет очень тесно связано с электрической принципиальной схемой. И сразу хочется сказать спасибо дружище за светлые мысли и уверенность в действиях.

Для начала необходимо было вскрыть ЭБУ. Это делается следующим образом: Со стороны радиатора находим 4 самореза по углам блока и выкручиваем их. Стоит учесть, что некоторые из них могут быть на фиксаторе. После этого тянем за радиатор и нашему взору предстают две платы, надежно скрепленные между собой стойками и винтиками.




После этого отсоединил платы друг от друга и достал микросхему ПЗУ с большой из них. Здесь и дальше условимся большую плату понимать под номером 1, а маленькую — под номером 2.


Здесь стоит учесть 2 вещи. Первая — микросхемы боятся статики, поэтому принял необходимые меры, вторая — микросхема ПЗУ — с ультрафиолетовым стиранием.
После этих процедур достаем программатор TL866, установил его драйвера, а также программу работы на прилагаемом к нему диске. В этой процедуре нет ничего сложного, поэтому я не стану ее описывать. После установки подключил программатор, программа предложила его прошить, я согласился. После завершения процедуры отключил программатор, вставил в него микросхему ПЗУ и снова подключил к компьютеру.
После нового запуска программы необходимо выбрать тип микросхемы, с которой будет производится работа и потом считать дамп памяти.




После завершения процедуры считывания перед нами предстает таблица, состоящая из адресов и значений в них в 16-ричном виде. Собственно, это и есть программа работы контроллера.


В завершении этой замечательной процедуры я сохранил файл в двух форматах HEX и BIN, пока не знаю, с каким из них будет удобнее работать.

Теперь немного о дисассемблере. Как и в предыдущей статье я для начала решил обратиться к опыту коллег из Коррадо-клуба и скачал дисассемблер Ida pro 6.8, только для удобства русифицировал его.
Открыл в Ida Pro свежеиспеченный файл программы, получил пока что непонятную фигню, в которой нужно разбираться очень досканально вместе с даташитом на контроллер.

Читайте также: