web-dev-qa-db-fra.com

Quelle est la meilleure façon d'apprendre Smali (et comment / quand utiliser Dalvik VM opcodes)?

Je connais Java et j'ai appris le C mais je ne l'ai jamais utilisé. Je ne connais aucune forme d'assemblage, que ce soit pour une machine virtuelle ou une machine réelle.

Quelle est la meilleure façon d'apprendre à pirater Smali?

58
Ken Kinder

MISE À JOUR: Comme je l'ai promis hier, j'ai ajouté quelques liens supplémentaires à la liste.

Ufff. Pas beaucoup de documentation autour! Meilleur conseil? Décompilez, lisez et Tweak, et voyez comment cela s'est passé, et recommencez le cycle encore et encore. Mais vous n'avez pas demandé ce conseil, non? ;)

Maintenant, il y a quelques endroits qui aideront un peu:

http://androidcracking.blogspot.com/search/label/smali C'est le meilleur. J'ai même posé une question au gars et il a répondu très rapidement, alors allez y jeter un œil.

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html Tableau très complet - bonne référence!

http://webchat.freenode.net/?channels=smali Je ne l'ai jamais essayé, mais c'est sur la page de codes Google de l'auteur de baksmali ( http://code.google. com/p/smali / )

http://forum.xda-developers.com/showthread.php?t=777707 Enfin, c'est un post que j'ai fait il y a quelque temps décrivant quelques piratages de la caméra Captivate. Vous pouvez suivre les différences là-bas pendant que je commente un peu ce que fait chaque fichier .diff. Les bonnes choses commencent au poste # 20.

http://www.slideshare.net/paller/understanding-the-dalvik-bytecode-with-the-dedexer-tool Diaporama intéressant avec quelques concepts de base. Bonne façon de commencer.

http://sites.google.com/site/haynesmathew/home/projects/dalvik-notes Niveau encore plus bas que le .smali typique. Une référence pour plus tard, mais une bonne lecture.

http://jasmin.sourceforge.net/guide.html La syntaxe Smali est basée sur Jasmin, donc cela donne de bons concepts.

http://groups.google.com/group/apktool?pli=1 Certaines discussions méritent d'être lues. Aussi un bon endroit pour rechercher quand vous êtes coincé dans quelque chose.

Et enfin, mais non des moindres, l'astuce la plus utile que j'ai utilisée: commencez à coder des classes et des méthodes très basiques en Java, compilez-les puis baksmali votre propre code. Vous savez exactement ce qu'il fait, il sera donc beaucoup plus facile à suivre.

Bonne chance!

99
Aleadam

Je continue d'être surpris que les gens n'utilisent pas les documents officiels au format Dalvik comme référence principale. Sur les versions plus anciennes, les documents Dalvik sont dans la source Android sous dalvik/docs. Le fichier particulier que vous voudrez consulter s'appelle dalvik-bytecode.html. Quelques versions renvoient le bytecode définition est devenue une partie des documents pour les développeurs Android.com:

dalvik-bytecode.html sur source.Android.com

Pour plus de commodité, je mets occasionnellement en miroir ces documents sur mon site Web personnel. Dans ce cas:

dalvik-bytecode.html sur milk.com

15
danfuzz

J'ai quelques pages wiki sur le site smali avec quelques informations:

http://code.google.com/p/smali/wiki/Registers

http://code.google.com/p/smali/wiki/TypesMethodsAndFields

Et il y a des exemples de code smali qui utilisent chaque opcode dans les tests d'intégration pour smali/baksmali:

tests d'intégration smali

10
JesusFreke