-
-
[原创]Crackme(C#编译,重启验证)(初级+) 算法简析
-
发表于:
2007-3-2 19:18
5401
-
[原创]Crackme(C#编译,重启验证)(初级+) 算法简析
【文章标题】: Crackme(C#编译,重启验证)(初级+) 算法简析
【文章作者】: hawking
【作者邮箱】: rich_hawking@hotmail.com
【作者主页】: inraining
【软件名称】: crackme1.exe
【软件大小】: 40.0k
【下载地址】: http://bbs.pediy.com/showthread.php?s=&threadid=32317&perpage=10&highlight=&pagenumber=1
【加壳方式】: MaxtoCode试用版
【保护方式】: 重启验证
【编写语言】: C#
【使用工具】: OD、PEiD
【操作平台】: 2k
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
这个Crackme其实发布已经有一段时间了,不过一直运行不起来,所以就没加理会。现在发现之所以运行不起来,是因为用了MaxtoCode试用版加密的原因,因为是试用版,可能加了时间限制吧。Crackme发布没多久就过期了,所以打不开。调试的时候不得不将时间往前调了调(好像要在2006年10月以前)就OK了。
1 寻找关键代码
由于是C#程序,所以用Reflector打开看看。可惜由于用了MaxtoCode加过密了,所有的方法体都是空的。我们看看crackme程序本身,可以发现SoftWare\Crackme\No1\CrackmeInfo 及 UserName、Serial字样,并且程序本身是重启验证的,而我们随便输入用户名及密码之后程序所在的目录并没能生成新的文件,由此可初步判定验证信息是存放在注册表中的。
OD载入程序,下RegQueryValueExW断点(.net程序调用Win32API好像都是Unicode方式),并且对取到的UserName及Password值下硬件访问断点,就可以顺利跟踪到下面的关键代码段。
2 算法简析
039B5D23 55 push ebp
039B5D24 83EC 1C sub esp, 1C
039B5D27 33C0 xor eax, eax
039B5D29 894424 04 mov dword ptr [esp+4], eax
039B5D2D 33D2 xor edx, edx
039B5D2F A1 D41EC401 mov eax, dword ptr [1C41ED4] ;UserName 值取自HKEY_LOCAL_MACHINE\SOFTWARE\Crackme\No1\CrackmeInfo username
039B5D34 8378 08 00 cmp dword ptr [eax+8], 0
039B5D38 0F8E 15020000 jle 039B5F53
039B5D3E A1 D01EC401 mov eax, dword ptr [1C41ED0] ;Password 值取自HKEY_LOCAL_MACHINE\SOFTWARE\Crackme\No1\CrackmeInfo serial
039B5D43 8378 08 00 cmp dword ptr [eax+8], 0
039B5D47 0F8E 06020000 jle 039B5F53
039B5D4D 8B1D 9830C401 mov ebx, dword ptr [1C43098]
039B5D53 8B05 9C30C401 mov eax, dword ptr [1C4309C]
039B5D59 894424 18 mov dword ptr [esp+18], eax
039B5D5D 33ED xor ebp, ebp
039B5D5F 8B0D D41EC401 mov ecx, dword ptr [1C41ED4]
039B5D65 33D2 xor edx, edx
039B5D67 8B71 08 mov esi, dword ptr [ecx+8]
039B5D6A 85F6 test esi, esi
039B5D6C 7E 0C jle short 039B5D7A
039B5D6E 0FB74451 0C movzx eax, word ptr [ecx+edx*2+C]
039B5D73 03E8 add ebp, eax
039B5D75 42 inc edx
039B5D76 3BF2 cmp esi, edx
039B5D78 ^ 7F F4 jg short 039B5D6E
[color=#0000D0]for[/color] ( [color=#0000D0]int[/color] i = 0 ; i < sUserName.Length ; i++)
{
sumName += buffer[2*i] + buffer[2*i+1] * 0x100 ;
}
[color=#0000D0]for[/color] ( [color=#0000D0]int[/color] i = 0 ; i < 0x14 ; i++ )
{
temp = (sumName + temp) % table1.Length ;
result[i] = table1[temp] ;
}
[color=#0000D0]for[/color] ( [color=#0000D0]int[/color] i = 0 ; i < 0x14 ; i++ )
{
temp = (table3[i] * result[i]) % table2.Length ;
result[i] = table2[temp];
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课