飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3880|回复: 4

成功助理V1.20破解的算法分析就差一点成功了!

[复制链接]
  • TA的每日心情
    开心
    2016-6-17 14:50
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2006-7-22 21:51:39 | 显示全部楼层 |阅读模式
    软件地址http://down1.tech.sina.com.cn/do ... 6-04-28/17705.shtml
    追码成功,内存注册机也不劳驾兄弟们了.

    我直接贴上算法部分,在此

    00613885   .  55            PUSH EBP
    00613886   .  68 9E3A6100   PUSH cgzl_exe.00613A9E
    0061388B   .  64:FF30       PUSH DWORD PTR FS:[EAX]
    0061388E   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
    00613891   .  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
    00613894   .  E8 B31ADFFF   CALL cgzl_exe.0040534C
    00613899   .  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
    0061389C   .  BA B43A6100   MOV EDX,cgzl_exe.00613AB4                      ;  软件固定码 "*1^cgsxy*-",下面要参与真码运算
    006138A1   .  E8 3E1BDFFF   CALL cgzl_exe.004053E4
    006138A6   .  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
    006138A9   .  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]                   ;  还是用户名[agang]
    006138AC   .  E8 331BDFFF   CALL cgzl_exe.004053E4
    006138B1   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
    006138B4   .  E8 531DDFFF   CALL cgzl_exe.0040560C
    006138B9   .  8BF8          MOV EDI,EAX
    006138BB   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    006138BE   .  E8 491DDFFF   CALL cgzl_exe.0040560C                         ;  取用户名长存入EAX,我的是7位长
    006138C3   .  83F8 06       CMP EAX,6
    006138C6   .  7D 0D         JGE SHORT cgzl_exe.006138D5                    ;  大于等于6就往下跳
    006138C8   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
    006138CB   .  E8 7C1ADFFF   CALL cgzl_exe.0040534C
    006138D0   .  E9 99010000   JMP cgzl_exe.00613A6E
    006138D5   >  33C9          XOR ECX,ECX
    006138D7   .  55            PUSH EBP
    006138D8   .  68 593A6100   PUSH cgzl_exe.00613A59
    006138DD   .  64:FF31       PUSH DWORD PTR FS:[ECX]
    006138E0   .  64:8921       MOV DWORD PTR FS:[ECX],ESP
    006138E3   .  8D55 CC       LEA EDX,DWORD PTR SS:[EBP-34]
    006138E6   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
    006138E9   .  E8 7AC5FFFF   CALL cgzl_exe.0060FE68
    006138EE   .  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
    006138F1   .  E8 561ADFFF   CALL cgzl_exe.0040534C
    006138F6   .  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                  ;  [EBP-10]存的是软件预设码
    006138F9   .  E8 0E1DDFFF   CALL cgzl_exe.0040560C                         ;  取预设码的长度,是A(10进制的10位长)
    006138FE   .  8BF0          MOV ESI,EAX                                    ;  预设码长度存入ESI
    00613900   .  85F6          TEST ESI,ESI
    00613902   .  7E 39         JLE SHORT cgzl_exe.0061393D                    ;  ESI<=0时就不进入下面的循环了。
    00613904   .  BB 01000000   MOV EBX,1                                      ;  EBX=1,开始为下面的循环计数
    00613909   >  8BC3          MOV EAX,EBX                                    ;  循环开始处。。。
    0061390B   .  48            DEC EAX
    0061390C   .  99            CDQ
    0061390D   .  F7FF          IDIV EDI                                       ;  这实现两个带符号数的二进制除法运算.
    0061390F   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]                   ;  用户名放入EAX
    00613912   .  0FB61410      MOVZX EDX,BYTE PTR DS:[EAX+EDX]                ;  逐位取用户名的ASCII码
    00613916   .  83C2 50       ADD EDX,50                                     ;  每个字符+50(十进制就是80)后
    00613919   .  83F2 7F       XOR EDX,7F                                     ;  与7F异或,记作S1,放在EDX
    0061391C   .  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                  ;  系统预设码 "*1^cgsxy*-"
    0061391F   .  0FB64418 FF   MOVZX EAX,BYTE PTR DS:[EAX+EBX-1]              ;  逐位取固定码ASCII,记为S2,呵呵
    00613924   .  33D0          XOR EDX,EAX                                    ;  S1与S2异或,结果存在EDX
    00613926   .  8D45 98       LEA EAX,DWORD PTR SS:[EBP-68]
    00613929   .  E8 061CDFFF   CALL cgzl_exe.00405534
    0061392E   .  8B55 98       MOV EDX,DWORD PTR SS:[EBP-68]
    00613931   .  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
    00613934   .  E8 DB1CDFFF   CALL cgzl_exe.00405614
    00613939   .  43            INC EBX                                        ;  用户名的计次数+1
    0061393A   .  4E            DEC ESI                                        ;  ESI存的是预设码长,作用也是计数的,取完后就跳出循环
    0061393B   .^ 75 CC         JNZ SHORT cgzl_exe.00613909                    ;  预设码没取完就跳到循环开始处。。。
    0061393D   >  8D55 BC       LEA EDX,DWORD PTR SS:[EBP-44]
    00613940   .  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
    00613943   .  E8 20C5FFFF   CALL cgzl_exe.0060FE68                         ;  好像是做了某字串的MD5加密
    00613948   .  BB 10000000   MOV EBX,10                                     ;  EBX=16
    0061394D   .  8D45 CC       LEA EAX,DWORD PTR SS:[EBP-34]
    00613950   .  8D55 BC       LEA EDX,DWORD PTR SS:[EBP-44]
    00613953   .  8D75 AC       LEA ESI,DWORD PTR SS:[EBP-54]
    00613956   >  8A08          MOV CL,BYTE PTR DS:[EAX]                       ;  这里的循环生成了下面的32位长的字符串,是不是MD5的32位加密,呵呵
    00613958   .  320A          XOR CL,BYTE PTR DS:[EDX]
    0061395A   .  880E          MOV BYTE PTR DS:[ESI],CL
    0061395C   .  46            INC ESI
    0061395D   .  42            INC EDX
    0061395E   .  40            INC EAX
    0061395F   .  4B            DEC EBX                                        ;  计数器
    00613960   .^ 75 F4         JNZ SHORT cgzl_exe.00613956                    ;  这里是第二个关键循环尾
    00613962   .  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
    00613965   .  8D45 AC       LEA EAX,DWORD PTR SS:[EBP-54]
    00613968   .  E8 6FC5FFFF   CALL cgzl_exe.0060FEDC
    0061396D   .  8D45 E4       LEA EAX,DWORD PTR SS:[EBP-1C]
    00613970   .  E8 D719DFFF   CALL cgzl_exe.0040534C                         ;  0344a74b07b691ef6315828979647fdf第二部分算法要用到
    00613975   .  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]
    00613978   .  E8 8F1CDFFF   CALL cgzl_exe.0040560C
    0061397D   .  8BF0          MOV ESI,EAX
    0061397F   .  D1FE          SAR ESI,1
    00613981   .  79 03         JNS SHORT cgzl_exe.00613986
    00613983   .  83D6 00       ADC ESI,0
    00613986   >  4E            DEC ESI
    00613987   .  85F6          TEST ESI,ESI
    00613989   .  7C 3A         JL SHORT cgzl_exe.006139C5
    0061398B   .  46            INC ESI
    0061398C   .  33DB          XOR EBX,EBX
    0061398E   >  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
    00613991   .  50            PUSH EAX
    00613992   .  8BD3          MOV EDX,EBX
    00613994   .  03D2          ADD EDX,EDX
    00613996   .  42            INC EDX
    00613997   .  B9 02000000   MOV ECX,2
    0061399C   .  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]                  ;  [EBP-18]放的是MD5加密32位字符串,是不是MD5呀,猜的
    0061399F   .  E8 C81EDFFF   CALL cgzl_exe.0040586C
    006139A4   .  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]
    006139A7   .  E8 E8FDFFFF   CALL cgzl_exe.00613794
    006139AC   .  8BD0          MOV EDX,EAX
    006139AE   .  8D45 94       LEA EAX,DWORD PTR SS:[EBP-6C]
    006139B1   .  E8 7E1BDFFF   CALL cgzl_exe.00405534
    006139B6   .  8B55 94       MOV EDX,DWORD PTR SS:[EBP-6C]
    006139B9   .  8D45 E4       LEA EAX,DWORD PTR SS:[EBP-1C]
    006139BC   .  E8 531CDFFF   CALL cgzl_exe.00405614
    006139C1   .  43            INC EBX
    006139C2   .  4E            DEC ESI
    006139C3   .^ 75 C9         JNZ SHORT cgzl_exe.0061398E
    006139C5   >  8D55 9C       LEA EDX,DWORD PTR SS:[EBP-64]
    006139C8   .  8B45 E4       MOV EAX,DWORD PTR SS:[EBP-1C]
    006139CB   .  E8 98C4FFFF   CALL cgzl_exe.0060FE68
    006139D0   .  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
    006139D3   .  E8 7419DFFF   CALL cgzl_exe.0040534C
    006139D8   .  BB 10000000   MOV EBX,10                                     ;  计数器先置为16次
    006139DD   .  8D7D 9C       LEA EDI,DWORD PTR SS:[EBP-64]
    006139E0   >  33C0          XOR EAX,EAX                                    ;  这里是第二部分算法开始。。。
    006139E2   .  8A07          MOV AL,BYTE PTR DS:[EDI]                       ;  AL=E8;AL=B2,AL=70;EAX=DD
    006139E4   .  B9 7E000000   MOV ECX,7E                                     ;  ECX=7E
    006139E9   .  33D2          XOR EDX,EDX
    006139EB   .  F7F1          DIV ECX                                        ;  无符号数除法[EAX/7E],结果放EDX,逐位算出了“准真码”
    006139ED   .  8BF2          MOV ESI,EDX
    006139EF   .  83FE 2F       CMP ESI,2F                                     ;  除法所得商与‘*’ASCII码比较
    006139F2   .  7D 11         JGE SHORT cgzl_exe.00613A05                    ;  如果大于等于就跳
    006139F4   .  8BC6          MOV EAX,ESI                                    ;  这一段就已经逐位算出"准真码"了,下面是排除和替换一下字符,如':;换为'<'
    006139F6   .  B9 0B000000   MOV ECX,0B
    006139FB   .  99            CDQ
    006139FC   .  F7F9          IDIV ECX
    006139FE   .  83C2 2F       ADD EDX,2F
    00613A01   .  8BF2          MOV ESI,EDX
    00613A03   .  EB 31         JMP SHORT cgzl_exe.00613A36
    00613A05   >  83FE 3A       CMP ESI,3A                                     ;  再与字符‘:’比较
    00613A08   .  75 07         JNZ SHORT cgzl_exe.00613A11
    00613A0A   .  BE 3C000000   MOV ESI,3C                                     ;  <
    00613A0F   .  EB 25         JMP SHORT cgzl_exe.00613A36
    00613A11   >  83FE 3B       CMP ESI,3B                                     ;  如果不是,再与‘;’比较
    00613A14   .  75 07         JNZ SHORT cgzl_exe.00613A1D
    00613A16   .  BE 3D000000   MOV ESI,3D                                     ;  =
    00613A1B   .  EB 19         JMP SHORT cgzl_exe.00613A36
    00613A1D   >  83FE 5D       CMP ESI,5D                                     ;  如果还不是,再与‘]’比较
    00613A20   .  7E 14         JLE SHORT cgzl_exe.00613A36                    ;  如果该字符的ASCII小于等于5D就跳,否则继续往下
    00613A22   .  83FE 61       CMP ESI,61                                     ;  再与‘a’比较
    00613A25   .  7D 0F         JGE SHORT cgzl_exe.00613A36                    ;  如果大于等于就跳
    00613A27   .  8BC6          MOV EAX,ESI
    00613A29   .  B9 1D000000   MOV ECX,1D
    00613A2E   .  99            CDQ
    00613A2F   .  F7F9          IDIV ECX                                       ;  如果上面距此最近的比较不成立,则其除以1D,取整的商入EAX,余数在EDX
    00613A31   .  83C2 61       ADD EDX,61                                     ;  余数+61
    00613A34   .  8BF2          MOV ESI,EDX
    00613A36   >  8D45 90       LEA EAX,DWORD PTR SS:[EBP-70]
    00613A39   .  8BD6          MOV EDX,ESI
    00613A3B   .  E8 F41ADFFF   CALL cgzl_exe.00405534
    00613A40   .  8B55 90       MOV EDX,DWORD PTR SS:[EBP-70]
    00613A43   .  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
    00613A46   .  E8 C91BDFFF   CALL cgzl_exe.00405614
    00613A4B   .  47            INC EDI
    00613A4C   .  4B            DEC EBX
    00613A4D   .^ 75 91         JNZ SHORT cgzl_exe.006139E0                    ;  第二部分算法尾
    00613A4F   .  33C0          XOR EAX,EAX
    00613A51   .  5A            POP EDX
    00613A52   .  59            POP ECX
    00613A53   .  59            POP ECX
    00613A54   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
    00613A57   .  EB 0A         JMP SHORT cgzl_exe.00613A63
    00613A59   .^ E9 DA0EDFFF   JMP cgzl_exe.00404938
    00613A5E   .  E8 0113DFFF   CALL cgzl_exe.00404D64
    00613A63   >  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
    00613A66   .  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]                  ;  真码终于出现了!
    00613A69   .  E8 3219DFFF   CALL cgzl_exe.004053A0
    00613A6E   >  33C0          XOR EAX,EAX






    以下是算法详细过程
    循环第一次:------>循环次数为预设码位数0xA。
    用户名第一个字符'['的ASCII是91+80=171(0xAB) XOR 7F=D4====》记为S11=D4
    预设码第一个字符'*'的ASCII是42(0x2A)====》记为S21=2A
    S11 XOR  S21=D4 XOR 2A=FE
    循环第二次:
    用户名第二个字符'a'的ASCII是97+80=177(0xB1) XOR 7F=CE===》记为S21=CE
    预设码第二个字符'1'的ASCII是0x31(这个不用查表,俺记得)====》记为S22=31
    S21 XOR S22=CE XOR 31=FF
    循环第三次:
    用户名第三个字符'g'的ASCII是103+80=183(0xB7) XOR 7F=C8===》记为S31=C8
    预设码第三个字符'^'的ASCII是94(0x5E)====》记为S32=5E
    S31 XOR S32=C8 XOR 5E=96
    循环第四次:
    用户名第四个字符'a'的ASCII是97+80=197(0xB1) XOR 7F=CE===》记为S41=CE
    预设码第四个字符'c'的ASCII是99(0x63)====》记为S42=63
    S41 XOR S42=CE XOR 63=AD
    循环第五次:
    用户名第五个字符'n'的ASCII是110+80=190(0xBE) XOR 7F=C1===》记为S51=C1
    预设码第五个字符'g'的ASCII是103(0x67)====》记为S52=67
    S51 XOR S52=C1 XOR 73=A6
    循环第六次:
    用户名第六个字符'g'的ASCII是103+80=183(0xB7) XOR 7F=C8===》记为S61=C8
    预设码第六个字符's'的ASCII是115(0x73)====》记为S62=73
    S61 XOR S62=C8 XOR 73=BB
    循环第七次:
    用户名第七个字符']'的ASCII是93+80=173(0xAD) XOR 7F=D2===》记为S71=D2
    预设码第七个字符'x'的ASCII是120(0x78)====》记为S72=78
    S71 XOR S72=D2 XOR 78=AA

    ---------------------至此用户名已取完,但预设码还没取完,继续循环,第二轮依次取用户名,直到预设码也取完,两者才能运算---------

    循环第八次:------>循环次数为预设码位数0xA。
    用户名第一个字符'['的ASCII是91+80=171(0xAB) XOR 7F=D4====》记为S81=D4
    预设码第八个字符'y'的ASCII是121(0x79)====》记为S81=79
    S81 XOR  S81=D4 XOR 79=AD
    循环第九次:
    用户名第二个字符'a'的ASCII是97+80=177(0xB1) XOR 7F=CE===》记为S91=CE
    预设码第九个字符'*'的ASCII是42(0x2A)====》记为S81=2A
    S91 XOR S92=CE XOR 2A=E4
    循环第十次:
    用户名第三个字符'g'的ASCII是103+80=183(0xB7) XOR 7F=C8===》记为Sa1=C8
    预设码第十个字符'-'的ASCII是45(0x2D)====》记为Sa2=2D
    Sa1 XOR Sa2=C8 XOR 2D=E5

    --------------------------------------------------------------
    生成这样的字符串:FE FF 96 AD A6 BB AA AD E4 E5---------〉记为Z1
    0344a74b07b691ef6315828979647fdf,,这个好像是MD5加密[32位]后的字符串,--->>记为Z2

    真码是这样来的,
    由E8 2B 70 DD 5F B5 E6 3A E5 A4 6E 14 C6 E4 ED 3E---------->>记为Z3
    [倒序的话是这样3EEDE4C6 146EA4E5 3AE6B55F DD70B2E8]字符串逐字节除以7E,如果这个商的ASCII码对应的字符为‘:’就用‘<’替换;如果是‘;’用‘=’替换;如果这个商小于0x61,那么就用商除以0x1D,用新的商的余数+0x61,得到的就是真码对应位数的ASCII了。
    例如:真码的第五位时,先用5F与‘:’的ASCII码比较,如果不等再与“;”比较,再与0x61比较,小于了,所以用5E除以0x1D,用商的余数8+0x61=0x69,此值对应的ASCII就是字符'i'。

    现在的问题就是,Z1和Z2字符串各用来做了什么,而Z3又是从何而来,热心的高手们是时候出招了,救救我吧!

    [ 本帖最后由 agang 于 2006-7-23 14:22 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-23 15:35:02 | 显示全部楼层
    兄弟好强哦~~~
    偶还不会MD5,看兄弟的算法分析都感到吃力,学习拉~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-25 23:25:10 | 显示全部楼层
    算法正在学习当中!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-8-11 20:29
  • 签到天数: 34 天

    [LV.5]常住居民I

    发表于 2006-7-26 09:20:12 | 显示全部楼层
    正在学习中
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-27 12:25:53 | 显示全部楼层
    为什么软件算法都那么BT,浪费偶们的脑细胞,算法分析号吃力
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表