Disculpen héroes, ¿cuál es el número de registro de mi Big Mouth Japanese 5.0? 1323170516

Utilice las herramientas ollidbg, peid y loadpe.

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

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

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

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

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

10001B4A 56 push esi

Presiona CTRL F9 y luego regresa al programa principal:

0059C567 8D45 C4 LEAX, DEWORD PTR ss: [ebp-3C]

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

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