首页
社区
课程
招聘
[原创]xxxxxx crackme算法分析
发表于: 2007-2-25 13:32 4334

[原创]xxxxxx crackme算法分析

2007-2-25 13:32
4334
【文章标题】: XXXXXX crackme算法分析
【文章作者】: the0crat
【作者邮箱】: the0crat.cn_at_gmail.com
【作者主页】: http://the0crat.spaces.live.com
【生产日期】: 20070225
【软件名称】: xxxxxx
【保护方式】: 注册码
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: IDA+OD
【作者声明】: 本文仅供研究学习,本人对因这篇文章而导致的一切后果,不承担任何法律责任。本文中的不足之处请各位多多指教
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
--------------------------------------------------------------------------------
【详细过程】

无壳。run trace,分析运行过的代码,最终定位到这里

004016E0 > .  6A FF         push    -1                               ;  sub_4016E0
004016E2   .  68 B0164200   push    <loc_4216B0>                     ;  SE handler installation
004016E7   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
004016ED   .  50            push    eax
004016EE   .  64:8925 00000>mov     dword ptr fs:[0], esp
004016F5   .  83EC 2C       sub     esp, 2C
004016F8   .  A1 D8C24200   mov     eax, dword ptr [42C2D8]
004016FD   .  55            push    ebp
004016FE   .  56            push    esi
004016FF   .  57            push    edi
00401700   .  8BF1          mov     esi, ecx
00401702   .  894424 0C     mov     dword ptr [esp+C], eax
00401706   .  C74424 40 000>mov     dword ptr [esp+40], 0
0040170E   .  894424 14     mov     dword ptr [esp+14], eax
00401712   .  8B0D 54C14200 mov     ecx, dword ptr [42C154]
00401718   .  A1 50C14200   mov     eax, dword ptr [42C150]
0040171D   .  8B15 58C14200 mov     edx, dword ptr [42C158]
00401723   .  894C24 28     mov     dword ptr [esp+28], ecx
00401727   .  8A0D 60C14200 mov     cl, byte ptr [42C160]
0040172D   .  894424 24     mov     dword ptr [esp+24], eax
00401731   .  A1 5CC14200   mov     eax, dword ptr [42C15C]
00401736   .  884C24 34     mov     byte ptr [esp+34], cl
0040173A   .  6A 01         push    1
0040173C   .  8BCE          mov     ecx, esi
0040173E   .  C64424 44 01  mov     byte ptr [esp+44], 1
00401743   .  895424 30     mov     dword ptr [esp+30], edx
00401747   .  894424 34     mov     dword ptr [esp+34], eax
0040174B   .  E8 F4890100   call    <sub_41A144>
00401750   .  8DBE 90000000 lea     edi, dword ptr [esi+90]
00401756   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
0040175A   .  57            push    edi
0040175B   .  E8 C2660100   call    <sub_417E22>                     ;  取用户名
00401760   .  8B17          mov     edx, dword ptr [edi]
00401762   .  8B6A F8       mov     ebp, dword ptr [edx-8]           ;  长度
00401765   .  85ED          test    ebp, ebp
00401767   .  0F84 F8000000 je      <loc_401865>
0040176D   .  83FD 08       cmp     ebp, 8
00401770   .  7D 0D         jge     short <loc_40177F>               ;  大于等于8则跳
00401772   .  68 44C14200   push    0042C144                         ;  prudence
00401777   .  55            push    ebp
00401778   .  8BCF          mov     ecx, edi
0040177A   .  E8 43420100   call    <sub_4159C2>
0040177F > >  55            push    ebp                              ;  loc_40177F
00401780   .  8BCF          mov     ecx, edi
00401782   .  E8 53670100   call    <sub_417EDA>
00401787   .  8D4C24 24     lea     ecx, dword ptr [esp+24]
0040178B   .  8D5424 1C     lea     edx, dword ptr [esp+1C]
0040178F   .  51            push    ecx
00401790   .  52            push    edx
00401791   .  50            push    eax
00401792   .  E8 B9FEFFFF   call    <off_423650>                     ;  跟进--------->

