bueno lo proximo seria un bruteforce
00401672 |> /81FB 232A4400 /cmp ebx, 00442A23
00401678 |. |75 08 |jnz short 00401682
0040167A |. |81FF 232A4400 |cmp edi, 00442A23
ahora bien se que es dificil cumplir el salto pero es claro lo que se debe lograr
debemos o debes lograr que el valor de EDX y EDI sean 442A23
ahora bien que influye en todo esto pues el saber que los valores tomados
siguen un cierto orden
004016A9 |> \83EB 01 |sub ebx, 1 ; Case 0 of switch 0040169D
004016AC |. EB 0D |jmp short 004016BB
004016AE |> 83EB 1A |sub ebx, 1A ; Case 1 of switch 0040169D
004016B1 |. EB 08 |jmp short 004016BB
004016B3 |> 83C3 01 |add ebx, 1 ; Case 3 of switch 0040169D
004016B6 |. EB 03 |jmp short 004016BB
004016B8 |> 83C3 1A |add ebx, 1A ; Case 2 of switch 0040169D
004016BB |> C1EE 02 |shr esi, 2 ; Default case of switch 0040169D
004016BE |. 83FE 03 |cmp esi, 3 ; Switch (cases 0..3)
004016C1 |. 77 22 |ja short 004016E5
004016C3 |. FF24B5 241740>|jmp dword ptr [esi*4+401724]
004016CA |> 83EF 01 |sub edi, 1 ; Case 0 of switch 004016BE
004016CD |. 83C5 01 |add ebp, 1004016D0 |.^ EB A0 |jmp short 00401672
004016D2 |> 83EF 1A |sub edi, 1A ; Case 1 of switch 004016BE
004016D5 |. 83C5 01 |add ebp, 1004016D8 |.^ EB 98 |jmp short 00401672
004016DA |> 83C7 01 |add edi, 1 ; Case 3 of switch 004016BE
004016DD |. 83C5 01 |add ebp, 1004016E0 |.^ EB 90 |jmp short 00401672
004016E2 |> 83C7 1A |add edi, 1A ; Case 2 of switch 004016BE
ahora bien hacer pasar las letras es un poco complejo , pero para que tengas una idea de pasar 10 letras a un estilo poco comun mira un poco
intenta este serial como base
ADFJCOBNMC
luego le vas incrementando y viendo los valores
llegara la deduccion que esto es un calculo matematico que suma y resta, y es esa suma y resta la que falta resolver
ahora vemos los cases y vemos nuestro serial (el orden de los cases)
00301112202310130320
ceros=7
unos =5
dos=4
tres=4
solo deberian ser pares al parecer o algo asi
claramente este es impar
hay otros que son como
y en comparacion a
ADFJCOBNMC
se puede agregar mas letras para las pruebas
pero igual debe ser de preferencia par, para la verificacion
aparte que sean con esas letras ahi condiciona que sean en forma mEDIA EXTRAÑA
me explico
1 4 6 12
1+1=2 mas el resultado obtenido
4 +resultado anterior=6
6+resultado anterior (4)= 12
Y PASA A ser mas o menos valido el valor
ahora bien
letras como en forma par pueden ir enlazandose de a poco para jugar a las matematicas
AD
MC
FK
CO
BN
ahora en esa misma tematica, esos valores o numeros
de suma o resta deben ser exactos para que de el resultado
eso que dicen los case no es al azar y debe tener su logica
pues cuando es invalido
pues los valores no son tomados todos
ejemplo
004016D5 |. 83C5 01 |add ebp, 1 ->la letra es tomada
por lo ideal creo que deberia pasar lo menos por los add, en especial por los add 1A
eso es lo que creo
saludos me voy a dormir..espero sirva esto poco para que puedas continuar con algun analisis
pues solo una combinacion grande de 0(resta) 2(suna)= valor que queremos
pues sera la solucion para terminar
pd:si no hubiera tenido la condiciones quizas hubiese sido mas facil
ahora bien como otro dato
004016DA 83C7 01 add edi, 1
este valor da una zona normalmente descuadrada osea es indice que los pares aun no estan bien calculados
o bien aun no existe el patron normal
creo que tiene que ver con alguna matematica o formula muy bien pensada
pero como es tan corto el tiempo que tomo en verlo, pues solo intente unos pocos dedoforce..
asi que si se logra programar un bruteforce con pares de letras en vez de letras, en un momento quizas seria posible llegar a la solucion
no se me ocurre aun el bruteforce pero deberia ser de a par..
acabo de bajarme el pdf
y claramente sale tu solucion pero para 36 letras
intenta
saludos Apuromafo
ahora bien el calculo deberia ser de a par, pero nimporta
demosle segun el calculo
?4429D1+52 ->valor final para EBX
52= 82 en decimal
para EDI
?00442A5F-3C->valor final para EDI
-3C =-60
osea deben ser minimo 10 menos 10
osea -10 -10 -10 -10 -10 -10
o sea -a-a-a-a-a-a para EDI
recuerda que el 0a=10
por lo tanto sacar un 82 minimo debe ser
10+10+10+10+10+10+10+10+1+1
y lo otro puede ser neutro
ahora bien seria
+a+a+a+a+a+a+a+a+a+a1+1 ->minimo de serial para EBX=10
y lo otro seria un neutro
con esto podria ser un serial de 20 letras como minimo
saludos e intenta con los pares validos para ver que valor indexan, o suma o resta ahora bien como se que es dificil en el comentario tambien esta para recordar que hace
amm importante que la posicion por el OR no es igual para las mismas letras
pero son tomadas en pares..insisto de a par se puede hacer una tabla en cada posicion (10 posiciones diferentes ) osea 10 tablas
y se tendrian todos los casos validos en caso de
como serial correcto quizas con 1 tabla y basta, pero uno siempre piensa en keygen-
pero como tu dominas mas el tema si suma o baja edx o ebx es solo esa parte de que no querias calcular-- aun como para seguir avanzando
quizas con estos datos ya lo resuelve alguien que este interesado
como para hacer una tabla mas decente, pero de por hecho yo creo que ya con 20 de serial debe ser posible de resolver
se que tu lo haces matematicamente y con sumas y todo
quizas esos 20 puede haber una suma y resta a la misma vez, haciendolo mas pequeño el serial realmente , porque realmente pasa por el 1ero y despues por el segundo por lo tanto el minimo seria 10 LETRAS..lo MAS PROBABLE
ahora bien mirando el tema para que sea mas facil pues como comentario
0040169D |. 83FA 03 |cmp edx, 3 ; definicion de los proximos casos; Switch (cases 0..3)
004016A0 |. 77 19 |ja short 004016BB
004016A2 |. FF2495 141740>|jmp dword ptr [edx*4+401714]
004016A9 |> 83EB 01 |sub ebx, 1 ; case 0 desde 40169D ->acaba de RESTAR 1 en EBX; Case 0 of switch 0040169D
004016AC |. EB 0D |jmp short 004016BB
004016AE |> 83EB 1A |sub ebx, 1A ; case 1 de 40169d ->acaba de restar 10 en EBX; Case 1 of switch 0040169D
004016B1 |. EB 08 |jmp short 004016BB
004016B3 |> 83C3 01 |add ebx, 1 ; caso 3 de 40169d->acaba de Sumar 1 en EBX; Case 3 of switch 0040169D
004016B6 |. EB 03 |jmp short 004016BB
004016B8 |> 83C3 1A |add ebx, 1A ; caso 2 de 40169d ->acaba de sumar 10 en EBX; Case 2 of switch 0040169D
004016BB |> C1EE 02 |shr esi, 2 ; shr esi con 2 ; Default case of switch 0040169D
004016BE |. 83FE 03 |cmp esi, 3 ; definicion de los proximos casos; Switch (cases 0..3)
004016C1 |. 77 22 |ja short 004016E5
004016C3 |. FF24B5 241740>|jmp dword ptr [esi*4+401724]
004016CA |> 83EF 01 |sub edi, 1 ; RESTA 1 en EDI; Case 0 of switch 004016BE
004016CD |. 83C5 01 |add ebp, 1
004016D0 |.^ EB A0 |jmp short 00401672
004016D2 |> 83EF 1A |sub edi, 1A ; RESTA 10 en EDI; Case 1 of switch 004016BE
004016D5 |. 83C5 01 |add ebp, 1
004016D8 |.^ EB 98 |jmp short 00401672
004016DA |> 83C7 01 |add edi, 1 ; SUMA 1 en EDI; Case 3 of switch 004016BE
004016DD |. 83C5 01 |add ebp, 1
004016E0 |.^ EB 90 |jmp short 00401672
004016E2 |> 83C7 1A |add edi, 1A ; SUMA 10 a EDI; Case 2 of switch 004016BE
004016E5 |> 83C5 01 |add ebp, 1 ; EBP CONTADOR; Default case of switch 004016BE
004016E8 |.^ EB 88 \jmp short 00401672
y eso de los valores de 00 30 00 30 20 como guiandose en los cases, y los pares son para el segundo puntero y el primero
osea uno para guiarse con EBX y otro para EDI
asi que mucho animo y comienza buscando pares de letras con 16 minimo y quizas en 1 dia ya lo tengas listo
solo basta darse un tiempo y terminar de a par saber cuando suma en el primero y cuanto resta en el segundo para cada par de letras
y evitar ir letra a letra..aunque se que es mas facil aveces esas tablas son bien factibles de enseñar a trabajar..
saludos Apuromafo
pero teniendo una tabla par si suma o resta de forma que sepa si suma o resta, pues ahi creo realmente que se puede dar una coalision con un serial correcto en menos tiempo
antes de jugar con todo , pues baste tener tiempo libre
buenisimo analisis de los registros, supongo que ya estas dominando temas de maquinas virtuales, si no te animo a que las veas pues es similar a esos calculos de posibilidades..
bueno saludos y espero este mini dato a=10 puede que te sirva a llegar al valor un poco mas rapido
Saludos Apuromafo
no creo que sea por el graan serial
sino por la ruta real que lo determina esto
00401689 |. 8A0F |mov cl, byte ptr [edi]
0040168B |. 0A0B |or cl, byte ptr [ebx]
0040168D |. F6C1 04 |test cl, 4
pues es parte de la condicion anterior de los xor 4 y todo eso..
esta es la linea que limita aun mas las rutas y aun sigo viendo si
8 veces las letras EDX
“C”,“G”, “K” ó “O”;
2 veces el caso 3
EDX será 3 con las letras
“D”, “H”, “L”, ó “P”.
6veces el caso 1
ESI=1 con las letras “E”, “F”, “G”, ó “H”;
tendriamos el subconjunto de letras
CDEFGHKLOP
teniendo un bruteforce de el subconjunto de estas letras, quizas sea posible dar cercano al momento algun serial valido
respetando las condiciones
aunque insisto el analisis que hiciste fue de 1 byte y para resolverlo minimo debe ser de a par porque tendras el serial valido quizas
ahora bien nopeando el lugar dificil solo daria una aproximacion para el serial pero estaria descuadrado, por lo tanto debe ser en PAREs de letras segun tu tutorial
la primera parte para los EDX
edx=0 de 004016BB
resta 1 en EBX
letras “A”, “E”, “I”, ó “M”;
edx=1 de 004016BB
resta 1A
letras “B”, “F”, “J” ó “N”;
EDX=2 de 004016BB
suma 1A
letras “C”,“G”, “K” ó “O”;
EDX=3 de 004016BB
suma 1 EDX
será 3 con las letras “D”, “H”, “L”, ó “P”
y la SEGUNDA PARTE DE LOS ESI
ESI=0 de 004016BE
RESTA 1 en EDI;
letras “A”, “B”, “C”, ó“D”;
ESI=1
RESTA 10 en EDI
letras “E”, “F”, “G”, ó “H”
ESI=2
SUMA 1 en EDI
letras “I”, “J”, “K”, ó “L”;
y ESI=3
SUMA 10 a EDI
letras “M”, “N”, “O”, ó “P”.
igual podrias postear tu serial de 36
pd: te aseguro que te ira bien, porque si con estas cosas son una buena forma de entender adonde apunta la pila
bueno dejo eso a mano por si alguien no lee el link
solo falta matematicas exactas de poder calcular el serial y que cumpla con la condicion de
00401689 |. 8A0F |mov cl, byte ptr [edi]
0040168B |. 0A0B |or cl, byte ptr [ebx]
0040168D |. F6C1 04 |test cl, 4
pues no basta con tener el valor correcto supuesto, si no pasara por la ruta
por eso los valores de a 2 son una buena forma de practicar con los valores o pares de valores y poder seguir la ruta sin problemas de estar peleando o volver al valor anterior
saludos Apuromafo ,voy a dormir, creo que gaste mucho tiempo pensando en posibles bf sin llegar a nada en concreto
pero si como dato
004016EC |. /EB 02 jmp short 004016F0
004016EE 6A 00 push 0
eso podria ir a injertarse para verificar cuanto falta en EBX y en EDI
]004016EE
-me acabo de levantar para hacer mis cosas y para avanzar un poco un mini analisis
para la palabra
ADFJCOBNMC
para EBX par AD
resta 1
suma 1
par FJ
resta 1A
resta 1A
par CO
suma 2A
suma 2A
par BN
resta 1A
resta 1A
par MC
resta 1
suma 1A
-----------------
creo que se entiende la idea de que estoy haciendo
pff luego de lograr una tabla claramente llego a lo que paso susanalic..
no sirve anotar de a pares lo que importa es la ruta
pero igual llego al mismo pensamiento que es dificil hacer una ruta pequeña
se que hiciste eso
pero para esas letras sean validas en la ruta igual demanda algo mas
saltos posibles son: +1, +1A, -1 ó -1A (+1, -1, +26 ó -26).
+1+1A+1A+1A -> quizas hubiese alguna variante..