elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11
11  Programación / Ingeniería Inversa / Solución Ly-Crackme Java en: 20 Enero 2018, 07:45 am
Bueno señores que talco testeando aburrido me encontré este crackME de Leyer tiene como 10 años de antigüedad jajaaj, primera vez que me asomo en esta cuestión crackMEs, antes solo los usaba y listo sin mucha pasión, pero de verdad que digamos, estaba algo aburrido, así que vacilen.

Herramientas y Entorno




Lo primero que debemos hacer es descompilar nuestro .jar con el decompilador de preferencia por ejemplo esta web javadecompilers.com ahi debemos subir el .jar,  existen otras opciones offline como el uso de Krakatau programado en python para usarla desde consola CLI, también Recaf lector de bytecode e incluye cfr decompilador interno.


También tengo la opción con el decompilador por defecto que trae IntelliJ IDEA versión que use para esto:


  • (Community Edition) 2017.2 EAP
    Build #IC-172.2656.10, built on May 30, 2017


Aquí en este enlace está el CrackME de leyer, bueno no se si el tiene otros mas, que seguro si XD  para decompilar hacemos así, creamos un proyecto java y agregamos nuestro .jar desde File/project Structure y en el menú Libraries damos a + para importar el jar


Ya podemos ver todo el código fuente , en el menú External Libraries la primera linea si oprimo en el + dijera Source code recreated from a .class file by IntelliJ IDEA ..blalba by Fernflower, tocaría ahora crear una nueva clase y copiar el contenido de todo el código que se ve abajo, o usar krakatau para convertir este .class (Bytecode) a código fuente .java


Directamente en bandeja de plata esta casi todo, no tiene ningún wrapper con alguna aplicación tipo Jar2Exe,  así que no tenemos que quejarnos tanto XD , otra cosa en su web tiene un source code que es como una versión nueva del crackME que es casi lo mismo, pero si tiene algunas diferencias y es el código que usaremos se ve así:



Vemos que las variables están escritas con $$ que hacen bastannnte falta en Vzla,  para darle un toque más intenso jajaj si o no ? Y ofuscar algo el código, en java se puede escribir así, aunque por convención se evita su uso, pero este es otro caso.

Aquí es importante acotar que la ofuscación de los String no es tan tann dura, como lo hacen algunos otros ofuscadores como Allatori ofuscator, el método  _$$as_OIsl

Código
  1.  
  2. static String _$$as_OIsl(String _$s_String_) {
  3.        byte[] _$$d_defaultBytes_ = _$s_String_.getBytes();
  4.        java.security.MessageDigest _$$a_algorithm = null;
  5.        try {
  6.            _$$a_algorithm = java.security.MessageDigest.getInstance("SHA1");
  7.        } catch (java.security.NoSuchAlgorithmException noSuchAlgorithmException) {
  8.        }
  9.        _$$a_algorithm.reset();
  10.        _$$a_algorithm.update(_$$d_defaultBytes_);
  11.        byte messageDigest[] = _$$a_algorithm.digest();
  12.        StringBuffer hexString = new StringBuffer();
  13.        for (int _$I_Index = 0; _$I_Index < messageDigest.length; _$I_Index++) {
  14.            hexString.append(Integer.toHexString(0xFF & messageDigest[_$I_Index]));
  15.        }
  16.        @SuppressWarnings("unused") String _$f_Foo_ = messageDigest.toString();
  17.        _$s_String_ = hexString + "";
  18.        return _$s_String_;
  19. }
  20.  

que recibe un String como parámetro y luego lo pasa por un algoritmo de digestión usando la clase MessageDisgest() con SHA1 retornando bien cabronnn en la linea 18. Lo cual no podemos descifrar, a menos que seas empleado de google, puedas lograr una colisión con 100 VGA XD o hasta masss, bueno ya basta de tanta cotorra y empecemos por partes como el popular jack.

Ejecutamos el crackME  Mayús+ F10


Debe aparecer así


Introducimos cualquier valor, arrojando error claramente, pero eso ya da una pista que el botón validar quizá realice la validación o invoque a un método que la haga, vamos  por más, si oprimo control + F que es para buscar e introducir la palabra validar así:


Para que lo hacemos? pues para ir destripando como hacia jack, ahora con la opción de oprimir control + click justo en el nombre de la instancia del botón _$$b__$$hsqqso_ linea 85 debería de aparecer como la imagen, indicando que en la linea 108 esta el listener de el, vamos a ver que talco



