Crackme in batch

Iniciado por carlitos.dll, 6 Julio 2008, 13:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Crazy.sx

Cita de: kraszic en 28 Julio 2008, 13:24 PM
mmm, no se como lo has hecho..  :xD
El crackme es en batch o otro lengaje??



---------------------------------------------------------------------------------
PD: Estaba repasando el post, y le encontre una inyeccion al primer code de smartgenius, probad este pass:
& goto be

Es otro lenguaje ;). Muy buen crackme carlitos.dll, solo que no es lo que todos creen que es.

Pero muy bueno. Y eso que no esta "empaquetado" de ninguna manera :P ;D

Mmm, aunque todavia sigo intentando leer el codigo, si es que vos decis que se puede...

Saludos che
Destruir K. LOL

carlitos.dll

#51
Agradezcan que no les reemplaze las lineas que decían gcc con un editor hexadecimal. :D
Si no estarían con la gran duda.

kraszic

xDD
Yo cuando vi el archivo empece a buscar un monton de infomacion de como lo podias haber hecho y al final llegue a la conclusion de q no podia ser batch.

Bueno, a ver si alguien se anima y postea un "crackme" nuevo.
Por cierto, el mio de momento solo se q lo ha resolvido carlitos, a ver si puede mas gente.

Vi en otro foro un code de crackme de smartgenius q me encanto, a ver si lo postea tambien.

saludos

carlitos.dll

#53
Listo, este crackme va dedicado a quienes les gusta mirar el código fuente. Es más fácil que el anterior, pues pueden mirar el código fuente :D


::Crackme 04 CarlitoS.dll
::no importa que miren el fuente :D

@echo off
setlocal enabledelayedexpansion
title Error de teclado... presione F1 para continuar :D

:Login
set pass=
set /p pass=Enter password:
if not defined pass (goto Login)

for %%a in ("|" "&" "^" ">" "<" "'" "`" "." ";" "," " " "/" "\" "+" "-" "~" "!" ")" "(" "]" "[" "{" "}") do (
set pass|find %%a >NUL && goto warning)
for %%a in ("if" "else" "goto" "echo" "rem" "start" "set" "doskey" "pause" "cmd" "command") do (
set pass|find %%a >NUL && goto warning)
set pass=%pass:"=_%
::echo off

if not [{98974876}]==[{%pass:~-8%}] (call :job) 2>NUL
if "%errorlevel%"=="9009" (goto warning)
call :job
if not [{98974876}]==[{%pass%}] (goto mal) 2>NUL

echo Muy bien.
echo Pronto, mas y mejor.
echo Codeado por CarlitoS.dll
echo Visita http://carlitosdll.blogspot.com
pause>NUL
exit
goto :eof

:job
set dic=0123456789abcdefghijklmn@opqrstuvwxyz
for /l %%a in (0,1,37) do (
set /a d%%a="%%a << 7"
set /a d%%a+="365%325"
)
set /a res=0
set pass=%pass:98974876=%
call :contar %pass%
set limit=
set limit=![%pass%.length]!
for /l %%b in (0,1,%limit%) do (for /l %%c in (0,1,37) do (call :res %%b %%c))
set pass=
set pass=%res%
goto :eof

:warning
echo 
echo Posible intento de batch injection
echo.
goto Login

:contar
set palabra=%1
if defined palabra (call :length %palabra: =_%)
goto :eof

:length
set arg=%*
if not defined arg (goto :eof)
set word=%arg%
set /a cont=0
:loop
if not defined word (goto end)
set word=%word:~1%
set /a cont +=1
goto loop
:end
set [%arg: =_%.length]=%cont%
goto :eof

:res
set par1=%1
set par2=%2
set x=!pass:~%par1%,1%!
set z=!dic:~%par2%,1!
if "%x%"=="%z%" (call :res1 %par1% %par2%)
goto :eof
:res1
set /a sum="%2 + 3"
set num=!d%1%!
set /a mult="%num% * %sum%"
set /a res +=%mult%"
set /a res="%res%<<1"
goto :eof

:mal
echo Autentificacion incorrecta.
echo.
goto Login

carlitos.dll

#54
Modifiqué el post del reto 4, pues tenía un bug. Debí haber utilizado en un comienzo setlocal enabledelayedexpansion, pero ya lo corregí en el post original, y corregí todos los call set.
Espero que no se desanimen por esto, y que lo resuelvan como la gente :D