00401650 >/$  83EC 08       sub     esp, 8                           ;  off_423650
00401653  |.  8B5424 14     mov     edx, dword ptr [esp+14]
00401657  |.  8B4C24 0C     mov     ecx, dword ptr [esp+C]
0040165B  |.  53            push    ebx
0040165C  |.  55            push    ebp
0040165D  |.  56            push    esi
0040165E  |.  8B32          mov     esi, dword ptr [edx]
00401660  |.  8B01          mov     eax, dword ptr [ecx]
00401662  |.  8B49 04       mov     ecx, dword ptr [ecx+4]
00401665  |.  897424 18     mov     dword ptr [esp+18], esi
00401669  |.  8B72 04       mov     esi, dword ptr [edx+4]
0040166C  |.  897424 20     mov     dword ptr [esp+20], esi
00401670  |.  8B72 08       mov     esi, dword ptr [edx+8]
00401673  |.  8B52 0C       mov     edx, dword ptr [edx+C]
00401676  |.  897424 0C     mov     dword ptr [esp+C], esi
0040167A  |.  895424 10     mov     dword ptr [esp+10], edx
0040167E  |.  57            push    edi
0040167F  |.  33D2          xor     edx, edx                         ;  edx=0
00401681  |.  BE 20000000   mov     esi, 20
00401686 >|>  8B5C24 1C     /mov     ebx, dword ptr [esp+1C]         ;  "This"
0040168A  |.  8B6C24 24     |mov     ebp, dword ptr [esp+24]         ;  " is "
0040168E  |.  8BF9          |mov     edi, ecx
00401690  |.  33D9          |xor     ebx, ecx                        ;  ebx="This"^ecx[i]
00401692  |.  81EA 4786C861 |sub     edx, 61C88647                   ;  edx-=61c88647h
00401698  |.  03DD          |add     ebx, ebp                        ;  ebx+=" is "
0040169A  |.  C1EF 05       |shr     edi, 5
0040169D  |.  33FA          |xor     edi, edx                        ;  edi=(ecx[i]>>5)^edx
0040169F  |.  8BE9          |mov     ebp, ecx
004016A1  |.  C1E5 04       |shl     ebp, 4                          ;  ecx[i]<<4
004016A4 >|.  03DF          |add     ebx, edi                        ;  ebx+=edi
004016A6  |.  03EB          |add     ebp, ebx                        ;  ebp+=ebx
004016A8 >|.  8B5C24 10     |mov     ebx, dword ptr [esp+10]         ;  "a cr"
004016AC  |.  03C5          |add     eax, ebp                        ;  eax=用户名前四位+ebp
004016AE  |.  8B6C24 14     |mov     ebp, dword ptr [esp+14]         ;  "ack."
004016B2  |.  8BF8          |mov     edi, eax
004016B4  |.  33D8          |xor     ebx, eax                        ;  ebx^=eax
004016B6  |.  C1EF 05       |shr     edi, 5
004016B9  |.  03DD          |add     ebx, ebp                        ;  ebx+=ebx
004016BB  |.  33FA          |xor     edi, edx                        ;  edi=(eax>>5)^edx
004016BD  |.  8BE8          |mov     ebp, eax
004016BF  |.  03DF          |add     ebx, edi                        ;  ebx+=edi
004016C1  |.  C1E5 04       |shl     ebp, 4
004016C4  |.  03EB          |add     ebp, ebx                        ;  ebp=(eax<<4)+ebx
004016C6  |.  03CD          |add     ecx, ebp                        ;  ecx[i]=ecx[i-1]+ebp
004016C8  |.  4E            |dec     esi                             ;  循环32次
004016C9  |.^ 75 BB         \jnz     short <loc_401686>
004016CB  |.  8B5424 20     mov     edx, dword ptr [esp+20]
004016CF  |.  5F            pop     edi
004016D0 >|.  5E            pop     esi                              ;  off_4236D0
004016D1  |.  5D            pop     ebp
004016D2  |.  8902          mov     dword ptr [edx], eax
004016D4  |.  894A 04       mov     dword ptr [edx+4], ecx
004016D7  |.  5B            pop     ebx
004016D8  |.  83C4 08       add     esp, 8
004016DB  \.  C3            retn

返回

00401797   .  8B4424 2C     mov     eax, dword ptr [esp+2C]
0040179B   .  8B4C24 28     mov     ecx, dword ptr [esp+28]
0040179F   .  50            push    eax
004017A0 > .  51            push    ecx                              ;  off_4237A0
004017A1   .  8D5424 20     lea     edx, dword ptr [esp+20]
004017A5   .  68 3CC14200   push    0042C13C                         ;  ("%x-%x",n,sum)
004017AA   .  52            push    edx
004017AB   .  E8 CF450100   call    <sub_415D7F>                     ;  转换成上面形式的字符串格式
004017B0   .  83C4 1C       add     esp, 1C
004017B3   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
004017B7   .  E8 B5670100   call    <sub_417F71>                     ;  全部大写
004017BC   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
004017C0   .  E8 BE670100   call    <sub_417F83>                     ;  字符串反转
004017C5   .  8B86 94000000 mov     eax, dword ptr [esi+94]
004017CB   .  50            push    eax                              ; /Arg2
004017CC   .  8B4424 10     mov     eax, dword ptr [esp+10]          ; |
004017D0   .  50            push    eax                              ; |Arg1
004017D1   .  E8 10800000   call    <__mbscmp>                       ; \注册码与输入的对比
004017D6   .  83C4 08       add     esp, 8
004017D9   .  85C0          test    eax, eax
004017DB   .  0F85 84000000 jnz     <loc_401865>                     ;  不相同则失败

[算法总结]
sum==ecx累加器
sum_0=用户名后四位
m==edx每次循环减一个常数
m_0=-61C88647h
n_0=eax=用户名前四位

for(i=0;i<32;i++)
{
n+=用户名前四位+sum<<4+"This"^sum+" is "+(sum>>5)^m
ebx="a cr"^(用户名前四位+sum<<4+"This"^sum+" is "+(sum>>5)^m)+"ack."
edi=((用户名前四位+sum<<4+"This"^sum+" is "+(sum>>5)^m)>>5)^m
ebp=(用户名前四位+sum<<4+"This"^sum+" is "+(sum>>5)^m)<<4
sum+=ebx+edi+ebp
m-=-61C88647h
}

用户名:the0crat
注册码:FDC9D667-AB610E7A

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有crackme,看了也只是看了,过程不详细,遗憾!
2007-2-25 15:34
0
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
3
看别人这样做,没问题,那就贴了吧,如果不行,请告诉我我删掉
2007-2-25 22:02
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
在哪里找的2.1?
好像2.x就一个2.0和2.2吧!
2007-2-26 09:42
0
游客
登录 | 注册 方可回帖
返回
//