Plataforma de craqueo Win2K SP4
Nombre del software Dazui Japanese 5.0
Dazui Japanese combina dos métodos efectivos de aprendizaje de inglés, el aprendizaje inverso y el inglés loco.
También es innovador e integra funciones de escuchar, hablar, leer, escribir, memorizar y comprobar el japonés, resolviendo los problemas de aprendizaje del japonés que afectan a los chinos.
Es un software educativo integral que integra el habla japonesa y la memorización de palabras japonesas.
Modo Shell EXEStealth 2.75a ASPack UPX
Antes de depurar, es mejor cambiar el nombre de OLLYDBG.EXE·CMD.EXE porque hay algo de código en el shell para detectar el proceso principal. como se muestra a continuación:
0123 CCA 0 813F 434d 442 e CMP dword ptr ds: [EDI], 2E444D43[EDI] es el nombre del programa principal de prueba, los caracteres ASCII de 0x43, 0x4d, 0x44 y 0x2e son "CMD".
0123CCA6 74 3B je short bmjapane 0123 CCE 3; si el programa principal no es CMD.EXE, no saltará y luego modificará en exceso el registro ZF a 1.
0123CCA8 90 nop
0123 CCA 90 nop
0123CCAA 90 nop
0123 cabina 90 nop
0123 CAC 83EE 0C sub ESI, 0C
0123 ccaf AD lods dword ptr ds: [ESI]
0123CCB0 0306 add eax, dword ptr ds: [esi]
0123CCB2 0346 04 add eax, dword ptr ds: [esi 4]
0123CCB5 8BD8 mov ebx, eax
0123 CCB 7 8d b5 a 1194100 lea ESI, dword ptr ss: [ ebp 4119a 1]
0123 CBD AD lods dword ptr ds: [ESI]
0123 CBE 0bc 0 o eax, eax
0123 CCC 0 74 0E je japonés corto
0123CCC2 90 nop
0123CCC3 90 nop
0123CCC4 90 nop
0123CCC5 90 nop
0123CCC6 2BC3 sub eax, ebx
0123 CCC 8 74 19 je short bmjapane 0123 CCE 3
0123 CCA 90 nop
0123 CCB 90 nop
0123CCCC 90 nop
0123 CCD 90 nop
0123 CCE ^ EB ed jmp short BM japane
0123 cd0 B8 90010000 mov eax 190
0123 cd5 E8 c 6 efffff call BmJapane.0123BCA0
0123 ccda 8 DBD 69324000 lea EDI, dword ptr ss: [ebp 403269]
0123CCE0 03F8 agregar edi, eax
0123 CCE 2 AB stos dword ptr es: [EDI]; Sin saltar hacia adelante, el depurador no podrá manejar la excepción aquí y el proceso saldrá.
0123CCE3 FFB5 30FE4000 push dword ptr ss: [ebp 40fe 30]; saltar aquí
0123CCE9 50 push eax
Configurar en el mismo directorio. cuando aparece, el archivo está incompleto y es necesario reinstalar el programa.
Simplemente sobrescriba el archivo de copia de seguridad con el archivo de configuración;
-
Utilice OD para cargar el programa y deténgase aquí: (EXEStealth, el primer shell)
p>0124 a060 gt;/EB 58 jmp corto BM japonés 0124 a0ba
0124A062 | 53 push ebx
0124 a063 68 61726577 push 77657261 p>
0124A068 |61 popad
0124A069 |72 65 jb short BmJapane.0124A0D0
Ignora todas las excepciones excepto las de memoria, ve aquí después de 5 excepciones de memoria (presiona Shift F9 4 veces):
0078700d 64:8925 0000000 gt; mov sistema de archivos de puntero de palabra doble: [0], esp
00787014 33C0 xor eax, eax
00787016 8908 mov dword ptr ds: [eax], excepción de memoria ecx
00787018 0000 Agregar puntero de byte ds: [eax], al
0078701A 0000 Agregar byte ptr ds: [eax], al
La pila en este momento es:
0012 ffbc FFFFFFFF SEH extremo de cadena
0012FFC0 00D9DAA8 SE procesador
0012FFC4 7C4E87F5 Volver a kernel 132.7 c4e 87 f 5
0012 ffc 8 005616 A8 bmjapane 005616 A8
Cree el punto de interrupción en D9DAA8 y presione Shift F9.
00D9DAA8 B8 A7C8D9F0 mov eax, F0D9C8A7
00 d9 daad 8d 88 24120010 lea ecx, dword ptr ds: [eax 10001224]
00 d9 daad 3 8941 01 mov dword ptr ds: [ecx 1], eax
00D9DAB6 8B5424 04 mov edx, dword ptr ss: [esp 4]
00D9DABA 8B52 0C mov edx, dword ptr ds: [edx C]
00D9DABD C602 E9 mov byte ptr ds: [edx], 0E9
00D9DAC0 83C2 05 agregar edx, 5
00D9DAC3 2BCA sub ecx, edx
00 d9 DAC 5 894 a FC mov dword ptr ds: [EDX-4], ecx
00D9DAC8 33C0 xor eax, eax
00D9DACA C3 retn
Después de ir a RETN, mira el código de la dirección original:
0078700d 64:8925 0000000 gt; mov sistema de archivos de puntero de doble palabra: [0], esp
00787014 33C0 xor eax, eax
00787016-E9 b06a 6100 jmp bmjapane 00 d9 dacb Interrumpe aquí, el programa interrumpe aquí y luego establece el TP del registro de bandera en 0 y continúa ejecutándose; .
0078701B 0000 Agregar puntero de byte ds: [eax], al
0078701D 0000 Agregar puntero de byte ds: [eax], al
00D9DACA C3 retn p>
00D9DACB B8 A7C8D9F0 mov eax,f 0d 9 c 8 a 7; así que salté aquí
00 d9 dad 0 64:8f 05 0000000 gt; sistema de archivos emergente con puntero de palabra doble:[ 0]
00D9DAD7 83C4 04 agregar esp, 4
00D9DADA 55 presionar ebp
00D9DADB 53 presionar ebx
00D9DADC 51 presionar ecx
00D9DADD 57 push edi
00D9DADE 56 push esi
00D9DADF 52 push edx
00 d9da E0 8d 98 DD 110010 lea ebx, dword ptr ds: [eax 100011DD]
Vaya directamente aquí:
00D9DB70 5E pop esi
00D9DB71 5F pop edi
00D9DB72 59 pop ecx
00D9DB73 5B pop ebx
00D9DB74 5D pop ebp
00 d9 db 75-FFE 0 jmp eax=B55001
-
Saltó de nuevo al siguiente piso, como el cascarón de un embalaje.
00B55001 60 pushad
00B55002 E8 03000000 call BmJapane.00B5500A
00b 55007-E9 EB 045d 45 jmp 461254 f 7
00B5500C 55 push ebp
00B5500D C3 return
00B5500E E8 01000000 call BmJapane.00B55014
00b 55013 EB 5D jmp short BM japane 00b 55072
Utilice Ctrl S para encontrar el popad directamente.
Ven aquí:
00b 553 a 9 8985 a 8030000 mov dword ptr ss: [ebp 3 A8], eax
00B553AF 61 popad
00b 553 b 075 08 jnz short BM japonés 00b 553 ba
00B553B2 B8 01000000 mov eax, 1
00B553B7 C2 0C00 return 0C
00B553BA. 68 0000000 push 0; cuando corres aquí, se convierte en push 90fc10.
00B553BF C3 Regreso
-
Alcanza el siguiente nivel de shells, que son los shells UPX.
0090FC10 60 pushad
0090 fc 11 BE 00707800 mov ESI, BmJapane.00787000
0090 fc 16 8d be 00 A0 C7 ff lea EDI, dword ptr ds :[esi FFC7A000]
0090FC1C 57 push edi
0090FC1D 83CD FF o ebp, FFFFFFFF
0090FC20 EB 10 jmp short BmJapane.0090FC32
0090FC22 90 nop
0090FC23 90 nop
0090FC24 90 nop
0090FC25 90 nop
0090FC26 90 nop
0090FC27 90 nop
0090FC28 8A06 mov al, byte puntero ds: [esi]
0090FC2A 46 inc esi
0090FC2B 8807 mov byte ptr ds: [ edi], al
0090FC2D 47 inc edi
0090FC2E 01DB add ebx, ebx
0090 fc30 75 07 jnz short BM japane 0090 fc39 p>
Accede también al popad y encuentra lo siguiente:
0090FD9B 66: 8B07 mov ax, word ptr ds: [edi]
0090FD9E 83C7 02 add edi, 2
>0090 FDA 1 ^ EB E2 jmp corto BM japonés 0090 FD 85
0090FDA3 61 popad
0090 FDA 4 ^ e9 8b 1dd 7 ff jmp bmjapane . /p>
-
Hemos conseguido los objetivos previstos. Use OllDUMP para volcar el programa, o use LordPE para volcar, pero necesitamos usar ir para reparar el IAT.
00681B34 55 empujar ebp
00681B35 8BEC mov ebp, esp
00681B37 83C4 F0 agregar esp, -10
00681B3A 53 empujar ebx
00681B3B B8 9c 146800 mov eax, bmjapane 068149 c
00681B40 E8 175DD8FF llamada BmJapane.0040785C
00681b 45 8b 1D d 0906800 mov ebx, d wordptr. ds: [6890d 0]; BmJapane.0068AC18
00681B4B 8B03 mov eax, dword ptr ds: [ebx]
00681B4D E8 CE22E1FF llamada BmJapane.00493E20
00681B52 8B03 mov eax, dword ptr ds: [ebx]
00681B54 BA 7c 1e 6800 mov EDX, BmJapane.00681E7C
00681b 59 E8 aa 1ee 1FF call BmJapane.00493A08
00681B5E 8B0B mov ecx, dword ptr ds: [ebx]
-
Ejecútalo y el programa reporta un error.
"Se produjo una infracción de acceso en la dirección 1000100A. Lea la dirección 1000100A.
”
Mira el espacio de memoria con LordPE:
Número total de elementos en la vista de lista: 26
-
Base de imagen de ruta tamaño de imagen
-
d:\BM Japanese\BM Japanese .exe 00400000 00001000
c:\win nt\system32\ntdll .dll 77f 80000 0007 b000 p>
c:\win nt\system32\kernel 32.dll 7c4e 0000 000 b 9000
c:\win nt\system32\user 32.dll 77e 10000 00065000
c:\win nt\system32\GDI 32.dll 77f 40000 0003 c 000
c:\win nt\system32\imm32.dll 75e 60000 0001a 000
c:\ win nt\system32\advapi 32.dll 7c2d 0000 00062000
c:\win nt\system32\rpcrt 4.dll 77d 30000 00071000
d:\BM Japanese\ data\data .dat 10000000000037000
c:\win nt\system32\comctl 32.dll 71710000 00084000
c:\win nt\system32\com DLG 32.dll 76b 30000 0003 e000
p>c:\win nt\system32\shlwapi.dll 70bd 0000 00065000
c:\win nt\system32\msvcrt.dll 78000000000045000
c:\win nt \system32\shell32.dll 782 f 0000 00248000
c:\win nt\system32\hhctrl.ocx 5d 300000 00080000
c:\win nt\system32 \ole32.dll 77a 50000 000 f 7000
c:\win nt\system32\oleaut32.dll 779 b 0000 0009 b 000
c:\win nt\system32\msacm32. dll 77410000 00013000
c:\win nt\system32\winmm.dll 77570000 00030000
c:\win nt\system32\version.dll 77820000 00007000
c:\win nt\system32\lz32.dll 759b 0000 00006000
>
c:\win nt\system32\winspool.drv 77800000 0001e 000
c:\win nt\system32\MPR.dll 76620000 00011000
c:\win nt \system32\wsock 32.dll 75050000 00008000
c:\win nt\system32\ws2_32.dll 75030000 00014000
c:\win nt\system32\ws2 help.dll 75020000 00008000
La dirección es el espacio de data.dat. Si usa PEID para verificarlo, es un archivo DLL del shell ASPack. Consulte la tabla de salida y solo hay dos funciones.
Son HDSerialNumRead y WEP respectivamente.
Aún hay una DLL no cargada. Por supuesto que habrá errores.
Vuelva a cargar el archivo original y cargue los puntos de interrupción de la biblioteca. Después de algunas veces se rompe aquí:
01240873 53 push ebx
01240874 FF95 94e 24100 call dword ptr ss: [ebp 41e 294]; data\data\data.data
0124087A 0BC0 o eax, eax
0124087 c 75 34 jnz short bmjapane 012408 B2
Entonces ven aquí:
p>01240941 53 push ebx
01240942 ff b5 17fc 4000 push dword ptr ss: [ebp 40fc 17]
01240948 FF95 8ce 24100 call dword ptr ss: [ebp 41 e28c]; núcleo32. GetProcAddress
0124094 e 3B9D 1 ffc 4000 CMP ebx, dword ptr ss: [ebp 40FC1F]
Obtiene la dirección de HDSerialNumRead.
Utilice Alt M para abrir la imagen de memoria,
Presione F2 para romper el punto de interrupción en 10001000 y presione F9 para llegar aquí.
10001003 CC int3
10001004 CC int3
10001005 E9 66010000 datos jmp 10001170
1000100 a gt; 10001B40 -|jmp
1000100 f gt; E9 3C0C0000 datos jmp 10001C50
10001014 E9 c 7030000 datos jmp. p>
1000101E E9 0d 020000 datos jmp 10001230
10001023 E9 78080000 datos jmp
10001028 E9 93020000 datos jmp. 40000 datos jmp
10001032 E9 89070000 datos jmp 100017C0
10001037 CC int3
10001038 CC int3
- |
10001B40 55 push ebp
10001b 41 8 bec mov ebp, esp
10001B43 81EC d 4070000 adjunto esp, 7D4
10001B49 53 push ebx p >
10001B4A 56 push esi
Presiona CTRL F9 y luego regresa al programa principal:
0059C567 8D45 C4 LEAX, DEWORD PTR ss: [ebp-3C] p>
0059C56A E8 518AE6FF llame a BmJapane.00404FC0
0059C56F E8 D0F1FFFF llame a bmjapane.0059 b 744; HDSerialNumRead
0059C574 8BD0 mov edx, eax
0059C576 8D45 C4 leax, deward ptr ss: [ebp-3C]
Llamada original 59B744 Es la dirección de llamada de la función data.HDSerialNumRead Mire la imagen de arriba:
0059 b744-FF25 2 CCC 6800 jmp dword ptr ds: [68 cc2c]; HDSerialNumRead
Bueno, simplemente complete 68CC20 para obtener la dirección correcta.
Utilice OD para cargar el programa desde DUMP y cargar la BibliotecaA en el punto de interrupción. Después de interrumpir el programa, presione Alt F9 para regresar al código de usuario:
0047 e97b/0f 85 ee 000000 jnz oll 0047 ea6f
0047E981 | 68 ACEA4700 push oll . eaac; ASCII "imm32 .dll "
0047 e986 | E8 d 594 F8 y siguientes llamar a jmp. ampkernel32.
LoadLibraryA gt
0047 e98b | A3 88326800 mov dword ptr ds: [683288], eaxIMM32.75E60000
0047E990 | 833D 88326800 0 gtcmp puntero de palabra doble ds: [683288], 0
0047 e997 | 0F84 d 2000000 je ol . 0047 ea6f
Vaya al código y busque la salida:
0047EA8D 5B pop ebx usuario 32.77E10000
0047EA8E 59 pop ecx
0047EA8F 5D pop ebp
0047EA90 retorno C3
0047EA91 0000 agregar byte ptr ds: [eax], al< / p>
Encuentre un lugar para agregar su propio código:
Block ExeS ya no se usa, solo para escribir código:
Nota: La llamada a LoadLibraryA es "Llamar 00407 e60"; la llamada a GetProcAddress es "Llamar 00407D50".
Si la situación es diferente, se deberá modificar en consecuencia.
0047 ea8d-E9 6e b5 DC 00 jmp oll 0124 a000
0047EA92 C3 return
0124A000 68 30A02401 push oll . data\Data.dat "
0124 a005 E8 56de 1 llamada BFF lt; jmp. ampkernel32. LoadLibraryA gt
0124A00A 68 40A02401 push oll 0124 a040; ASCII "HDSerialNumRead "
0124A00F 50 push eaxEAX es el identificador de DLL después de LoadLibraryA.
0124 a 010 E8 3 BDD 1 BFF llamada lt;jmp. ampkernel32. GetProcAddress gt
0124 a 015 A3 2ccc 6800 mov dword ptr ds: [68 cc2c], eax
0124A01A 5B pop ebx
0124A01B 59 pop ecx p>
0124A01C 5D pop
0124A01D 90 nop
0124 a 01E-E9 6f 4a 23 ff jmp oll 0047 ea 92
0124A023 90 nop.
-
Anticódigo para programa
0067D1E9 ^\EB CE jmp volcado corto
0067D1EB E8 80C4E4FF volcado de llamada 004C9670
0067D1F0 68 FFFF0000 empujar 0FFFF
0067D1F5 6A 0D empujar 0D
0067d 1f 7 E8 7 CB 2d 8 ff llamar a lt;jmp. amuser32.
SalirWindowsEx gt; cerrado~
0067D1FC E9 CD060000 jmp dump 0067D8CE
Por supuesto, los programas no pueden hacer un mal uso de una API tan peligrosa. Si quieres que apunte a tu propio código, cámbialo directamente en IAT:
0067d 1f 7 E8 7 CB 2d 8 ff call lt;jmp. amuser32. El número de teléfono original de ExitWindowsEx gt es 00408478.
Ve a 408478 y echa un vistazo:
00408478-FF25 50c 96800 jmp dword ptr ds: [lt; amp user 32. Salga de WindowsEx gt;Usuario 32. Salga de WindowsEx
Escriba su propio código:
0124A000 83C4 0C add esp, 0C
0124A003 FF7424 F4 push dword ptr ss: [esp-C]; Luego restaure la dirección RETN.
0124A007 Retorno C3
Cambiar tabla IAT:
00408478-E9 831be 400 jmp exit_fix 0124 a000
0040847D 90 nop
Ejecutando, el programa no tiene ningún problema,....
Desembalaje completado
Posdata, la parte de restauración IAT de EXEStealth es más interesante:
00FDE535 8B07 mov eax, dword ptr ds: [EDI]; EDI es la dirección base de la estructura del nombre de la función de cifrado (por así decirlo).
00FDE537 09C0 o eax, eax
00FDE539 74 3C je short BM japane 00 FDE 577; si la tabla IAT está completa, omítala.
00FDE53B 8B5F 04 mov ebx, dword ptr ds: [edi 4]
00FDE53E 8D8430 BC43BE00 lea eax, dword ptr ds: [eax esi BE43BC]
00FDE545 01F3 Agregar ebx, esi
00FDE547 50 push eax
00FDE548 83C7 08 Agregar edi, 8; La dirección base de la estructura del nombre de la función es de 8 bytes y apunta al tercer elemento.
00FDE54B FF96 1045BE00 llamar a dword ptr ds: [ESI be 4510]; cargar biblioteca a
00FDE551 95 xchg eax, ebp
00FDE552 8A07 mov al, byte ptr ds: [EDI]; Lee el valor del elemento 3.
00FDE554 47 inc La dirección base de la estructura del nombre de la función edi es 1, apuntando al cuarto elemento, que es el nombre de la función.
00FDE555 08C0 o al, al; comprueba si AL (el tercer elemento del nombre de la función) está vacío.
^ 74 DC je short BmJapane
00FDE559 89F9 mov ecx, edi lee el nombre de la función y lo coloca en ECX.
00FDE55B 57 nombre de la función push edi
48 de diciembre
00 FDE 55d F2: AE repne scas byte ptr es: [EDI]; en realidad para calcular la dirección base de la siguiente función.
00FDE55F 55 push ebp
00FDE560 FF96 1445BE00 call dword ptr ds: [ESI be 4514] GetProcAddress
00FDE566 09C0 o eax, eax
00 FDE 568 74 07 je short BM japane 00 FDE 571 generalmente no salta. Aquí está la situación en la que no se puede obtener la dirección de la función.
00 FDE 56 a 8903 mov dword ptr ds: [ebx], eax obtiene la dirección y la completa en [ebx] (tabla IAT).
00FDE56C 83C3 04 add ebx, 4; dirección de tabla IAT 4 bytes
00FDE56F ^ EB E1 jmp short BmJapane.00FDE552
La siguiente es una de las funciones Estructura de la función, relacionada con lo anterior:
35 02 00 00 24 B9 99 00 01 61 63 6d 4d 65 74 72 5..$ acmMetr
| 2 - | 3 | - 4 -
69 63 73 ics
- |
1->; utilizar leaEAX, dword ptrds: [EAX ESI be43bc] Indique a qué archivo DLL pertenece esta función y pase la dirección del archivo DLL a eax.
2->;Esta parte se agrega con la dirección base (401000) como dirección donde el programa llena la tabla IAT.
3->; Identifica si la DLL donde se encuentra la función es la misma que la DLL de la función anterior.
4->;Nombre de la función