el bug estaba aquí:

call set limit=%%[%pass%.length]%%
for /l %%b in (0,1,%limit%) do (for /l %%c in (0,1,37) do (call :res %%b %%c))
set pass=
set pass=%res%
goto :eof

call set se confundía
Si tenía mi archivo crackme04.bat en el escritorio, y creaba un archivo llamado set.bat en el escritorio con el siguiente contenido:

set res=98974876
set limit=1) do rem (

el cmd.exe hacía esto:

call set
set res=98974876
set limit=1) do rem (
for /l %%b in (0,1,1) do rem () do (for /l %%c in (0,1,37) do (call :res %%b %%c))
set pass=
set pass=98974876
goto :eof



kraszic

Estoy mirando tu code y muy dificil de momento.. xD

A ver si me puedes explicar q son estas lineas o sino por mp, te lo agradeceria.

for /l %%a in (0,1,37) do (
set /a d%%a="%%a << 7"
set /a d%%a+="365%325"
)

Esta parte no la entiendo muy bien.

Y esta otra tampoco me queda clara:
set num=!d%1%!

saludos y buen code pa pensar un rato

Crazy.sx

Cita de: kraszic en  2 Agosto 2008, 00:37 AM
xDD
Yo cuando vi el archivo empece a buscar un monton de infomacion de como lo podias haber hecho y al final llegue a la conclusion de q no podia ser batch.

Bueno, a ver si alguien se anima y postea un "crackme" nuevo.
Por cierto, el mio de momento solo se q lo ha resolvido carlitos, a ver si puede mas gente.

Vi en otro foro un code de crackme de smartgenius q me encanto, a ver si lo postea tambien.

saludos

Yo simplemente me fije en la lista de procesos y vi que no estaba cmd.exe, ahi empecé a "Sospechar".

CitarListo, este crackme va dedicado a quienes les gusta mirar el código fuente. Es más fácil que el anterior, pues pueden mirar el código fuente

¿Como yo por ejemplo?  ;D. Pero es mas divertido hacerlo sin "trampas". Me divirto con estos jueguitos je ;)
Destruir K. LOL

carlitos.dll

#57
Cita de: kraszic en  2 Agosto 2008, 18:00 PM
Estoy mirando tu code y muy dificil de momento.. xD

A ver si me puedes explicar q son estas lineas o sino por mp, te lo agradeceria.

for /l %%a in (0,1,37) do (
set /a d%%a="%%a << 7"
set /a d%%a+="365%325"
)

Esta parte no la entiendo muy bien.

Y esta otra tampoco me queda clara:
set num=!d%1%!

saludos y buen code pa pensar un rato

ese código te crea variables d0 d1 ... hasta d37. con cierto contenido.
http://www.ss64.com/nt/set.html

set num=!d%1%!

eso asigna el contenido de una variable a num, ! es debido a setlocal enabledelayed expansion.
antes estaba así:
call set num=%%d%1%%

res1 recibe un parametro (%1), y segun ese numero, por ejemplo si recibe 10, asigna a la variable num el contenido de la variable d10

set num=!d%1%!
es lo mismo que:
set num=!d%1!


Es demoroso resolver este crackme, si te haces un generador de palabras puedes estar más de un día, ya lo resolví por fuerza bruta, y se demora :D

karmany

Cita de: carlitos.dll en 25 Julio 2008, 07:45 AM
Hiice un nuevo crackme para que se diviertan en los momentos de ocio. Es anti -bad injections.

http://wikisend.com/download/470810/crackme.rar



Lo he analizado desde el punto de vista de Ingeniería Inversa, y has sido un poco malévolo. Si no me equivoco lo has programado en Dev-C++ 4.9.9.2 (tal vez) y lo has hecho en consola simulando que lo habías programado en Batch. He visto que llamas a la función time y seguidamente haces unas pequeñas operaciones y te sale un número. Ese es el número de contraseña. Por eso difiere en cada ejecución.
Me ha parecido muy interesante.

Un saludo

kraszic

esta bastante dificil tu code, estuve un dia probando y no hubo manera, a ver si me pongo otra vez y consigo resolverlo.
Se me ocurrio tambien lo de la fuerza bruta pero no era un numero bajo y no era una buena idea.

saludos