一位名为Arkantos的作者,在Crackmes.cf(Crackme.de的镜像站点)站点上提交了一个Crackme,难度级别为1-very_easy_for_newbies。这种入门级别的Crackme其实不足以写博客,只是它的逆向过程正好可以用Process Monitor来完成,写这篇文章就当做Process Monitor的一个实例吧。
作者信誓旦旦的说该crackmes没有加壳,然而,拖进IDA后发现带了UPX壳,于是用DIE查壳确认一下,果然带了UPX壳!作者真是明目张胆的...我们来看下脱壳后怎么分析这个Crackme。
把脱壳后的crackmes拖进IDA,映入眼帘的就是start函数中调用了若干文件操作的API:
这个级别的CM,遇到文件操作,很可能是在tmp目录下生成并运行bat文件,最终序列号的验证也由bat文件完成。既然这样,只要观察CM的行为,应该能获得bat文件,于是,我运行ProcMon并设置如下过滤器,然后开始监视CM的运行过程:
这个级别的CM少有网络/注册表操作所以,在ProcMon窗口中把这两个监测项反选以减少输出:
我猜测这个CM会生成bat文件,所以,在文件操作中更应该关注程序调用CreateFile的行为,因此在Operation中选中一个事件,右键,在弹出的菜单中选择保留CreateFile而过滤其他文件操作:
哼哼,输出窗口顿时清爽了很多!浏览输出,大多数是为了加载必要的系统dll做的文件打开操作,唯独有一项特别刺眼,在%TMP%目录下生成了名为b2e.exe的文件!嗯,在Path列下,选中b2e.exe事件所在行,右键菜单----"jump to"定位到b2e.exe所在的路径,准备分析该文件。
难道这个CM是通过exe来验证序列号?不过,既然我都在监测程序的行为了,那就顺带把这个新生成的程序的行为一起监测了。重新设置过滤器,然后运行b2e.exe,仍然检测程序的CreateFile行为,得到下列输出:
果然,真的在%TMP%目录下创建bat文件,再次右键菜单--"jump to",定位到该bat文件:
查看bat的内容,的确和屏幕上的输出一致
@echo off
echo off
color 4
title Crackme2.exe
cls
:Main3
set a=e@s\/
set b=h@rd
set c=57f8s+-
set d=1a2f5-+
set e=oneld-561-fc
set as=12as5789w
set ad=123fa4v5bw
set aj=51236fs4578951235
set ja=1as23fa4
set na=6n6o8t4h4i6n4g
cls
ECHO ...............................................
ECHO Please enter your username
echo To crack This Rubbish Enter Five Serials..
ECHO ...............................................
ECHO.
set /p u=Type your username here:
if u==' goto pass
goto pass
:pass:
echo.
echo.
echo.
set /p P=Type your First password here:
if %P%==%u%%c%%a% goto second
if %p%==%u%%d%%a% goto second
goto no
:second
echo.
echo.
echo.
set /p Q=Type your Serial here:
if %Q%==%p%%e%%b% goto last
if %Q%==%p%%as%%b% goto last
goto no2
echo.
echo.
echo.
:last
echo.
echo.
echo.
set /p R=Type your Reg Code here:
if %R%==%u%%ad%%b% goto four
if %R%==%p%%aj% goto four
if %R%==%p%%ja%%a% goto four
goto NO3
:four
echo.
echo.
echo.
set /p F=Type Fourth Code Here:
if %F%==%b%%a%%na%%p% goto five
if %F%==%u%+-%p%-+%r% goto five
if %F%==%a%%p%%b% goto five
goto no4
:five
echo.
echo.
echo.
set /p T=Type Last password here:
if %T%==%u%%p%%b%%q% goto yes
if %T%==%p%%F%%a%%b% goto yes
goto no4
echo.
echo.
echo.
:yes
echo Hi %u% Congratulation!!! you've beaten my Second crackme
pause
exit
echo.
echo.
echo.
:no
echo No, wrong Pass Please try again later...
pause
goto main3
:no2
echo No ,wrong Serial. Try again....
pause
goto main3
:no3
echo nope, wrong Reg Code. Try again Later...
pause
goto main3
:no4
echo No man!!! It's Wrong???
pause
goto main3
嗯,接下来的工作不难了,我就略过了~