|
433
|
Programación / Ingeniería Inversa / Cracked SmartFTP - aPLib compresion (Algoritmo).
|
en: 9 Abril 2011, 19:27 pm
|
Hola... bien esta es la primera vez que intento hacer algo como esto XD, asi que he estado mirando el SmartFTP que es muy bueno, pero a la vista que no hay craks o es dificil encontrar ( yo por lo menos no lo eh encontrado ), me decide a hacerlo por mi cuenta y aprender un poco mas . Bien el SmartFTP, en versiones anteriores lo tenia y recuerdo que me aparecia una nag la cual me decia que tenia 30 dias de validacion, pero bueno, esta version 4.0 no me aparece o por ahora no lo hace recien tengo 0 dias de uso , y segun vi usa aPLib Compresion (Algoritmo) Microsoft C++ 6.0 y cuando lo abro con el olly el EP para en 0078F487 > $ E8 8D050000 CALL SmartFTP.0078FA19
y segun el olly Memory map, item 23 Address=007E3000 Size=00199000 (1675264.) Owner=SmartFTP 00400000 Section=.rdata Contains=imports Type=Imag 01001002 Access=R Initial access=RWE estamos en la sección imports D:, bueno antes de ponerme en onda lo que hice fue correr haber si se podia, y si normal se pudo, para mi sorpresa, fue al disassemble, click derecho view -> SmartFTP y pues me encontre con el OEP, le puse un BP y di un restart bien luego comenze a correr ah me olvidaba que para que corra complemante da algunas excepciones, shitf + F9 y corre sin problemas , y pues paro alli, ahora esta es mi pregunta aPLib compresion (Algoritmo), es un algoritmo de compresion, pero necesita que sea "uncompresar", la aplicacion?, nunca me he tocado con este tipo de "compresion" e tocado crackmes con uno que otro packersillo, pero esto =/ y estaba viendo en el buscador de la web de ricardo y pues solo hay un tuto que habla sobre aPLib compresion y efectivamente dumpea la aplicacion y hace el mismo procedimiento como si fuera un packer... y pues me trae dudas porque las apis me parece no se, si sea necesario =/. Es lo poco que he visto y necesito que me oriententacion. link de descarga porseacaso D: http://www.smartftp.com/download/Meta: Crackear y talvez tute XD Salu2!
|
|
|
435
|
Programación / Ingeniería Inversa / Re: Sugerencias
|
en: 7 Abril 2011, 19:07 pm
|
aun no, y eso que cada 15 dias normalmente le consulto a su mail que esta en la pagina, siempre dice, que le falta poco, pero no dice nada
yo hasta el momento aprendi un poco de ingles y uso el PID, el cual ya uso un beta, pero no es nada oficial hasta que se corrijan ciertos detalles, pero bueno si es de escanear, siempre se puede depurar y comprobar los packers por si mismo, el otro dia escaneaba uno y nada, al depurarlo era themida, asi que hay nuevas cosas siempre, pero las bases son iguales, aprender , depurar , revisar y verificar
saludos Apuromafo
se es que hace mucho tiempo que deje los tutos de ricardo y los estoy retomando de nuevo... asi que ando por la sección unpack al upx, pero siempre es bueno informarse ya que las herramientes que el usaba en ese entonces ya existen versiones superiores de las mismas... Y como nunca he debuggeado para ver que packer es.. jeje, pues no sabria como identificar alguno . Salu2!
|
|
|
436
|
Programación / Ingeniería Inversa / Re: Sugerencias
|
en: 6 Abril 2011, 18:59 pm
|
creo que hace ya varios meses pude conseguir el RDG packer detector 0.6.7 pero lo que pasaba era que aunque le daba doble click no habria la GUI y cuando me iba a otra pc si me habria pero se crasheaba... me parece que no seria la oficial... ahora que ya paso un tiempo me pregunto ya saco la version 0.6.7??
Salu2!
|
|
|
437
|
Seguridad Informática / Análisis y Diseño de Malware / Re: duda de cómo se introducen cadenas en la pila (manualmente).
|
en: 4 Abril 2011, 04:37 am
|
No, Karcrack no usa nada de la sección .data :S. Y bueno, si la shellcode no es para hacer malware, debería de ir en Bugs y Exploits, no aquí, así que bueno, para la próxima ya sabes.
Saludos
y nMagic donde lo declara? D:.. no se tal vez entendi mal , esta usando una direccion de memoria de su propia aplicacion pero para una shellcode creo que no sirviria no se corrijeme nunca he codeado una D:. @black_flowers creo que le llevas dedica muxo tiempo, y esto amerita que te deje este code.. miralo y espero que resuelvas tus problemas . Inyeccion PROC cdq; EDX=0 mov EDX, fs:[edx+30h]; EDX = &PEB mov eax, [edx+0Ch]; EAX = PEB->PPEB_LDR_DATA mov esi, [eax+1Ch]; ESI = &PEB->PPEB_LDR_DATA->InInitializationOrderModuleList[0] SiguienteModulo: mov eax, [esi+08h]; EAX = PEB->PPEB_LDR_DATA->InInitializationOrderModuleList[i].BaseAddress mov edi, [esi+20h]; EDI = PEB->PPEB_LDR_DATA->InInitializationOrderModuleList[i]. NameModule mov esi, [esi]; ESI = PEB->PPEB_LDR_DATA->InInitializationOrderModuleList[i].flink (NextModule) cmp byte ptr[edi+6*2], '3' ;// NameModule[6] == '3' ¿? jne SiguienteModulo mov ebp,eax ; EBP = base kernel32 assume eax: ptr IMAGE_DOS_HEADER add eax,[eax].e_lfanew; BaseKernel32 + 3Ch = PEHeader, Como es RVA + BaseKernel32 assume eax:ptr IMAGE_NT_HEADERS mov edi,[eax].OptionalHeader.DataDirectory[0].VirtualAddress; PEHeader + 78h = .edata add edi,ebp ;Como es RVA assume edi:ptr IMAGE_EXPORT_DIRECTORY mov esi,[edi].AddressOfNames; .edata + 20h = AddressOfNames add esi,ebp ; Como es RVA xor edx,edx assume eax:nothing ; Para Evitar Errores Busqueda: mov eax,[esi] add eax,ebp cmp word ptr [eax+0Ch],"ss" jne Siguiente cmp dword ptr [eax+04h], "Acor" jne Siguiente cmp dword ptr [eax+00h], "PteG" jne Siguiente cmp dword ptr [eax+08h], "erdd" jne Siguiente mov eax,[edi].AddressOfNameOrdinals; .edata + 24h = AofNamesOrdinal add eax,ebp ; Como es RVA movzx ebx,word ptr [edx*2+eax]; Como es una entrada de WORDS multiplico * 2 al contador ; EBX = Asi obtendremos el puntero al ordinal de la funcion GetProcAddress mov eax,[edi].AddressOfFunctions; .edata + 1Ch = AddressOfFunction add eax,ebp ; RVA ._. ;EAX = AddressOfFunction ;EBX Puntero al ordinal ;Multiplicamos *4 el puntero al ordinal de GPA porque la tabla es de dwords. mov ebx,[ebx*4+eax]; EBX = RVA de GetProcAddress add ebx,ebp ; EBX = GetProcAddress jmp Listo ; Salimos :) Siguiente: add esi,4 inc edx; EDX = CONTADOR cmp edx,[edi].NumberOfNames jne Busqueda Listo: assume edi:nothing ; Evitamos Errores D= mov edx, ebp ;00402044 4C 6F 61 64 4C 69 62 72 LoadLibr ;0040204C 61 72 79 41 00 aryA. mov ebp, esp sub ebp, 10h mov byte ptr [ebp - 0Dh], 4Ch mov byte ptr [ebp - 0Ch], 6Fh mov byte ptr [ebp - 0Bh], 61h mov byte ptr [ebp - 0Ah], 64h mov byte ptr [ebp - 09h], 4Ch mov byte ptr [ebp - 08h], 69h mov byte ptr [ebp - 07h], 62h mov byte ptr [ebp - 06h], 72h mov byte ptr [ebp - 05h], 61h mov byte ptr [ebp - 04h], 72h mov byte ptr [ebp - 03h], 79h mov byte ptr [ebp - 02h], 41h mov byte ptr [ebp - 01h], 00h lea ecx, dword ptr [ebp - 0Dh] push ecx push ebp call ebx; nop nop ret Inyeccion endp
pd: agradezco la portabilidad ha... YSK... me ayudo sobre el peb pd2: cuando hagas una shellcode si no me equivoco tiene que ser lo menos pesado posible (perdon por el horro de terminos =B), asi que como veras pasarle de manara la string no es muy buena que digamos asi que podes usar el no se el mov que te dije al principio. Salu2! Nox
|
|
|
438
|
Seguridad Informática / Análisis y Diseño de Malware / Re: duda de cómo se introducen cadenas en la pila (manualmente).
|
en: 3 Abril 2011, 06:38 am
|
Pero si el lío se lo metiste tú pusheando dos dword's al principio, y el quiso hacer lo mismo con una cadena de 7 bytes . Para pushear con bytes, no hay problema, para pushear con dwords puedes hacer lo que te dijo Karcrack de hacer un xor con el 'xoreado' o hacer lo que hizo Nox con un mov. O hacer lo que te dije yo, que ocupa menos con cadenas de más de 7 bytes, pero que deja nulos. Saludos creo que lo que quiere hacer el es una shellcode, por eso tanto lio de los bytes nullos, si es asi no podria usar el metodo de karcrack ni el tuyo, ya que karcrack usa una direccion creada en la sección .data, y especificamente para ella si el la querra usar G_G, bueno si usa la tuya ya sabemos bytes nullos D:. Creo que ya sabe que hacer Salu2!
|
|
|
439
|
Seguridad Informática / Análisis y Diseño de Malware / Re: duda de cómo se introducen cadenas en la pila (manualmente).
|
en: 30 Marzo 2011, 01:05 am
|
bien bien pero parece que no resolvimos ese problema de tu code el del principio mira yo use este code para loadlibrary, y me funciona perfectamente checa como le reservo la pila... si solo cambias los caracteres debe funcionar ;00402044 4C 6F 61 64 4C 69 62 72 LoadLibr ;0040204C 61 72 79 41 00 aryA. mov ebp,esp; ebp puntero al stack sub esp, 0Dh; reservamos espacio xor ecx,ecx mov byte ptr [ebp - 0Dh], 4Ch mov byte ptr [ebp - 0Ch], 6Fh mov byte ptr [ebp - 0Bh], 61h mov byte ptr [ebp - 0Ah], 64h mov byte ptr [ebp - 09h], 4Ch mov byte ptr [ebp - 08h], 69h mov byte ptr [ebp - 07h], 62h mov byte ptr [ebp - 06h], 72h mov byte ptr [ebp - 05h], 61h mov byte ptr [ebp - 04h], 72h mov byte ptr [ebp - 03h], 79h mov byte ptr [ebp - 02h], 41h mov byte ptr [ebp - 01h], cl lea ecx, dword ptr [ebp - 0Dh] push ecx push edx; BaseKernel call ebx; GPA add esp, 0Dh; Balanceamos la pila
pd: la pila se balancea para poder evitar errores, puede que haya un tipo de seguridad que mire la pila, y si a la hora de volver por ejemplo al programa la pila no esta como antes crash! y aunque no te de ese problema cuando lo haces una aplicacion autonoma, es por buena costumbre que lo harias . Salu2!
|
|
|
440
|
Seguridad Informática / Análisis y Diseño de Malware / Re: duda de cómo se introducen cadenas en la pila (manualmente).
|
en: 29 Marzo 2011, 23:41 pm
|
el code que te pase funciona como te dije fijate si queda desbalanceada la pila o antes de eso le podes reservar espacio en la pila luego la balanceas.. con lo que te doy ya tenes una idea si no quieres hacer mov puedes hacer que esp apunte 3 posiciones antes con un lea, y luego haces el push te evitas de hacer mov, y luego restauras a esp, en fin miles de ideas, te recomiendo que usaes algun debugger asi practica practica hasta que te salga!
Salu2!
|
|
|
|
|
|
|