En la linea 112, obtenemos un array de caracteres que viene del JPasswordField que es el campo donde introducimos el serial que debe ser valido , se usa un for para concatenar todos los valores en un String este _$$I_pos123 ver linea 115


la linea 117 es el condicional que compara si _$$I_pos123 es igual a _$$r_easte pero quien rayos es el puto _$$r_easte ? vamos a buscarlo, ctrl+F :


Depurando app java con IntelliJ  básico

En la linea 105 se colocara un BreakPoint para saber que valor posee ese String _$$r_easte
_$$r_easte



Ahora para ejecutar el depurador podemos oprimir Mayús + F9 o en la esquina superior derecha oprimir donde tenemos el icono del bug.

IMPORTANTE


Muchas veces no tenemos una configuración lista y nuestra app no se ejecuta, miren que yo tengo mi configuración del archivo a ejecutar/depurar que es CrackME2_ORIGINAL que eso le dice al IDE que clase ejecutar


Si por alguna razón tienen esa lista de items vacía creen una configuración previa con EDIT CONFIGURATION... y seleccionen el proyecto a ejecutar/depurar, cosa que espero que no les pase nigg@s


Al hacer todo bien el debug tendria que aparecernos:


vamos a la pestaña Variables observando que el String _$$c_Cor_ contiene este valor


cacaba0dff27b124ae5bc688b77c14f136b989118.0


que esa es la key aleatoria que se genero en ese momento de ejecutar el crackME, la pude obtener con control + c , e igual podemos obtener mayor info con click Derecho en ella


Ajustando nuestro botón para hallar y setear la key

Código
  1. _$$b__$$hsqqso_.addActionListener(e -> {
  2.   final String $faHA_$oPL = __gXb$.getText();
  3.   if ($faHA_$oPL == null || "".equals($faHA_$oPL.trim())) {
  4.     return;
  5.   }
  6.   if (!$faHA_$oPL.matches("[0-9]{0,9}") ) {
  7.     JOptionPane.showMessageDialog(null, "Invalid value");
  8.   } else {
  9.     final int $hitDesireMyEX = $$1(_$$Y_sy76, Integer.valueOf($faHA_$oPL.trim()));
  10.     if($hitDesireMyEX != -1) {
  11.        String _$$c_Cor_ = "";
  12.        final int _$_foP = $hitDesireMyEX;
  13.        for (int _$$i_INDEX_ = 0; _$$i_INDEX_ < _$$Y_sy76.length; ++_$$i_INDEX_) {
  14.           if (_$$Y_sy76[_$$i_INDEX_] == _$$Y_sy76[_$_foP]) {
  15.             for (int index = 0; index < _$$i_INDEX_; ++index) {
  16.                 _$$c_Cor_ = _$$c_Cor_ + String.valueOf((byte) _$$Y_sy76[index]);
  17.             }
  18.      //aqui el método es el que cifra el String _$$c_Cor_ y lo concatena
  19.      _$$c_Cor_ = _$$as_OIsl(_$$c_Cor_) + String.valueOf(Math.pow((double) _$$2341s, 2.0D) / 6.0D - 36.0D);
  20.           }
  21.        }//for externo XP
  22.       _$lH$$j$.setText("");
  23.       _$lH$$j$.setText(_$$c_Cor_);
  24.       _$$c_Cor_ = "";
  25.     }else {
  26.        JOptionPane.showMessageDialog(null, "Invalid value");
  27.     }
  28.  }
  29. });
  30.  

Para validar la entrada del usuario usamos condicionales como en la linea 3 y 6, justo en la linea 6 hay una expresión regular (máximo 9, y rango del 0 al 9 inclusive) que cada index contiene ese largo 9 números, como lo siguiente:

Código
  1. matches("[0-9]{0,9}")

La linea 9 del código anterior se invoca al método $$1 mostrado abajo, este retorna el index, donde esta el valor de la variable X del crackME, por cada index del  array estático de valores hexadecimales ejemplo 0x7031101 es igual a el decimal 117641473, cada uno tiene un hash único que es lo que queremos, de otra manera seria -1 en caso de que no este, si es así la linea 10 daría falso y saltaría de una a la linea 25 notificando con Invalid Value

