Autor
|
Tema: Escribir en /dev/mem (Leído 3,978 veces)
|
>FedeX<
|
Necesito parchear un trozo de codigo de la memoria del kernel de linux (android). Por el momento estoy con esto: (corriendo como root) int fp = syscall(SYS_open,"/dev/mem",O_RDWR|O_SYNC,0); printf("ABIERTO\n"); syscall(SYS_lseek,fp,0x70000000,SEEK_SET); syscall(SYS_lseek,fp,0x10000000,SEEK_CUR); syscall(SYS_lseek,fp,inet_bind-0xC0000000+0x80C00000-0x80000000+0xB0,SEEK_CUR); printf("POSICIONADO\n"); ((unsigned int *)&path)[0] = 0xE3A00001; ((unsigned int *)&path)[1] = 0; syscall(SYS_write,fp,path,8); printf("PARCHEADO\n");
Esto me está generando algún kernel panic o algo, porque me reinicia el teléfono... Lo extraño es que, antes de reiniciar, la pantalla queda con "ABIERTO" y no en "POSICIONADO"... Sin embargo: int fp = syscall(SYS_open,"/dev/mem",O_RDWR|O_SYNC,0); printf("ABIERTO\n"); syscall(SYS_lseek,fp,0x70000000,SEEK_SET); syscall(SYS_lseek,fp,0x10000000,SEEK_CUR); syscall(SYS_lseek,fp,inet_bind-0xC0000000+0x80C00000-0x80000000+0xB0,SEEK_CUR); printf("POSICIONADO\n"); syscall(SYS_read,fp,path,8); printf("LEIDO 0x%08X 0x%08X\n",((unsigned int *)&path)[0],((unsigned int *)&path)[1]);
Devuelve correctamente los bytecodes que necesito parchear.. O sea, la posición de memoria es la correcta... Con kmem, es exactamente igual... Vi muchos ejemplos en google y son parecidos a este... Pero, por supuesto, ami no me funciona... Quería consultar, si alguien conoce del asunto y que me pueda dar una mano... Gracias y Salu2
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
¿Y el codigo de donde sale? ¿Estas seguro de que es correcto? Yo apostaria a que no lo es: 0100 add dword ptr [eax],eax a0e3000000 mov al,byte ptr ds:[000000E3h]
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
>FedeX<
|
Perdón, no aclaré, es para ARM... No sé mucho de la arquitectura, pero lo que tengo es: (La parte que quiero modificar 0xb0 y 0xb4) inet_bind+0xb0: mov r0,#0xa ; push CAP_NET_BIND_SERVICE inet_bind+0xb4: bl #0xffd325f8 ; call capable inet_bind+0xb8: cmp r0,#0 inet_bind+0xbc: mvneq r5,#0xc inet_bind+0xc0: beq #0x1d0
(Por esto) inet_bind+0xb0: mov r0,#1 ; capable, digamos que, devolvio true (?) inet_bind+0xb4: andeq r0,r0,r0 ; NOP inet_bind+0xb8: cmp r0,#0 inet_bind+0xbc: mvneq r5,#0xc inet_bind+0xc0: beq #0x1d0
Igual, creo que no es el problema, porque si escribo lo que acabo de leer en esa dirección...: int fp = syscall(SYS_open,"/dev/mem",O_RDWR|O_SYNC,0); printf("ABIERTO\n"); syscall(SYS_lseek,fp,0x70000000,SEEK_SET); syscall(SYS_lseek,fp,0x10000000,SEEK_CUR); syscall(SYS_lseek,fp,inet_bind-0xC0000000+0x80C00000-0x80000000+0xB0,SEEK_CUR); printf("POSICIONADO\n"); syscall(SYS_read,fp,path,8); syscall(SYS_lseek,fp,0x70000000,SEEK_SET); syscall(SYS_lseek,fp,0x10000000,SEEK_CUR); syscall(SYS_lseek,fp,inet_bind-0xC0000000+0x80C00000-0x80000000+0xB0,SEEK_CUR); printf("POSICIONADO\n"); syscall(SYS_write,fp,path,8);
... aún así, reinicia... Gracias y salu2
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Asi puede ser que sea valido Depura tu programa para asegurarte de que este pasando los parametros correctos y fundamentalmente que esa direccion donde lees/escribis corresponde a inet_bind+0xb0 como queres, con el valor de retorno de la llamada al sistema lseek podes verlo, y de ser posible la ejecucion del SYS_write para ver que hace exactamente. Me la impresion que esto seria mas corto y equivalente: syscall(SYS_lseek, fp, inet_bind - 0xC0000000 + 0x80C00000 + 0xB0, SEEK_SET); ¿inet_bind es un offset basado en una direccion diferente de la base del Kernel (que asumo es 0x80?00000)? Hay varias direcciones hardcodeadas
|
|
« Última modificación: 10 Febrero 2011, 15:27 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
>FedeX<
|
Lo del lseek era porque si uso la direccion 0x80000000 o una mayor, es como si pusiera un numero negativo... Con _llseek lo arreglé Y no sé como haré para depurar aquí pero... Para limpiar un poco: #define PAGE_OFFSET (0xC0000000UL) #define PHYS_OFFSET (0x80C00000UL) int main(int argc,char ** argv){ inet_bind = GetVirtualAddr("inet_bind"); printf("GetVirtualAddr(%08X)\n",inet_bind); if(inet_bind == 0){ printf(":(\n"); return 0; } int ret,fp; fp = syscall(SYS_open,"/dev/mem",O_RDWR,0); printf("SYS__open (%08X)\n",fp); if(fp == -1){ printf(":(\n"); return 0; } ret = syscall(SYS__llseek,fp,0, inet_bind+0xB0 -PAGE_OFFSET+PHYS_OFFSET ,&path,SEEK_SET); // -1 si falla printf("SYS__llseek (%d): 0x%08X%08X\n",ret,((unsigned int *)&path)[1],((unsigned int *)&path)[0]); ret = syscall(SYS_read,fp,path,8); printf("SYS_read (%d): %08X %08X\n",ret,((unsigned int *)&path)[0],((unsigned int *)&path)[1]); syscall(SYS_close,fp); return 0; }
Resultado: GetVirtualAddr(C0342418) SYS__open (0000000A) SYS__llseek (0): 0x0000000080F424C8 SYS_read (8): E3A0000A EBF4C94F E3A0000A EBF4C94F son los bytecodes correctos... Ahora para escribir: #define PAGE_OFFSET (0xC0000000UL) #define PHYS_OFFSET (0x80C00000UL) int main(int argc,char ** argv){ inet_bind = GetVirtualAddr("inet_bind"); printf("GetVirtualAddr(%08X)\n",inet_bind); if(inet_bind == 0){ printf(":(\n"); return 0; } int ret,fp; fp = syscall(SYS_open,"/dev/mem",O_RDWR,0); printf("SYS__open (%08X)\n",fp); if(fp == -1){ printf(":(\n"); return 0; } ret = syscall(SYS__llseek,fp,0, inet_bind+0xB0 -PAGE_OFFSET+PHYS_OFFSET ,&path,SEEK_SET); // -1 si falla printf("SYS__llseek (%d): 0x%08X%08X\n",ret,((unsigned int *)&path)[1],((unsigned int *)&path)[0]); ((unsigned int *)&path)[0] = 5; // 5 segundos ((unsigned int *)&path)[1] = 0; ((unsigned int *)&path)[2] = 0; ret = syscall(SYS_nanosleep,path,0); // Para poder ver los resultados anteriores... ((unsigned int *)&path)[0] = 0xE3A0000A; ((unsigned int *)&path)[1] = 0xEBF4C94F; ret = syscall(SYS_write,fp,path,8); printf("SYS_write (%d): %08X %08X\n",ret,((unsigned int *)&path)[0],((unsigned int *)&path)[1]); syscall(SYS_close,fp); return 0; }
Resultado: GetVirtualAddr(C0342418) SYS__open (0000000A) SYS__llseek (0): 0x0000000080F424C8
6 segundos y reinicia Es por algún tipo de protección??? y porqué reinicia? por mas que sea root, sigue siendo un proceso en user-mode... Error de hardware?? Hay algún log que pueda mirar?? Gracias y Salu2
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Podria ser una proteccion, vaya uno a saber ... ¿No genera un Kernel panic? ¿Simplemente reinicia? ¿Podes depurar el Kernel?
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
>FedeX<
|
Lo encontre apanic_console <1>[54537.815216] Unable to handle kernel paging request at virtual address c03424c8 <1>[54537.815307] pgd = c8fd0000 <1>[54537.815338] [c03424c8] *pgd=80e0840e(bad) <4>[54537.815399] Internal error: Oops: 80d [#1] PREEMPT <4>[54537.815429] Modules linked in: tiwlan_drv sec modem_pm_driver netmux_linkdriver netmux [last unloaded: tiwlan_drv] <4>[54537.815551] CPU: 0 Not tainted (2.6.29-omap1 #1) <4>[54537.815612] PC is at __copy_from_user+0xd0/0x3b4 <4>[54537.815673] LR is at 0xebf4c94f <4>[54537.815704] pc : [<c015a1bc>] lr : [<ebf4c94f>] psr: 00000053 <4>[54537.815734] sp : c8d5feec ip : 00000018 fp : c8d5ff44 <4>[54537.815765] r10: c8d5e000 r9 : c03424c8 r8 : e3a0000a <4>[54537.815795] r7 : 000110bc r6 : 80f424c8 r5 : 00000000 r4 : 00000008 <4>[54537.815856] r3 : 00000000 r2 : ffffffe8 r1 : 000110c4 r0 : c03424c8 <4>[54537.815887] Flags: nzcv IRQs on FIQs off Mode SVC_32 ISA ARM Segment user <4>[54537.815948] Control: 10c5387d Table: 89bd0019 DAC: 00000015 <4>[54537.815979] <4>[54537.815979] PC: 0xc015a13c: <4>[54537.816009] a13c e4b14004 e4b15004 e4b16004 e4b17004 e4b18004 e4b1c004 e4b1e004 e2522020 <4>[54537.816131] a15c e8a051f8 aafffff3 e3720060 aafffff2 e212c01c e26cc020 108ff00c ea000011 <4>[54537.816223] a17c e320f000 e4b13004 e4b14004 e4b15004 e4b16004 e4b17004 e4b18004 e4b1e004 <4>[54537.816345] a19c e08ff00c e320f000 e320f000 e4803004 e4804004 e4805004 e4806004 e4807004 <4>[54537.816467] a1bc e4808004 e480e004 e8bd01e0 e1b02f82 14f13001 24f14001 24f1c001 14c03001 <4>[54537.816589] a1dc 24c04001 24c0c001 e28dd008 e8bd8011 e26cc004 e35c0002 c4f13001 a4f14001 <4>[54537.816680] a1fc e4f1e001 c4c03001 a4c04001 e052200c e4c0e001 baffffec e211c003 0affffbc <4>[54537.816802] a21c e3c11003 e35c0002 e4b1e004 0a000032 ca000063 e252201c ba000025 e92d03e0 <4>[54537.816925] <4>[54537.816925] LR: 0xebf4c8cf: <4>[54537.816955] c8cc ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817108] c8ec ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817230] c90c ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817352] c92c ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817474] c94c ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817596] c96c ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817749] c98c ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817871] c9ac ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.817993] c9cc ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.818115] <4>[54537.818115] SP: 0xc8d5fe6c: <4>[54537.818145] fe6c 00000000 0000c350 c5956274 e90c7331 00003198 ffffffff c8d5fed4 80f424c8 <4>[54537.818267] fe8c 000110bc c8d5ff44 c8d5fea0 c003e9ac c003e200 c03424c8 000110c4 ffffffe8 <4>[54537.818389] feac 00000000 00000008 00000000 80f424c8 000110bc e3a0000a c03424c8 c8d5e000 <4>[54537.818481] fecc c8d5ff44 00000018 c8d5feec ebf4c94f c015a1bc 00000053 ffffffff c8d5ff84 <4>[54537.818603] feec 00000000 80f424c8 000110bc 00000000 c03424c8 00000008 00000000 00000008 <4>[54537.818725] ff0c c0192c90 0000c350 c8d5ff70 c0573a30 00000008 c8ecbc40 000110bc c8d5ff70 <4>[54537.818817] ff2c 00000008 c8d5e000 00000000 c8d5ff6c c8d5ff48 c00c9ef8 c0192c0c c8d5ff44 <4>[54537.818939] ff4c 00000000 c8ecbc40 000110bc 80f424c8 00000000 c8d5ffa4 c8d5ff70 c00ca04c <4>[54537.819061] <4>[54537.819061] FP: 0xc8d5fec4: <4>[54537.819091] fec4 c03424c8 c8d5e000 c8d5ff44 00000018 c8d5feec ebf4c94f c015a1bc 00000053 <4>[54537.819183] fee4 ffffffff c8d5ff84 00000000 80f424c8 000110bc 00000000 c03424c8 00000008 <4>[54537.819305] ff04 00000000 00000008 c0192c90 0000c350 c8d5ff70 c0573a30 00000008 c8ecbc40 <4>[54537.819427] ff24 000110bc c8d5ff70 00000008 c8d5e000 00000000 c8d5ff6c c8d5ff48 c00c9ef8 <4>[54537.819519] ff44 c0192c0c c8d5ff44 00000000 c8ecbc40 000110bc 80f424c8 00000000 c8d5ffa4 <4>[54537.819641] ff64 c8d5ff70 c00ca04c c00c9e4c 80f424c8 00000000 c8d5ffa4 00000000 c008605c <4>[54537.819732] ff84 00000000 000118c0 00000001 00000004 c003f004 00000000 c8d5ffa8 c003ee80 <4>[54537.819854] ffa4 c00ca014 00000000 000118c0 0000000a 000110bc 00000008 000110bc 00000000 <4>[54537.819976] <4>[54537.819976] R0: 0xc0342448: <4>[54537.820007] 2448 ea000066 e352000f 93e05015 9a000063 e59f0190 e5951004 eb001566 e59f3188 <4>[54537.820129] 2468 e593305c e3530000 e1a06000 1a00000a e5d4315b e3130024 1a000007 e5953004 <4>[54537.820220] 2488 e3500002 13530000 0a000003 e3500003 13500005 13e05062 1a000050 e1d530b2 <4>[54537.820343] 24a8 e1a07423 e1877403 e30033fe e6ff7077 e2472001 e6ff2072 e1520003 8a000004 <4>[54537.820465] 24c8 e3a0000a ebf4c94f e3500000 03e0500c 0a000042 e1a00004 e3a01000 ebfe37dc <4>[54537.820556] 24e8 e5d43002 e3530007 1a000039 e3003146 e19430b3 e3530000 1a000035 e5952004 <4>[54537.820678] 2508 e3560005 13560003 e1a00004 e1a01007 e5842148 e5842140 05843148 e5943020 <4>[54537.820800] 2528 e1a0e00f e593f044 e3500000 13a03000 13e05061 15843148 15843140 1a000025 <4>[54537.820922] <4>[54537.820922] R8: 0xe39fff8a: <4>[54537.820953] ff88 ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.821075] ffa8 ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.821197] ffc8 ******** ******** ******** ******** ******** ******** ******** ******** <4>[54537.821319] ffe8 ******** ******** ******** ******** ******** ******** dddcbe3c dddcbe3c <4>[54537.821441] 0008 00000001 00000000 00000000 000d1237 00000000 d8dd8740 00000098 00000000 <4>[54537.821563] 0028 0000001e 006e0061 00720064 0069006f 002e0064 00700061 002e0070 00410049 <4>[54537.821685] 0048 00700070 0069006c 00610063 00690074 006e006f 00680054 00650072 00640061 <4>[54537.821777] 0068 00000000 3f800000 000002d2 00000007 00000001 00000002 00730065 00000000 <4>[54537.821899] 0088 00000002 00530055 00000000 00000000 00000000 00000000 00000003 00000002 <4>[54537.822021] <4>[54537.822021] R9: 0xc0342448: <4>[54537.822052] 2448 ea000066 e352000f 93e05015 9a000063 e59f0190 e5951004 eb001566 e59f3188 <4>[54537.822143] 2468 e593305c e3530000 e1a06000 1a00000a e5d4315b e3130024 1a000007 e5953004 <4>[54537.822265] 2488 e3500002 13530000 0a000003 e3500003 13500005 13e05062 1a000050 e1d530b2 <4>[54537.822387] 24a8 e1a07423 e1877403 e30033fe e6ff7077 e2472001 e6ff2072 e1520003 8a000004 <4>[54537.822509] 24c8 e3a0000a ebf4c94f e3500000 03e0500c 0a000042 e1a00004 e3a01000 ebfe37dc <4>[54537.822601] 24e8 e5d43002 e3530007 1a000039 e3003146 e19430b3 e3530000 1a000035 e5952004 <4>[54537.822723] 2508 e3560005 13560003 e1a00004 e1a01007 e5842148 e5842140 05843148 e5943020 <4>[54537.822845] 2528 e1a0e00f e593f044 e3500000 13a03000 13e05061 15843148 15843140 1a000025 <4>[54537.822967] <4>[54537.822967] R10: 0xc8d5df80: <4>[54537.822998] df80 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[54537.823089] dfa0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[54537.823211] dfc0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[54537.823303] dfe0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[54537.823425] e000 00000000 00000002 00000000 c5956000 c04e4e7c 00000000 00000017 c5956000 <4>[54537.823516] e020 c0530dc0 c8d5e000 00000420 c5956274 c8d29e00 cbe6ec00 c8d5feac c8d5fe68 <4>[54537.823638] e040 c03d0298 00000000 00000000 00000000 00000000 00000000 01000000 00000000 <4>[54537.823730] e060 afe44b1c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <4>[54537.823852] Process pa (pid: 2976, stack limit = 0xc8d5e2e0) <4>[54537.823913] Stack: (0xc8d5feec to 0xc8d60000) <4>[54537.823913] fee0: 00000000 80f424c8 000110bc 00000000 c03424c8 <4>[54537.824035] ff00: 00000008 00000000 00000008 c0192c90 0000c350 c8d5ff70 c0573a30 00000008 <4>[54537.824127] ff20: c8ecbc40 000110bc c8d5ff70 00000008 c8d5e000 00000000 c8d5ff6c c8d5ff48 <4>[54537.824249] ff40: c00c9ef8 c0192c0c c8d5ff44 00000000 c8ecbc40 000110bc 80f424c8 00000000 <4>[54537.824340] ff60: c8d5ffa4 c8d5ff70 c00ca04c c00c9e4c 80f424c8 00000000 c8d5ffa4 00000000 <4>[54537.824432] ff80: c008605c 00000000 000118c0 00000001 00000004 c003f004 00000000 c8d5ffa8 <4>[54537.824554] ffa0: c003ee80 c00ca014 00000000 000118c0 0000000a 000110bc 00000008 000110bc <4>[54537.824645] ffc0: 00000000 000118c0 00000001 00000004 00000000 00000000 00000000 bebbad04 <4>[54537.824768] ffe0: bebbace8 bebbacd8 000086d8 afe0e1f0 60000050 0000000a 00000000 00000000 <4>[54537.824859] Backtrace: <4>[54537.824890] [<c0192c00>] (write_mem+0x0/0x12c) from [<c00c9ef8>] (vfs_write+0xb8/0x148) <4>[54537.825012] [<c00c9e40>] (vfs_write+0x0/0x148) from [<c00ca04c>] (sys_write+0x44/0x70) <4>[54537.825103] r7:00000000 r6:80f424c8 r5:000110bc r4:c8ecbc40 <4>[54537.825164] [<c00ca008>] (sys_write+0x0/0x70) from [<c003ee80>] (ret_fast_syscall+0x0/0x2c) <4>[54537.825286] r8:c003f004 r7:00000004 r6:00000001 r5:000118c0 r4:00000000 <4>[54537.825347] Code: e4804004 e4805004 e4806004 e4807004 (e4808004) <0>[54537.825683] Kernel panic - not syncing: Fatal exception <0>[54537.826629] Timestamp = 1297360517.973 <0>[54537.826629] Current Time = 02-10 17:55:17.973, Uptime = 9992.264 seconds Creo que es por la protección de la memoria virtual ... No se como desactivarla!!! Voy a seguir investigando....
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Escribir un .txt con vb
Programación Visual Basic
|
Xrage
|
7
|
9,316
|
11 Junio 2005, 13:24 pm
por p0w3r f1y
|
|
|
Escribir .ini
Programación Visual Basic
|
& eDu &
|
6
|
2,962
|
25 Mayo 2008, 01:29 am
por naderST
|
|
|
Escribir txt al final en c++
Programación C/C++
|
ZedGe
|
7
|
10,807
|
8 Diciembre 2012, 20:16 pm
por zikotik
|
|
|
Escribir automaticamente
Programación Visual Basic
|
magick
|
0
|
1,264
|
10 Agosto 2013, 21:30 pm
por magick
|
|
|
Escribir en MBR
« 1 2 3 »
ASM
|
Vaagish
|
27
|
16,367
|
23 Octubre 2013, 20:07 pm
por Vaagish
|
|