找回密码
 注册
搜索
热搜: 回贴

Tray.Commander.v2.3 注册算法分析,算法,加密算法

2010-1-22 18:38| 发布者: admin| 查看: 106| 评论: 0|原作者: 韩菱纱


Tray.Commander.v2.3 注册算法分析,算法,加密算法
2008年06月23日 星期一 下午 12:19
【破解作者】 隐者无疆[BCG]

【使用工具】 Peid,OD

【破解平台】 Win XP SP2

【软件名称】 Tray.Commander.v2.3

【下载地址】 http://www.ardamax.com

【软件简介】

Tray Commander is a tray launcher that lets you gain quick access to your most frequently used applications

and system commands via a customizable menu. Not only can you open applications and files, but also

launch screen savers, shutdown, reboot your computer and much more, all from the system tray!

【软件大小】 912kb

【加壳方式】 ACProtectV1.3X-1.4XDLL->risco *

【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)

--------------------------------------------------------------------------------

【破解内容】





1.Peid 侦壳,显示"ACProtectV1.3X-1.4XDLL->risco *"。这里直接带壳调试

2.OD载入,用IsDebugPresent插件隐藏调试器标志。F9运行

在所有调用"GetWindowTextA"处下断点; 输入下列内容进行试注册。

Registration Name:abcde

Registration Key :123456789

程序在431749处被断下,取消断点。F8单步运行,返回上一层调用。

察看寄存器窗口可知,前面这个Call (Call 431725)的作用是获得输入的Name;紧接着下面还有一个相同的Call,

猜测它的作用是获得输入的Key。F8单步运行至41b7ad,察看寄存器窗口,可以看到我们输入的Key,这就证明了我

们的猜测。

下面的一段代码检验输入的Name和Key是否为空,F4运行到41b7fa。

F8单步运行到41b838,看到我们前面输入的Name和Key全部被压入栈中。F7跟进。

3.运行到40464的时候,可以看到栈中压入了两个字符串,其中一个为我们输入的Key,另外一个则很像是真实的注

册码。事实证明我们的猜测是正确的。

4.在前面的404b52处下断,重新注册。被断在404b52。F7跟进

将此Call中的反汇编代码贴出如下

00403190 /$Content$nbsp; push ecx ; TC.00489190

00403191 |. push ebx

00403192 |. push esi

00403193 |. push edi

00403194 |. mov edi,dword ptr ds:[<&KERNEL32.lstrlenA>] ; kernel32.lstrlenA

0040319A |. push TC.0046AF88 ; /String = "5391026E7F829842"

0040319F |. call edi ; \lstrlenA

004031A1 |. mov esi,eax ; eax =0x10

004031A3 |. mov eax,dword ptr ss:[esp 14]

004031A7 |. push eax ; /String

004031A8 |. mov dword ptr ss:[esp 10],esi ; |

004031AC |. call edi ; \lstrlenA

004031AE |. mov ebx,eax

004031B0 |. test ebx,ebx

004031B2 |. jnz short TC.004031C1

004031B4 |. mov ecx,dword ptr ss:[esp 18]

004031B8 |. pop edi

004031B9 |. pop esi

004031BA |. mov byte ptr ds:[ecx],al

004031BC |. pop ebx

004031BD |. pop ecx

004031BE |. retn 8

004031C1 |> mov edi,dword ptr ss:[esp 18]

004031C5 |. push TC.0046AF88 ; /String2 = "5391026E7F829842"

004031CA |. push edi ; |String1

004031CB |. call dword ptr ds:[<&KERNEL32.lstrcpyA>] ; \lstrcpyA

004031D1 |. cmp ebx,esi

004031D3 |. jle short TC.004031DD

004031D5 |. mov eax,ebx

004031D7 |. mov dword ptr ss:[esp 18],eax

004031DB |. jmp short TC.004031E3

004031DD |> mov eax,esi

004031DF |. mov dword ptr ss:[esp 18],esi

004031E3 |> xor ecx,ecx ; ecx = index

004031E5 |. test eax,eax

004031E7 |. jle short TC.00403226

004031E9 |. push ebp

004031EA |. jmp short TC.004031F4

004031EC | lea esp,dword ptr ss:[esp]

004031F0 |> mov esi,dword ptr ss:[esp 10] ; esi <= len of STR

004031F4 |> mov eax,ecx

004031F6 |. cdq

004031F7 |. idiv esi ; 0x10 ;len of STR

004031F9 |. mov eax,ecx ; store index ;edx!

004031FB |. mov ebp,19

00403200 |. add ecx,1 ; index

00403203 |. mov esi,edx ; esi <= edx!

00403205 |. cdq

00403206 |. idiv ebx ; ebx = 5 注册名的长度

00403208 |. mov eax,dword ptr ss:[esp 18] ; eax <= name ;edx!

0040320C |. movsx eax,byte ptr ds:[edx eax]

00403210 |. movsx edx,byte ptr ds:[esi edi] ; edi == STR

00403214 |. xor eax,edx

00403216 |. cdq

00403217 |. idiv ebp ; ebp = 0x19 所有大写字母的数目

00403219 |. add dl,41

0040321C |. cmp ecx,dword ptr ss:[esp 1C]

00403220 |. mov byte ptr ds:[esi edi],dl

00403223 |.^ jl short TC.004031F0

00403225 |. pop ebp

00403226 |> pop edi

00403227 |. pop esi

00403228 |. pop ebx

00403229 |. pop ecx

0040322A \. retn 8



5.上面已经写出了简要的注释。下面总结注册算法如下:

char str[]="5391026E7F829842";

char name[]=输入的Name

char key[20]

int strlen=0x10; //str字符串的长度

int namelen=输入的Name的长度

int i; //index

for(i=0;i< 0x10;i )

{

key[i]=( (name[i%namelen]^str[i%strlen]) % 0x19 ) 0x41;

}

key[i]=0;




最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 03:19 , Processed in 0.233931 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部