Código
  1. private static int $$1(final int $$_23DeSh$T[], final int $Bul$) {
  2.        return IntStream.range(0, $$_23DeSh$T.length)
  3.                .filter($__Fkl -> $$_23DeSh$T[$__Fkl] == $Bul$)
  4.                .findFirst()
  5.                .orElse(-1);
  6. }


Con este index que lo llamaremos $hitDesireMyEX  mi ·$"%$"%"%  EX , en caso de que exista lo seteamos a _$_foP ver linea 12

La linea 13 esta un for que  recorre el array y en cada iteración consulta el condicional de la linea 14 así,


Código
  1. if(_$$Y_sy76[_$$i_INDEX_] == _$$Y_sy76[_$_foP]) {

Cuando el valor del contador _$$i_INDEX_ sea igual a _$_foP osea mi %$% EX que me hizo la vida imposible con tanto drama por 3 meses, entraremos en el for mas interno para castearle explícitamente los valores del contador del for a bytes, + otro casting  a String  y concatenarlo a _$$c_Cor_, al terminar ese for interno se invoca a  _$$ as_OIsl cifrandolo con el algoritmo de hashing SHA1 retornando de nuevo a la linea 13 for externo, esa condición de la linea 14 siempre se cumplirá solo una vez, es decir si la X es 7414755 index 0, ese for iterara 71 veces en vano, nuestro array posee 72 posiciones.

El valor del String lo seteamos en el JTextField aquí, o ver linea 23.

 
Código
  1. _$lH$$j$.setText(_$$c_Cor_);



Bueno antes de que alguien se queje me voy a quejar yo  ;D




FIXME EASTER EGG

despues de probar y probar me encuentro con un detalle  :xD

2009599811627668E16


Código
  1. _$$2341s = (int) Math.pow(Integer.parseInt(_IX$), 2) /Integer.parseInt(_DEFF_$.substring(_DEFF_$.lastIndexOf("1") + 1, _DEFF_$.lastIndexOf("N"))) + (Integer.parseInt(_DEFF_$.substring(11, 13))) - 2;
  2.  

Depurando esa linea, dando a la flecha como en la imagen para ver el resultado de la operación que, aquí la variable _$$2341s se le asignara 18, otras veces cuando nuestro PoC se va a la mier·""$ es porque tiene este valor  268435465 y de paso es constante.




Pienso, sera que a Leyer se lo ocurrió hacer eso justamente así? o fue por casualidad? algún día le preguntare  :xD

Entonces si _$$2341s puede presentar un valor que es predecible, podemos crearnos un método y otro boton que setee ese valor nuevamente al JTextField o no? continuo varias veces más y me topo de nuevo con el grandísimo huevo de pascua, pero se me ocurrio la idea entonces de aplicarle el ácido


2009599811627668E16 es creada justo aquí
Código
  1.  _$$c_Cor_ = _$$as_OIsl(_$$c_Cor_) + String.valueOf(Math.pow(_$$2341s, 2) / 6 - 36);
  2.  


Esta constante ADD me ayudara
Código
  1. private static final String ADD = ".2009599811627668E16";
  2. private String fixme;
  3.  


Este método también vamos incluirlo para que remueva 8.0 por .2009599811627668E16


Código
  1. private static String fixME(final String key) {
  2.    return key.replace("8.0", ADD);
  3. }
  4.  


Aqui esta nuestro botón rompe Easter Eggs


Código
  1. JButton fixME = new JButton();
  2. fixME.setIcon(new ImageIcon((KeyGen.class.getClassLoader().getResource("fix.png"))));
  3. fixME.addActionListener( e -> {
  4.  _$lH$$j$.setText("");
  5.  if(fixme != null)
  6.  _$lH$$j$.setText(""+fixME(fixme));
  7. });
  8.  



KeyGenPoC  3 MB (3.427.088 bytes) por las dependencias incluidas en el archivo final :-X para ejecutarlo en linux abrimos la consola nos movemos  en el directorio donde este el jar y escribimos, java -jar KeyGenPoC,  en guindo$  ya sabrán.

El cracking un arte que sirve para repartir la riqueza de manera igual en la población, sin fines de lucro  ;D SaluD.o.S

12  Seguridad Informática / Análisis y Diseño de Malware / Analisis de stub.dll con Java en: 16 Enero 2018, 15:30 pm
Buenas que tal? alguna sugerencia de como podria decompilar este stub.dll ? no esta ofuscado se carga desde

Código
  1. final JarInputStream input = new JarInputStream(App.class.getClassLoader().getResourceAsStream("stub.dll"));

para luego cifrar las clases que contiene con DES y crear un server, quiero saber su funcionamiento

bueno si alguien me da una sugerencia pues bien, otra cosa no posee runPE, No pareciera estar con JNA O JNI. La imagen de abajo no me muestra nada ojo uso este soft solo para motivos de exploración.


https://drive.google.com/open?id=1JpTcaZ9NDUG3I1lnQSY4CxMzKLhfuP0v
13  Sistemas Operativos / GNU/Linux / Saludos muchachones Alfa awuso36H, fallas ubuntu 16.04.3 en: 26 Diciembre 2017, 19:39 pm
Pues tengo la alfa pero con fallas, desconexiones continuas , aquí en:

 * Ubuntu 16.04.3
 * Kernel 4.10.0-42-generic

Intentando compilar el driver me arroja esto apenas con make

Código
  1. /home/rubn/Documentos/wifi
  2. (0x52)-> sudo make
  3. [sudo] password for rubn:
  4. make[1]: se entra en el directorio '/usr/src/linux-headers-4.10.0-42-generic'
  5.  CC [M]  /home/rubn/Documentos/wifi/rtl8187/r8187_core.o
  6. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c: In function ‘rtl8180_proc_module_init’:
  7. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:427:18: error: implicit declaration of function ‘create_proc_entry’ [-Werror=implicit-function-declaration]
  8.     rtl8180_proc=create_proc_entry(RTL8187_MODULE_NAME, S_IFDIR, init_net.proc_net);
  9.                  ^
  10. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:427:17: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
  11.     rtl8180_proc=create_proc_entry(RTL8187_MODULE_NAME, S_IFDIR, init_net.proc_net);
  12.                 ^
  13. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c: In function ‘rtl8180_proc_init_one’:
  14. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:461:19: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
  15.     priv->dir_dev = create_proc_entry(dev->name,
  16.                   ^
  17. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:479:9: error: implicit declaration of function ‘create_proc_read_entry’ [-Werror=implicit-function-declaration]
  18.     e = create_proc_read_entry("stats-rx", S_IFREG | S_IRUGO,
  19.         ^
  20. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:479:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
  21.     e = create_proc_read_entry("stats-rx", S_IFREG | S_IRUGO,
  22.       ^
  23. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:489:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
  24.     e = create_proc_read_entry("stats-tx", S_IFREG | S_IRUGO,
  25.       ^
  26. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:518:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
  27.     e = create_proc_read_entry("registers", S_IFREG | S_IRUGO,
  28.       ^
  29. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c: In function ‘rtl8180_tx’:
  30. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:1382:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  31.     u8 seg = ((u32)txbuf % 4);
  32.               ^
  33. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c: In function ‘rtl8187_usb_initendpoints’:
  34. /home/rubn/Documentos/wifi/rtl8187/r8187_core.c:1588:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  35.         seg_size = (u32)ptrcontext->transfer_buffer % 4;
  36.                    ^
  37. cc1: some warnings being treated as errors
  38. scripts/Makefile.build:294: fallo en las instrucciones para el objetivo '/home/rubn/Documentos/wifi/rtl8187/r8187_core.o'
  39. make[2]: *** [/home/rubn/Documentos/wifi/rtl8187/r8187_core.o] Error 1
  40. Makefile:1524: fallo en las instrucciones para el objetivo '_module_/home/rubn/Documentos/wifi/rtl8187'
  41. make[1]: *** [_module_/home/rubn/Documentos/wifi/rtl8187] Error 2
  42. make[1]: se sale del directorio '/usr/src/linux-headers-4.10.0-42-generic'
  43. Makefile:14: fallo en las instrucciones para el objetivo 'all'
  44. make: *** [all] Error 2
  45.  
14  Comunicaciones / Redes / quitar perfil de red en windows y poder conectarse a dicha red? posible? en: 19 Junio 2017, 15:33 pm
Saludos muchachones, pues tengo un detalle vivo en una residencia en donde me pusieron la contraseña del wifi en la pc con windows, pero cuando voy a buscar el perfil de red no esta, y aun me conecto a dicha red  :o

Aqui en esta red de ejemplo, con esa red a la cual me conecto no aparece la pestaña de seguridad

15  Sistemas Operativos / Windows / Windows y error Su sistema no ha sido modificado en: 15 Mayo 2017, 04:52 am
Ps mucchachones tengo este menudo problema en windows 32 bits, todo estaba bien, pero me llego un cliente en donde ahora, los programas en realidad 3 importantes, ahora no se ejecutan bien, o los cracks con los cuales los tenia, no funcionan(las 3 apps crackeadas dan ese error extraño y quizás otras mas.)=...

Su sistema no ha sido modificado, Para instalar este programa en otra ocasión, vuelva a ejecutar el programa de instalación.  

  • desintale
  • pase ccLeaner
  • reinicie
  • volví a reinstalar, e igual
16  Media / Juegos y Consolas / Juego cashflow 101 102 en: 31 Marzo 2017, 01:11 am
Saludos muchachones quien posee este juego o algun enlace valido por la red? he buscado y aun nada  :-(



Listo ya lo consegui :S , gracias a youtube me ahorre un menudo problem.

17  Informática / Hardware / tarjeta madre Foxconn N15235 en: 27 Marzo 2017, 04:49 am
Saludos muchachones, pasa que este chica mala, no reconoce ningun disco duro Sata y en buen estado me falta probar algun disco IDE mañana

ERROR  
  • DISK BOOT FAILURE
DATOS
  • fuente de poder buena de 750wattios AX CORSAIR,  que uso en mi pc
  • disco sata 80 gigas tambien esta en buen estado, probado en otra pc
  • tiene la bateria nueva colocada de la cmos, con 3 voltios medidos por mi.

18  Foros Generales / Foro Libre / $ de paypal a bolivares fuertes? en: 26 Marzo 2017, 20:28 pm
Saludos como les va muchachones? pues, hace poco tenia unos $ en paypal pero no tuve los suficientes cojones o agallas para saber como pasarlos a bolívares fuertes moneda Venezolana  >:D

Se que hay exchanges en donde se cambian esas monedas o webs que pagan un monto a una taza de referencia como la conocida dolarToday en mi país, ha un precio menor claro esta.

 >:D >:D que fastidio con eso, actualmente estoy recibiendo pagos en $ entonces quiero ponerme al tanto de eso
19  Programación / Java / Como hacer esto con Itext o alguna otra sugerencia en: 8 Marzo 2017, 13:18 pm
Como les va,

Pues estoy diseñando un pdf desde java , con itext 2.1.7, la imagen a continuación:

Que recomiendan usar para programarlo así en pdf




Esto lo programe solo con itext, pero según batik permite realizar los círculos en .svg y de manera más fácil ?










La Solución fue usardescarga XD iText in Action 2nd Edition.pdf con mucho café

Use esta dependencia maven

Código
  1. <dependency>
  2. <groupId>com.itextpdf</groupId>
  3. <artifactId>itextpdf</artifactId>
  4. <version>5.5.10</version>
  5. </dependency>
  6.  

Con este código puedo crear un circulo y sobreponerle texto o lo que se desee

Código
  1. private void createCircleScoreAndLabel() throws DocumentException, IOException {
  2. final BaseColor colorScoreLabel = PdfTypes.cvssScore(cve);
  3. final String scoreText = PdfTypes.getCVSSLevel(cve.getCvss());
  4. //levelScore                      //x     y    
  5. createRectangle(colorScoreLabel,70f, 540f ,  190f , 40f);
  6. //levelScore            
  7. createTextOver(scoreText,   25,      160f , 550f);
  8.  
  9. final PdfContentByte textCvssScore = writer.getDirectContent();
  10. textCvssScore.saveState();
  11. textCvssScore.beginText();
  12. textCvssScore.setColorFill(BaseColor.WHITE);
  13. textCvssScore.setFontAndSize(bf, 80);
  14. textCvssScore.endText();
  15. final String score = PdfTypes.formatScore(cve.getCvss());
  16. textCvssScore.showTextAligned(Element.ALIGN_CENTER, score, 160f, 645f, 0f);
  17. textCvssScore.restoreState();
  18.  
  19. final PdfContentByte circleCvssScore = writer.getDirectContentUnder();
  20. circleCvssScore.saveState();
  21. //underCircle.setLineWidth(0.5f);
  22. circleCvssScore.setColorStroke(BaseColor.BLACK);
  23. circleCvssScore.setColorFill(PdfTypes.cvssScore(cve));
  24. circleCvssScore.circle(160f, 670f, 75f);
  25. circleCvssScore.fill();
  26. circleCvssScore.restoreState();
  27.  
  28.  
  29. }
  30.  
20  Programación / Java / getPromedioColumnas(), algun tip ? en: 5 Diciembre 2016, 19:04 pm
Ya puedo sacar el promedio de cada fila, pero de cada columna ? linea [75 a 85], tenia años sin hacer esto  :-X ,,,en la linea 38 llamo al metodo getPromedioFila y le paso un array, intente hacer algo parecido con la linea 51 de varias maneras pero me da java.lang.ArrayIndexOutOfBoundsException
Código
  1.  
  2. import java.text.DecimalFormat;
  3.  
  4. /*
  5.  * @Array 2D como promediar cada columna ?
  6.  */
  7. public class Array2Dimensiones implements Mostrar {
  8.  
  9. private int array[][];
  10. private int array2[][];
  11. private DecimalFormat dosDigi = new DecimalFormat("0.00");
  12.  
  13. public Array2Dimensiones( String descripcion, int array[][], int array2[][] ) {
  14. print("\""+descripcion+"\"\n");
  15. this.array = array;
  16. this.array2 = array2;
  17. mostrarArray();
  18. }
  19.  
  20. public void mostrarArray() {
  21. print("Array 2D completo\n");
  22. for( int tmp[] : array) {
  23. for( int tmp2 : tmp ) {
  24. print("{"+tmp2+"}");
  25. }
  26. print("\n");
  27. }
  28.  
  29. /*
  30. * PROMEDIO DE CADA FILA
  31. */
  32. print("Promedio de cada fila \n");
  33. for( int f=0; f<array.length; f++ ) {
  34.  
  35. for( int c=0; c<array.length; c++ ) {
  36. print(""+array[f][c]);
  37. }
  38. double promedio = getPromedioFila( array[f] );
  39. print("\t\t\t\t"+dosDigi.format(promedio)+"\n");
  40. }
  41.  
  42. /*
  43. * PROMEDIO DE CADA COLUMNA
  44. */
  45. print("Promedio de cada columna \n");
  46. for( int f=0; f<array.length; f++ ) {
  47. double promedio = 0;
  48.  
  49. for( int c=0; c<array[f].length; c++ ) {
  50. print(""+array[c][f]);
  51. promedio = getPromedioColumna(array[c]);
  52. }
  53.  
  54. print("\t\t\t\t"+dosDigi.format(promedio)+"\n");
  55. }
  56. }
  57.  
  58. /*
  59. * PROMEDIO FILA
  60. */
  61. public double getPromedioFila( int array[] ) {
  62.  
  63. int suma = 0;
  64. for( int f=0; f<array.length; f++ ) {
  65. suma += array[f];
  66. }
  67. return (double) suma / array.length;
  68.  
  69. }
  70.  
  71. /*
  72. * PROMEDIO COLUMNA
  73. */
  74. public double getPromedioColumna( int array[] ) {
  75.  
  76. int suma = 0;
  77. for( int f=0; f<array.length; f++ ) {
  78. for( int c=0; c<array[f]; c++ ) {
  79. suma += array[c];
  80. }
  81. }
  82. return (double) suma / array.length;
  83.  
  84. }
  85.  
  86. @Override
  87. public void print( String s ) { System.out.print(s); }
  88. public static void main( String []blablabl) {
  89.  
  90. int array[][] = {{1,2,3},
  91.                {4,5,6},
  92.                        {7,8,9}};
  93.  
  94. int array2[][] = {{1,2,3},
  95.         {4},
  96. {5,6,7}};
  97.  
  98. new Array2Dimensiones("2 tipos de Array 2d e Irregular",array,array2);
  99.  
  100. }
  101. }
  102.  

Código
  1. "2 tipos de Array 2d e Irregular"
  2. Array 2D completo
  3. {1}{2}{3}
  4. {4}{5}{6}
  5. {7}{8}{9}
  6. Promedio de cada fila
  7. 123 2,00
  8. 456 5,00
  9. 789 8,00
  10. Promedio de cada columna
  11. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
  12. at Array2Dimensiones.getPromedioColumna(Array2Dimensiones.java:80)
  13. at Array2Dimensiones.mostrarArray(Array2Dimensiones.java:52)
  14. at Array2Dimensiones.<init>(Array2Dimensiones.java:18)
  15. at Array2Dimensiones.main(Array2Dimensiones.java:99)
  16.  
  17.  
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines