- UID
- 20229
注册时间2006-8-10
阅读权限20
最后登录1970-1-1
以武会友
![Rank: 3](template/lewei_blue/images/star_level2.gif) ![Rank: 3](template/lewei_blue/images/star_level1.gif)
该用户从未签到
|
【破文标题】【WAKU申请加入破文2】EscapeClose Pro 2.0注册算法分析
【破文作者】WAKU
【作者邮箱】[email protected]
【作者主页】
【破解工具】PEID OD
【破解平台】XP SP2
【软件名称】EscapeClose Pro 2.0
【软件大小】
【原版下载http://orsoon.com/Software/Catalog175/3836.html
【保护方式】无
【软件简介】一个可以快速关闭窗口的软件,还有隐藏等其他功能,比较有创意
------------------------------------------------------------------------
在未来软件园看到这个软件,软件挺有意思,不过要求注册,14.95美元啊~~~于是俺起了邪念,嘿嘿.
用PEID查,无壳(不知道是不是在未来下的已经脱掉了,不管它),VC7编写.OD载入,查找字符串"错误的注册码",双击,然后再往上翻翻,来到大致这个地方:
00402428 . 51 push ecx ; /pBufSize
00402429 . 68 60894000 push 00408960 ; |Buffer = EscapeCl.00408960
0040242E . 8D5424 18 lea edx, [esp+18] ; |
00402432 . 52 push edx ; |pValueType
00402433 . 6A 00 push 0 ; |Reserved = NULL
00402435 . 68 D0724000 push 004072D0 ; |Name
0040243A . 50 push eax ; |hKey
0040243B . FFD6 call esi ; \RegQueryValueExA
0040243D . 8B5424 78 mov edx, [esp+78]
00402441 . 8D4424 0C lea eax, [esp+C]
00402445 . 50 push eax ; /pBufSize
00402446 . 68 84894000 push 00408984 ; |1234
0040244B . 8D4C24 18 lea ecx, [esp+18] ; |
0040244F . 51 push ecx ; |pValueType
00402450 . 6A 00 push 0 ; |Reserved = NULL
00402452 . 68 C8724000 push 004072C8 ; |Code
00402457 . 52 push edx ; |hKey
00402458 . 897C24 24 mov [esp+24], edi ; |
0040245C . FFD6 call esi ; \RegQueryValueExA
0040245E . 8B4424 78 mov eax, [esp+78]
00402462 . 50 push eax
00402463 . FFD3 call ebx
00402465 > 68 60894000 push 00408960 ; 用户名压栈
0040246A . C605 18894000>mov byte ptr [408918], 0
00402471 . C605 F4884000>mov byte ptr [4088F4], 0
00402478 . C605 D0884000>mov byte ptr [4088D0], 0
0040247F . C605 AC884000>mov byte ptr [4088AC], 0
00402486 . C605 88884000>mov byte ptr [408888], 0
0040248D . E8 5EF3FFFF call 004017F0
程序不管三七二十一先把你输入的用户名和注册码写入注册表,然后再读出来验证(它也不嫌麻烦).最后一个CALL跟进看看,看到了这些字符串和函数:
Microsoft Base Cryptographic Provider v1.0
CALL ADVAPI32.CryptCreateHash
......
不用说,调用了加密函数库.不过可不是简单的把用户名直接加密,要注意以下代码:
0040191C |. 8BE8 mov ebp, eax
0040191E |. 83C4 04 add esp, 4
00401921 |. 3BEB cmp ebp, ebx
00401923 |. 0F84 1B030000 je 00401C44
00401929 |. B8 60894000 mov eax, 00408960
0040192E |. 8D50 01 lea edx, [eax+1]
00401931 |> 8A08 /mov cl, [eax]
00401933 |. 40 |inc eax
00401934 |. 3ACB |cmp cl, bl
00401936 |.^ 75 F9 \jnz short 00401931
00401938 |. 2BC2 sub eax, edx
0040193A |. 8BD0 mov edx, eax
0040193C |. 8BC3 mov eax, ebx
0040193E |. 74 10 je short 00401950
00401940 |> 8AC8 /mov cl, al
00401942 |. 80C1 0F |add cl, 0F
00401945 |. 0088 60894000 |add [eax+408960], cl ; 用户名+cl
0040194B |. 40 |inc eax
0040194C |. 3BC2 |cmp eax, edx
0040194E |.^ 72 F0 \jb short 00401940
00401950 |> 83FA 0A cmp edx, 0A
00401953 |. 7D 20 jge short 00401975 ; 用户名长度大于等于10位则跳
00401955 |. B9 0A000000 mov ecx, 0A
0040195A |. 2BCA sub ecx, edx ; 10-用户名长度
0040195C |. 8DBA 60894000 lea edi, [edx+408960]
00401962 |. 8BD1 mov edx, ecx
00401964 |. C1E9 02 shr ecx, 2
00401967 |. B8 61616161 mov eax, 61616161
0040196C |. F3:AB rep stos dword ptr es:[edi] ; 在用户名后面补61616161(双字型)
0040196E |. 8BCA mov ecx, edx
00401970 |. 83E1 03 and ecx, 3
00401973 |. F3:AA rep stos byte ptr es:[edi] ; 在用户名后面补61(字节型)
00401975 |> 8B0D 60894000 mov ecx, [408960]
0040197B |. 881D 6A894000 mov [40896A], bl
00401981 |. 8BC5 mov eax, ebp
00401983 |. 8908 mov [eax], ecx
00401985 |. 8B15 64894000 mov edx, [408964]
0040198B |. 8950 04 mov [eax+4], edx
0040198E |. 66:8B0D 68894>mov cx, [408968]
00401995 |. 66:8948 08 mov [eax+8], cx
00401999 |. 8A15 6A894000 mov dl, [40896A]
在"变换用户名"处,第i位用户名会加上i+0xF.而之后会把用户名用61(就是小写a)补足到10位.然后才成为了要加密的数据.经过加密后转换成字符串就是注册码了.
之后有很大一段代码用于比较注册码是不是在黑名单里,就不用理会了.
这样比如用户名为waku,经过转换后为"唓|嘺aaaaa",再经过加密后就得到注册码A2521AFCC23CDA23F465了.
但要注意的是加密算法好像并不标准,输入和输出的都是80位.但这并不妨碍我们理解程序.注册码会出现在内存中,所以内存注册机很好做.真要自己做注册机也可以,根据反汇编后调用加密函数的参数,我们可以知道CryptCreateHash的ALG_ID为0x8003,CryptDeriveKey的ALG_ID为0x6801,总之所有参数应该与反汇编出来的一致(好像是废话),我自己就做了一个注册机,这里就不提供了
完.
------------------------------------------------------------------------
------------------------------------------------------------------------
【版权声明】本文原创于PYG论坛,转载请注明作者并保持文章的完整, 谢谢! |
|