Как лучше всего изучить Smali (и как/когда использовать коды операций Dalvik VM)?

Я знаю Java и изучал C, но никогда не использовал его. Я не знаю ни одной формы сборки, ни для виртуальной машины, ни для реальной.

Как лучше всего научиться взламывать Smali?


person Ken Kinder    schedule 13.04.2011    source источник


Ответы (3)


ОБНОВЛЕНИЕ: как и обещал вчера, я добавил в список еще несколько ссылок.

Уффф. Не так много документации вокруг! Лучший совет? Декомпилировать, читать, настраивать, смотреть, как получилось, и запускать цикл снова и снова. Но вы не просили этого совета, верно? ;)

Теперь есть несколько мест, которые немного помогут:

http://androidcracking.blogspot.com/search/label/smali Это лучший один. Я даже задал парню вопрос, и он очень быстро ответил, так что иди и посмотри.

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html Очень подробная таблица — хорошая ссылка!

http://webchat.freenode.net/?channels=smali Я никогда не пробовал, но это на кодовой странице Google автора баксмали ( http://code.google.com/p/smali / )

http://forum.xda-developers.com/showthread.php?t=777707 Наконец, это сообщение, которое я сделал некоторое время назад, описывающее некоторые хаки для камеры Captivate. Вы можете следить за различиями там, пока я немного комментирую, что делает каждый файл .diff. Хорошие вещи начинаются с поста №20.

http://www.slideshare.net/paller/understanding-the-dalvik-bytecode-with-the-dedexer-tool Интересное слайд-шоу с некоторыми основными понятиями. Хороший способ начать.

http://sites.google.com/site/haynesmathew/home/projects/dalvik-notes Еще более низкий уровень, чем типичный .smali. Ссылка на потом, но хорошее чтение.

http://jasmin.sourceforge.net/guide.html Синтаксис Smali основан на Jasmin, поэтому это дает хорошие концепции.

http://groups.google.com/group/apktool?pli=1 Некоторые обсуждения стоит прочитать. Также хорошее место для поиска, когда вы застряли в чем-то.

И последний, но не менее важный прием, который я использовал: начните кодировать самые простые классы и методы в Java, скомпилируйте их, а затем создайте собственный код. Вы точно знаете, что он делает, поэтому вам будет намного легче следовать ему.

Удачи!

person Aleadam    schedule 13.04.2011

Я продолжаю удивляться тому, что люди не используют официальные документы формата Dalvik в качестве основной ссылки. В более старых версиях документы Dalvik находятся в исходном коде Android в папке dalvik/docs. Конкретный файл, который вы захотите просмотреть, называется dalvik-bytecode.html. Несколько выпусков назад определение байт-кода стало частью документации для разработчиков android.com:

dalvik-bytecode.html на сайте source.android.com

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

dalvik-bytecode.html на сайте milk.com

person danfuzz    schedule 15.04.2011
comment
Ты подтолкнул меня на это! :) Кроме того: вместо того, чтобы проверять полный исходный код Android, вы можете взять только dalvik git. git-клон git://android.git.kernel.org/platform/dalvik.git - person JesusFreke; 16.04.2011
comment
Так много поисков по этому поводу, и я так и не попал на страницу dalvik git... Спасибо за ссылку! - person Aleadam; 19.04.2011
comment
Обновление для всех, кто заинтересован: документ dalvik-bytecode теперь доступен на сайте Android. source.android.com/tech/dalvik/dalvik-bytecode.html - person JesusFreke; 11.06.2011
comment
Ссылки в статье обновлены. (Примечание: URL-адрес в предыдущем комментарии больше не ведет прямо на страницу.) - person fadden; 27.08.2013

У меня есть пара вики-страниц на сайте smali с некоторой информацией:

https://github.com/JesusFreke/smali/wiki/Регистры

https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields

И есть примеры кода smali, который использует каждый опкод в интеграционных тестах для smali/baksmali:

небольшие интеграционные тесты

person JesusFreke    schedule 16.04.2011