首页
社区
课程
招聘
[求助][求助]关于一个名为cycle的crackme算法识别
2009-1-1 15:28 4162

[求助][求助]关于一个名为cycle的crackme算法识别

2009-1-1 15:28
4162
大家好,我看了OD教程的:OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 这篇文章,看了之后发现并没有给出算法分析,自己也分析了一下,在分析过程中遇到了点问题,想请大家帮忙,不动的地方如下:
004011F1    mov     eax, dword ptr [402160]   ;取用户名的前4位
004011F6     mov     ebx, dword ptr [402164]   ;取用户名紧接着的4位
004011FC     xor     eax, dword ptr [402171]    ;用户名前4位与序列号前4位异或
00401202     xor     ebx, dword ptr [402175]    ;用户名接4位与序列号接4位异或
00401208      and     eax, 7F3F1F0F;这是什么意思?
0040120D    and     ebx, 7030100;这又是什么意思?
00401213     xor     ecx, ecx
00401215       mov     esi, eax
00401217       mov     edi, ebx
00401219        shl     esi, cl
0040121B    shl     edi, cl
0040121D   and     esi, 80808080                   
00401223   and     edi, 80808080              
00401229   mov     edx, esi
0040122B    shr     dh, 7
0040122E    shl     dx, 7
00401232    shr     edx, 8
00401235    shr     dh, 7
00401238    shl     dx, 7
0040123C    shr     edx, 8
0040123F    shr     dh, 7
00401242    shr     dx, 1
00401245    mov     esi, edx
00401247    mov     edx, edi
00401249    shr     dh, 7
0040124C    shl     dx, 7
00401250    shr     edx, 8
00401253    shr     dh, 7
00401256    shl     dx, 7
0040125A    shr     edx, 8
0040125D    shr     dh, 7
00401260    shr     dx, 5
00401264    mov     edi, edx
00401266    xor     edi, esi
00401268    mov     edx, edi
0040126A    and     edx, 0FF
00401270    push    ecx
00401271    push    edx
00401272    mov     edx, 8
00401277    xchg    eax, ecx
00401278    cmp     eax, 3
0040127B    jg      short 0040128C
0040127D    mul     dl
0040127F    pop     edx
00401280    add     eax, 8
00401283    xchg    eax, ecx
00401284    rol     eax, cl
00401286    xor     eax, edx
00401288    ror     eax, cl
0040128A    jmp     short 00401299
0040128C    sub     eax, 3
0040128F    mul     dl
00401291    pop     edx
00401292    xchg    eax, ecx
00401293    rol     ebx, cl
00401295    xor     ebx, edx
00401297    ror     ebx, cl
00401299    pop     ecx
0040129A    inc     ecx
0040129B    cmp     ecx, 8
0040129E    jnz     00401215
004012A4   retn

那么多逻辑移位到底用来做什么的,麻烦大家帮忙解释一下,谢谢。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 440
活跃值: (87)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
asdfslw 3 2009-1-6 16:27
2
0
eax <- name 1-4字节
xor eax,key 1-4字节
and eax,7f3f1f0f

ebx <- name 5-8字节
xor ebx,key 5-8字节
and ebx,07030100

for ecx 从0到7
------循环体开始-------
esi <- eax
shl esi,cl
edi <- ebx
shl edi,cl

edx : dl 高四位等于esi四个字节的最高比特位,
      dl 低四位等于edi四个字节的最高比特位,
      其他位等于0。
if ecx>3
   {
      qq=ecx*8+8
      rol eax,tt
      xor eax,edx
      ror eax,tt
   }
else
   {
      qq=(ecx-3)*8
      rol ebx,tt
      xor ebx,edx
      ror ebx,tt
   }
------循环体结束-------

至于这种运算的意义我就不懂了。
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
大头和尚 2009-4-4 13:37
3
0
这个Cycle的Crackme我也在看
这个call里只是计算,貌似下面的一个call才是关键call
雪    币: 2108
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
书呆彭 6 2009-4-4 23:29
4
0
这些不知所云的常数,实际通常是“编译器魔数”(也可能是程序员手动使用的算法技巧),实际上是用一些数学上等价的形式去替换效率不太高的算法。

自己反汇编一下VC优化编译器生成的求字符串长度的函数,你就会看到类似的代码。

有兴趣深入了解的,推荐一本书:《Hacker's Delight》
游客
登录 | 注册 方可回帖
返回