![]() |
|
| Customización y widgets para Android Programas y widgets que cambian el aspecto de tu android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
|
Android Reverse Engineering (destripando Whatsapp)
Buenas,
Esta es una guía que he decidido hacer a raíz de varios post que hice tratando de ayudar aquí: [THEMES/MODS] Whatsapp Requisitos mínimos: - Tener algo de idea de java - Tener algo de experiencia en decompilar y compilar apks >> Tutorial extenso Víctima: Whatsappv2.7.4462: http://www.mediafire.com/download.php?7961658qi9ix7de Herramientas: - APK Manager 5.0.2 (Decompilador/Compilador): http://www.mediafire.com/?qyi34oon95nz74w - Super Finder XT (Buscador de texto): http://fsl.sytes.net/ssearchxt.html - Notepad++ (Editor potente de texto): http://notepad-plus-plus.org Con estas herramientas vamos a decompilar, buscar texto, editarlo y compilar. Hay alternativas obviamente, si gustáis de otras herramientas para esto perfecto, yo simplemente indico las que yo suelo usar ![]() [Tuto rápido de AKPManager]
(Click para mostrar/ocultar)
Descripción: He buscado un ejemplo bastante "sencillo". Así a groso modo, un texto cuyo color viene forzado mediante código, le aplicamos magia para que dicho color se pueda cambiar mediante XMLs, lo cual es más intuitivo y rápido El texto en cuestión es el nombre de los participantes en un grupo, que como veis es diferente para cada contacto. Ese color viene fijado por código ![]() Al lio: Suponemos que ya tenemos whatsapp decompilado Por un lado tendremos la carpeta /res con todas las imagenes y XMLs, y por otro la carpeta smali con todo el código Nuesta víctima se llama "name_in_group_tv" y la encontramos en el XML siguiente: res/layoutconversation_text_row_left.xml En esta línea: Código:
<TextView android:textSize="@dimen/conversation_participant_name_tv" android:textColor="#ff000000" android:ellipsize="end" android:autoLink="all" android:layout_gravity="top" android:id="@id/name_in_group_tv" ... Aquí no voy a discutir como sé que es esa variable, doy por supuesto que el que esté interesado en esta guía hasta ahí llega Para lo siguiente os viene bien el conocer java y programación en android Supongo que sabemos que todas (o casi todas) las cadenas de texto (strings) residen en: res/values/string.xml Y que todas esas cadenas tienen un valor en hexadecimal listado en: res/values/public.xml Para este ejemplo pasamos de string.xml. Vamos a buscar el valor que tiene nuestra víctima en hexadecimal, por lo tanto buscamos "name_in_group_tv" dentro de public.xml Código:
<public type="id" name="name_in_group_tv" id="0x7f0d00a1" /> ¿Por qué hacemos esto? Porque en los smali (código) no se usan las cadenas de texto sino que se sustituyen por estos "punteros" en hexadecimal Ahora nos toca buscar a nuestra víctima dentro de los smali. Para ello tiramos de SuperFinder: ![]() Tenemos 2 resultados, uno obviamente es dentro de public.xml y el otro es el que nos interesa: ge.smali Abrimos ge.smali y buscamos "0x7f0d00a1" Encontramos 2 referencias: Código:
.line 140
iget v0, p1, Lyb;->a:I
iput v0, p0, Lcom/whatsapp/ge;->w:I
.line 5
:cond_b
const v0, 0x7f0d00a1
invoke-virtual {p0, v0}, Lcom/whatsapp/ge;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/TextView;
Código:
method public e()V
.locals 5
.prologue
const/4 v4, 0x0
.line 113
const v0, 0x7f0d00a1
invoke-virtual {p0, v0}, Lcom/whatsapp/ge;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/TextView;
)En la primera coincidencia, si vamos bajando, pronto nos tropezamos con lo siguiente: Código:
.line 74
iget-object v1, p0, Lcom/whatsapp/ge;->s:Landroid/widget/TextView;
iget v0, v0, Lcom/whatsapp/ks;->a:I
invoke-virtual {v1, v0}, Landroid/widget/TextView;->setTextColor(I)V
.line 35
iget-object v0, p0, Lcom/whatsapp/ge;->s:Landroid/widget/TextView;
¿Qué hacemos ahora? Probamos simplemente deshabilitando la linea (poniéndole # delante): Código:
.line 74
iget-object v1, p0, Lcom/whatsapp/ge;->s:Landroid/widget/TextView;
iget v0, v0, Lcom/whatsapp/ks;->a:I
#invoke-virtual {v1, v0}, Landroid/widget/TextView;->setTextColor(I)V
.line 35
iget-object v0, p0, Lcom/whatsapp/ge;->s:Landroid/widget/TextView;
¿Qué cambio debemos esperar? Como textColor="#ff000000", ahora "name_in_group_tv" (nombre de los participantes del grupo) debería verse siempre en negro Código:
<TextView android:textSize="@dimen/conversation_participant_name_tv" android:textColor="#ff000000" android:ellipsize="end" android:autoLink="all" android:layout_gravity="top" android:id="@id/name_in_group_tv" ![]() Ha salido más extenso de lo que pensaba pero os puedo asegurar que es el ejemplo más simple que pude dar Espero que haya quedado más o menos claro, que no me cosáis a preguntas ya que esto es un pasatiempo, y que os sirva más para animaros a hacer vuestros propios "hacks" ![]() A más ver!! Última edición por id_34561 Día 01/03/12 a las 18:42:26 |
| Los siguientes 21 usuarios han agradecido a id_34561 su comentario: | ||
|
|
|
#2
|
|
Reservado por si decido añadir más ejemplos
|
|
#3
|
||||
|
||||
|
Muchísimas gracias @rafalense, lo has explicado muy claro (así deberían de ser todos los tutoriales). Ahora no puedo llevarlo a la práctica, pero esta tarde me pongo, no tengo ninguna duda sobre el proceso, muy bien explicado con los pasos a seguir, gracias
![]() Lo que si aprovecho y te hago una consulta. @id/message_text = 0x7f0d00af ----> para que no cambie de color la fuente en el chat de grupo (modificando 2 líneas) @id/contactpicker_row_name = 0x7f0d0080 ----> para el cambio de color en la lista de contactos Dime si me equivoco ![]() De nuevo gracias máquina, da gusto tener compañeros así. Un saludo
|
|
#4
|
||
|
Gracias seimu!! Posiblemente caiga algún otro tuto más. Seria interesante ir viendo vuestros avances, yo os echo una mano en lo posible
Cita:
Cita:
Supongo que estás en otra versión. Para la versión 2.7.4462 son: Código:
name="message_text" id="0x7f0d00b0" /> Código:
name="contactpicker_row_name" id="0x7f0d0081" /> Es simple: buscas tu víctima (id que no se deja cambiar color por XML), y buscas su equivalente hexadecimal en public.xml |
|
#5
|
||||
|
||||
|
Si @rafalense, estoy en otra versión que tenia por aqui a mano. Pues gracias de nuevo máquina por tu ayuda. Yo aportar cosas nuevas poco, lo hago con los temas. Pues un saludo y esta tarde comento que tal me ha ido.
|
|
#6
|
|
|
Para LuisLan:
Esto es una pequeña extensión a lo explicado aquí para cambiar el color de "contactpicker_row_name": http://www.htcmania.com/showpost.php...&postcount=426 LuisLana reportó ayer este fallo: Cita:
Víctima: Código:
public type="id" name="contactpicker_row_name" id="0x7f0d0081" /> Si miramos en kd.smali no vemos ninguna sentencia settextcolor, lo olvidamos Vamos a md.smali y ahí sí tenemos varias: Código:
const-string v3, ""
invoke-virtual {v2, v3}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
.line 58
const/high16 v3, -0x100
invoke-virtual {v0, v3}, Landroid/widget/TextView;->setTextColor(I)V
.line 38
invoke-virtual {v5, v8}, Landroid/view/View;->setLongClickable(Z)V
.line 63
if-eqz v6, :cond_f
Código:
if-eqz v3, :cond_d
.line 33
const v3, 0x7f09014d
invoke-virtual {v1, v3}, Landroid/widget/TextView;->setText(I)V
.line 13
const v3, -0x777778
invoke-virtual {v0, v3}, Landroid/widget/TextView;->setTextColor(I)V
.line 87
invoke-virtual {v5, v9}, Landroid/view/View;->setLongClickable(Z)V
if-eqz v6, :cond_e
Código:
.line 18
if-nez v4, :cond_13
:goto_2
invoke-virtual {v1, v3}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
.line 51
const/high16 v1, -0x100
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setTextColor(I)V
.line 7
invoke-virtual {v5, v8}, Landroid/view/View;->setLongClickable(Z)V
.line 68
:cond_e
Esta última era la que fijaba el color negro a "contactpicker_row_name", ya la deshabilitabamos en el post que indico arriba La 2ª fuerza un color -0x777778, que tiene pinta de ser gris, la olvidamos La 1ª es igual que la que hicimos en su día, y si la probamos, efectivamente es la que produce el bug mencionado por LuisLan Deshabilitamos y solucionado pues A más ver |
|
#7
|
||||
|
||||
|
Muchísimas gracias por tomarte el tiempo para sacarme de esa duda y por ayudarnos a todos en este foro. (Ya el botón de agradecer no me deja. Jajajajaja)
|
|
#8
|
||||
|
||||
|
Excelente tutorial. Gracias.
|
|
#9
|
|
Muy interesante tu post definitivamente en HTCMANIA encontramos de todo.
Te mando un Mp haber si me colaborar con algo gracias. |
|
#10
|
|
este tema oscuro me gusta, donde descargo la apk. gracias
|
|
#11
|
|
En el primer tema están los enlaces
|
| Gracias de parte de: | ||
|
#12
|
|
gracias, ya he bajado "la victima"
|
|
#13
|
||||
|
||||
|
Me vuelvo loco tanto leer jaja no me entero demasio d los colores!a vee si me echais una mano!para cambiat los colores de las conversaciones donde tengo que cambiar?en res layaout?
|
|
#14
|
||||
|
||||
|
Rafalense, genial tu tuto es increible y muy bien explicado. Me gustaria poder modificar la variable que hace las copias de seguridad diarias de whatsapp para que las hiciera con los inetrvalos de tiempo que yo especifique. Creo que la cosa va por aquí, pero me gustaria que me ayudaras:
dentro de \Apk_Manager_5.0.2\projects\WhatsApp.apk\res\value s\public.xml está <public type="id" name="advanced_backup_db" id="0x7f0d001d" /> y "0x7f0d001d" me lleva a \Apk_Manager_5.0.2\projects\WhatsApp.apk\smali\com \whatsapp\Advanced.smali donde leo en la linea 1087 lo siguiente: const v0, 0x7f0d001d. ¿Qué debo hacer para modificar el intervalo entre copia y copia de seguridad automatica que genera whatsapp? Gracias por anticipado y perdona mi desconocimiento. |
|
#15
|
||||
|
||||
|
Hola @rafalense
Las 2 últimas versiones de Whatsapp que han salido en la página oficial dan error cuando trato de compilarlas de nuevo usando el apktool, quería saber si te ha pasado algo similar. Pensé que podia ser algún error en los archivos que modiqué y por eso hice una prueba descompilando y compilando de nuevo la versión original sin hacerle ningún cambio y también da el mismo error. |
|
#16
|
||||
|
||||
|
Compañero, modificando Tuenti Classic llevo mucho tiempo sin lograr solucionar un color de texto forzado en las pantallas de mensajes privados. No se si usas Tuenti, te lo detallo por encima.
El nombre del contacto en el item aparece en negro forzado y cuando se recibe un nuevo mensaje éste cambia a un verde oscuro en vez de, por ejemplo, resaltar el listitem en otro color (que es lo que querría). No he conseguido cambiar esos colores mediante los xml. He podido cambiar el fondo, el tamaño, el color del resto... El xml del item es éste: Código:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@id/ll_notification" android:background="#00000000" android:paddingLeft="9.0dip" android:paddingTop="5.0dip" android:paddingRight="6.0dip" android:paddingBottom="5.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<com.tuenti.android.view.AutoImageView android:layout_gravity="top" android:id="@id/iv_avatar" android:paddingRight="8.0dip" android:layout_width="42.0dip" android:layout_height="42.0dip" android:src="@drawable/avatar_female" />
<TextView android:textSize="14.0dip" android:textAppearance="@style/wall_time" android:textColor="#ff33b5e5" android:id="@id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="10:30" android:layout_alignBaseline="@id/tv_name" android:layout_alignParentRight="true" />
<TextView android:textSize="16.0dip" android:textStyle="bold" android:textColor="@android:color/white" android:id="@id/tv_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Pedro García" android:singleLine="true" android:layout_toLeftOf="@id/tv_time" android:layout_toRightOf="@id/iv_avatar" />
<TextView android:textSize="12.0dip" android:textColor="#ff999999" android:id="@id/tv_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text" android:singleLine="true" android:layout_toLeftOf="@id/iv_reply" android:layout_toRightOf="@id/iv_avatar" android:layout_below="@id/tv_name" />
</RelativeLayout>
smali.png ¿Alguna idea? Última edición por Feboy Día 24/12/12 a las 05:24:03 |
|
#17
|
|
Es u. Gran post!!! Me uno
|
|
#18
|
||||
|
||||
|
a mi solo me aparece la carpeta smali, ¿por que será?
Ya supe como hacerlo, pero tengo una duda, ahora solo me aparece todo así, abra el xml que abra
Última edición por Sa_Ve Día 19/03/15 a las 19:42:02 |
|
#19
|
||||
|
||||
|
tengo una pregunta podríamos agregar a loa audios de Wp un tipo de efecto tipo el calle Voice changer-intcall en plan usarlo en las llamadas y asi
|
|
|
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 21:15:36 (GMT +1)
HTCMania: líderes desde el 2007














