En este artículo voy a demostrar cómo utilizar la herramienta strings para extraer todo el texto presente dentro de un archivo en formato binario.



Cuántas veces hemos tratado de volcar por pantalla el contenido de un archivo binario sólo para ver una catarata de chirimbolos:

root@debian:~# head /bin/bash
ELFx4dX4        (44  TTT�
�
����H����hhhDDP�tdx�
                  �<�<Q�tdR�td���/lib/ld-linux.so.2GNU▒GNU�F
                                                            /�{�V{([O��x������\����v�A��Cx����p�/bm>A
                                                                                                     �"8��E����.��B���6���X��*�����▒�o�=z�/4��Y�3�'��A�d�z�&'�
�XI�kn��v�
_�w�!�pBc7Q��L��$��5�����-�_�&�f��]h{�35�5)�N�R���N    ��g�U|���/�A���]V��
����@�s5p�
          uq����k��Sg���?>�Z%���N�,K�h��ty�H����h��pT�D�pzS55Y▒9���$��q��u��������
                                                                                 ��Y��1��is%��w�����:��+{6'3n���eP��E��X����z���,=��i���������L�����+�0O6�d�
����%@�zL�@��Bn�G&��
���                 �NB��U���OZ���
{�U����I�K�W�����Z|�[������&�K�+��������t(��6�d�y�L�▒�n$!|�t�T���▒!�����{�i���4G�8.�c�4�
                                                                                        ?������px2��0�s��
                                                                                                        G��2��"������,*x����n�O?7���������y�_�G���Y���o0�A�q4
                                     C�v��8a�G�|�E������/C���P��I�1�5�x%��D�;Xor�k��J�N�6��������sD��4<r���8j��J�� �F�=#�I���/���       ��w�.&��P��j�$������Tm}�����}<JG����I�.F��O���m����9�qv
^��,�Le3▒(��`�Mf�<�S�Q�A]fY�[a▒��w#=\����y?�O��{����y����7�DT�W_��l��=��X�h�lR�1���r;�
                                                                                      �f
)x��9x|�J��h���qN!�;�Y
O�V�k�D���}���\'N~����}���qQ*qb#)�_������/�Jcr�0��f?b�m�C���[l�{`�
                                                                  ���mEI�ej�"�}�T���E���d>���U�tG{      ���7"a���<b�e��@���ZF�%R2�d��� �"�C��u9>U�� �������(;!r�($��%ia����U8�u��v�`�1�K�lj��r0F���o�����.R�&��
                                                                                       �s)��*�_w>���+▒~g^����<H��"���SDr�>�J-#��m�b�FL~+n��yg�R:▒,��_$+]▒�e����/�
                                         ��4v��2:����f�����2�Y|���:Vk'�:\���9�-�|-

Esto se debe a que los archivos binarios (típicamente los ejecutables) utilizan un formato a nivel bit, donde el conjunto de bytes en su mayoría no coincide con el rango de caracteres imprimibles ASCII.

Existen alternativas para volcar el contenido de archivos binarios por pantalla en diferentes formatos, tales como hexdump. Sin embargo, si lo que queremos es extraer sólo el texto plano presente en un binario, es posible recurrir directamente a strings.

La herramienta strings simplemente vuelca todos los caracteres imprimibles presentes en un archivo pasado como parámetro. Esta herramienta es parte del paquete GNU Binutils.

Simplemente pasar un archivo como parámetro y opcionalmente redirigir la salida a un paginador como more o less utilizando un pipe (|):

root@debian:~# strings /bin/bash | tail
malloc: %s:%d: assertion botched
free: called with already freed block argument
free: called with unallocated block argument
free: underflow detected; mh_nbytes out of range
free: start and end chunk sizes differ
malloc: block on free list clobbered
realloc: called with unallocated block argument
realloc: underflow detected; mh_nbytes out of range
realloc: start and end chunk sizes differ
;*2$"

Esta herramienta nos da la posibilidad de buscar cadenas de texto dentro de un binario utilizando grep (alabado sea grep):

root@debian:~# strings /bin/bash | grep 'syntax error'
syntax error near `%s'
syntax error
syntax error near unexpected token `%s'
syntax error: unexpected end of file
syntax error in conditional expression: unexpected token `%s'
syntax error in conditional expression
syntax error: `;' unexpected
syntax error: `((%s))'
syntax error: arithmetic expression required
syntax error in expression
syntax error: operand expected
syntax error: invalid arithmetic operator

Referencias


Tal vez pueda interesarte


Compartí este artículo