首页
社区
课程
招聘
[原创]riijj_mfccm1_r2的破解经过
发表于: 2006-12-25 15:12 8987

[原创]riijj_mfccm1_r2的破解经过

2006-12-25 15:12
8987

【文章标题】: riijj_mfccm1_r2的破解经过
【文章作者】: dewar
【软件名称】: riijj_mfccm1_r2.EXE
【下载地址】: 自己搜索下载
【加壳方式】: 无壳
【编写语言】: VC
【使用工具】: OD
【操作平台】: WINXP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  本人刚接触破解,这是本人的第一篇破文,各位大侠见笑,有不对之处请指正,不胜感谢!
  1.OD载入,F9运行,输入用户名:dewar,注册码:1234,用消息断点法,在register按钮上设[202 WM_LBUTTONUP]断点,可断在00401140处(具体方法参见OLLYDBG入门系列(五) 消息断点与RUN跟踪).在该处下F2断点,清除其它断点,重新载入.
  ......
  00401140  /$  6A FF         PUSH    -1                                  ;<====断在这里,在这里下F2断点
  00401142  |.  68 BE3B4000   PUSH    00403BBE                            ;  给e@; SE 处理程序安装
  00401147  |.  64:A1 0000000>MOV     EAX, DWORD PTR FS:[0]
  0040114D  |.  50            PUSH    EAX
  0040114E  |.  64:8925 00000>MOV     DWORD PTR FS:[0], ESP
  00401155  |.  81EC D0000000 SUB     ESP, 0D0
  0040115B  |.  8A4C24 03     MOV     CL, BYTE PTR SS:[ESP+3]
  0040115F  |.  8A4424 03     MOV     AL, BYTE PTR SS:[ESP+3]
  00401163  |.  53            PUSH    EBX
  00401164  |.  55            PUSH    EBP
  00401165  |.  56            PUSH    ESI
  00401166  |.  884C24 15     MOV     BYTE PTR SS:[ESP+15], CL
  0040116A  |.  57            PUSH    EDI
  0040116B  |.  8D4C24 18     LEA     ECX, DWORD PTR SS:[ESP+18]
  0040116F  |.  884424 18     MOV     BYTE PTR SS:[ESP+18], AL
  00401173  |.  C64424 20 00  MOV     BYTE PTR SS:[ESP+20], 0
  00401178  |.  E8 831C0000   CALL    00402E00
  0040117D  |.  8A5424 13     MOV     DL, BYTE PTR SS:[ESP+13]
  00401181  |.  8A4424 13     MOV     AL, BYTE PTR SS:[ESP+13]
  00401185  |.  33ED          XOR     EBP, EBP
  00401187  |.  8D4C24 28     LEA     ECX, DWORD PTR SS:[ESP+28]
  0040118B  |.  89AC24 E80000>MOV     DWORD PTR SS:[ESP+E8], EBP
  00401192  |.  885424 28     MOV     BYTE PTR SS:[ESP+28], DL
  00401196  |.  884424 29     MOV     BYTE PTR SS:[ESP+29], AL
  0040119A  |.  C64424 30 00  MOV     BYTE PTR SS:[ESP+30], 0
  0040119F  |.  E8 5C1C0000   CALL    00402E00
  004011A4  |.  8D4C24 18     LEA     ECX, DWORD PTR SS:[ESP+18]
  004011A8  |.  8D5424 28     LEA     EDX, DWORD PTR SS:[ESP+28]
  004011AC  |.  51            PUSH    ECX
  004011AD  |.  52            PUSH    EDX
  004011AE  |.  C68424 F00000>MOV     BYTE PTR SS:[ESP+F0], 1
  004011B6  |.  E8 45FEFFFF   CALL    00401000
  004011BB  |.  8B9C24 F80000>MOV     EBX, DWORD PTR SS:[ESP+F8]
  004011C2  |.  83C4 08       ADD     ESP, 8
  004011C5  |.  8A03          MOV     AL, BYTE PTR DS:[EBX]               ;  注册名的第一个字母送AL
  004011C7  |.  0FBEF0        MOVSX   ESI, AL                             ;  符号扩展至ESI
  004011CA  |.  3BF5          CMP     ESI, EBP                            ;  是否为空(检查有无输入)
  004011CC      75 2A         JNZ     SHORT 004011F8                      ;  不是就跳
  004011CE  |.  8D4C24 28     LEA     ECX, DWORD PTR SS:[ESP+28]
  004011D2  |.  C68424 E80000>MOV     BYTE PTR SS:[ESP+E8], 0
  004011DA  |.  E8 11150000   CALL    004026F0
  004011DF  |.  8D4C24 18     LEA     ECX, DWORD PTR SS:[ESP+18]
  004011E3  |.  C78424 E80000>MOV     DWORD PTR SS:[ESP+E8], -1
  004011EE  |.  E8 FD140000   CALL    004026F0
  004011F3  |.  E9 CA010000   JMP     004013C2
  004011F8  |>  84C0          TEST    AL, AL                              ;  是否为空
  004011FA  |.  74 0F         JE      SHORT 0040120B                      ;  是就跳
  004011FC  |>  0FBEC0        /MOVSX   EAX, AL                            ;  符号扩展至EAX
  004011FF  |.  0FAFF0        |IMUL    ESI, EAX                           ;  第一位字符的ASCII依次与各位的ASCII相乘
  00401202  |.  8A442B 01     |MOV     AL, BYTE PTR DS:[EBX+EBP+1]        ;  取下一位字符
  00401206  |.  45            |INC     EBP                                ;  指针加1(最后可得出注册名的位数)
  00401207  |.  84C0          |TEST    AL, AL                             ;  是否为空(是表示用户名取完)
  00401209  |.^ 75 F1         \JNZ     SHORT 004011FC                     ;  是就得出结果A
  0040120B  |>  8D7C24 40     LEA     EDI, DWORD PTR SS:[ESP+40]
  0040120F  |.  C74424 14 100>MOV     DWORD PTR SS:[ESP+14], 10           ;  初始化循环变量(I=16)
  00401217  |>  8BC6          /MOV     EAX, ESI                           ;  取结果A
  00401219  |.  8D4C24 28     |LEA     ECX, DWORD PTR SS:[ESP+28]
  0040121D  |.  50            |PUSH    EAX
  0040121E  |.  51            |PUSH    ECX
  0040121F  |.  46            |INC     ESI                                ;  A=A+1
  00401220  |.  E8 FBFDFFFF   |CALL    00401020                           ;  对EAX中数据进行处理(除以300,根据余数对应得到数B(J),J=16-I+1,B(J)是通过上面的CALL 00402E00和CALL 00401000产生)
  00401225  |.  8907          |MOV     DWORD PTR DS:[EDI], EAX            ;  B(J)存在堆栈中的指定位置
  00401227  |.  8B4424 1C     |MOV     EAX, DWORD PTR SS:[ESP+1C]         ;  取循环变量
  0040122B  |.  83C4 08       |ADD     ESP, 8                             ;  平衡堆栈
  0040122E  |.  83C7 04       |ADD     EDI, 4                             ;  在堆栈中分配B(J+1)的存放地址
  00401231  |.  48            |DEC     EAX                                ;  循环变量减1(I=I-1)
  00401232  |.  894424 14     |MOV     DWORD PTR SS:[ESP+14], EAX
  00401236  |.^ 75 DF         \JNZ     SHORT 00401217                     ;  是0就退出循环(重复16次,堆栈中得出16个数)
  00401238  |.  8D7C24 40     LEA     EDI, DWORD PTR SS:[ESP+40]          ;  临时结果的首地址送EDI
  0040123C  |.  C74424 14 100>MOV     DWORD PTR SS:[ESP+14], 10           ;  初始化循环变量I=16
  00401244  |>  83C6 14       /ADD     ESI, 14                            ;  ESI=ESI+20
  00401247  |.  8D5424 28     |LEA     EDX, DWORD PTR SS:[ESP+28]
  0040124B  |.  8BC6          |MOV     EAX, ESI                           ;  EAX<-----ESI
  0040124D  |.  46            |INC     ESI                                ;  ESI=ESI+1
  0040124E  |.  50            |PUSH    EAX
  0040124F  |.  52            |PUSH    EDX
  00401250  |.  E8 CBFDFFFF   |CALL    00401020                           ;  对EAX中数据进行处理(除以300,根据余数对应得到数C(J),J=16-I+1)
  00401255  |.  8D0440        |LEA     EAX, DWORD PTR DS:[EAX+EAX*2]      ;  结果C(J)×3
  00401258  |.  8B0F          |MOV     ECX, DWORD PTR DS:[EDI]
  0040125A  |.  D1E0          |SHL     EAX, 1                             ;  再×2
  0040125C  |.  99            |CDQ
  0040125D  |.  F7FD          |IDIV    EBP                                ;  再除以注册名的位数
  0040125F  |.  83C4 08       |ADD     ESP, 8
  00401262  |.  83C7 04       |ADD     EDI, 4
  00401265  |.  8BC2          |MOV     EAX, EDX                           ;  取余数
  00401267  |.  99            |CDQ
  00401268  |.  33C2          |XOR     EAX, EDX
  0040126A  |.  2BC2          |SUB     EAX, EDX                           ;  取余数的绝对值得数D(J)
  0040126C  |.  0FBE0418      |MOVSX   EAX, BYTE PTR DS:[EAX+EBX]         ;  取注册名中的第(D(J)+1)位的ASCII
  00401270  |.  33C1          |XOR     EAX, ECX                           ;  该ASCII和相应B(J)进行异或
  00401272  |.  B9 1A000000   |MOV     ECX, 1A
  00401277  |.  99            |CDQ
  00401278  |.  F7F9          |IDIV    ECX                                ;  异或后再除以1A(=26)
  0040127A  |.  8B4424 14     |MOV     EAX, DWORD PTR SS:[ESP+14]
  0040127E  |.  83C2 41       |ADD     EDX, 41                            ;  余数加65,得结果E(J),即注册码相应位的ASCII,可见注册码应该为大写字母的组合
  00401281  |.  48            |DEC     EAX                                ;  循环变量减1(I=I-1)
  00401282  |.  8957 FC       |MOV     DWORD PTR DS:[EDI-4], EDX          ;  结果E存入在相应的位置
  00401285  |.  894424 14     |MOV     DWORD PTR SS:[ESP+14], EAX         ;  保存循环变量
  00401289  |.^ 75 B9         \JNZ     SHORT 00401244                     ;  循环,直到算出全部的16位注册码(E(1)到E(16))
  0040128B  |.  8BB424 F40000>MOV     ESI, DWORD PTR SS:[ESP+F4]          ;  取假注册码
  00401292  |.  33FF          XOR     EDI, EDI
  00401294  |.  33C0          XOR     EAX, EAX
  00401296  |.  8D4C24 40     LEA     ECX, DWORD PTR SS:[ESP+40]          ;  取真注册码(这里D ECX可看到真正的注册码)
  0040129A  |>  8A1430        /MOV     DL, BYTE PTR DS:[EAX+ESI]
  0040129D  |.  8A19          |MOV     BL, BYTE PTR DS:[ECX]
  0040129F  |.  3AD3          |CMP     DL, BL                             ;  依次比较真假注册码的各位
  004012A1      0F85 34010000 JNZ     004013DB                            ;  不等就跳,这里不能跳(爆破点)
  004012A7  |.  40            |INC     EAX
  004012A8  |.  83C1 04       |ADD     ECX, 4
  004012AB  |.  83F8 10       |CMP     EAX, 10
  004012AE  |.^ 7C EA         \JL      SHORT 0040129A                     ;  循环比较注册码各位
  004012B0  |.  57            PUSH    EDI
  004012B1  |.  8D8C24 840000>LEA     ECX, DWORD PTR SS:[ESP+84]
  004012B8  |.  E8 03240000   CALL    004036C0                            ;  成功
  ......
  2.算法分析见上面的注释.最后可得出正确注册码:ORRSIJQDENDFUBBH.
  3.CALL 00402E00和CALL 00401000具体是怎么运算的,还请高手指点一 二.
  4.发现本CRACKERME的一个BUG:用户名里输入的字符不能改,改了后实际运算的用户名并非显示的用户名,而是你输入的所有的字符。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年12月25日 15:08:57


[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
支持下楼主!
2006-12-26 00:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持 我的遨游的每次打开的3个网站都是你写的文章  很好  支持  
加油
2007-5-2 00:13
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg
4
楼上有这么玄乎?
看到满天的牛在飞,只因为楼上有人在吹!
2007-5-4 23:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=;]...[/QUOTE]
刚学   而且搂住说的挺详细的    不算吹牛把   我确实是天天都看
2007-5-15 18:57
0
雪    币: 418
活跃值: (63)
能力值: ( LV12,RANK:260 )
在线值:
发帖
回帖
粉丝
6
前面这一段是在是看不懂什么意思啊!!
00401140  /$  6A FF         PUSH    -1                                  ;<====断在这里,在这里下F2断点
  00401142  |.  68 BE3B4000   PUSH    00403BBE                            ;  给e@; SE 处理程序安装
  00401147  |.  64:A1 0000000>MOV     EAX, DWORD PTR FS:[0]
  0040114D  |.  50            PUSH    EAX
  0040114E  |.  64:8925 00000>MOV     DWORD PTR FS:[0], ESP
  00401155  |.  81EC D0000000 SUB     ESP, 0D0
  0040115B  |.  8A4C24 03     MOV     CL, BYTE PTR SS:[ESP+3]
  0040115F  |.  8A4424 03     MOV     AL, BYTE PTR SS:[ESP+3]
  00401163  |.  53            PUSH    EBX
  00401164  |.  55            PUSH    EBP
  00401165  |.  56            PUSH    ESI
  00401166  |.  884C24 15     MOV     BYTE PTR SS:[ESP+15], CL
  0040116A  |.  57            PUSH    EDI
  0040116B  |.  8D4C24 18     LEA     ECX, DWORD PTR SS:[ESP+18]
  0040116F  |.  884424 18     MOV     BYTE PTR SS:[ESP+18], AL
  00401173  |.  C64424 20 00  MOV     BYTE PTR SS:[ESP+20], 0
  00401178  |.  E8 831C0000   CALL    00402E00
  0040117D  |.  8A5424 13     MOV     DL, BYTE PTR SS:[ESP+13]
  00401181  |.  8A4424 13     MOV     AL, BYTE PTR SS:[ESP+13]
  00401185  |.  33ED          XOR     EBP, EBP
  00401187  |.  8D4C24 28     LEA     ECX, DWORD PTR SS:[ESP+28]
  0040118B  |.  89AC24 E80000>MOV     DWORD PTR SS:[ESP+E8], EBP
  00401192  |.  885424 28     MOV     BYTE PTR SS:[ESP+28], DL
  00401196  |.  884424 29     MOV     BYTE PTR SS:[ESP+29], AL
  0040119A  |.  C64424 30 00  MOV     BYTE PTR SS:[ESP+30], 0
  0040119F  |.  E8 5C1C0000   CALL    00402E00
  004011A4  |.  8D4C24 18     LEA     ECX, DWORD PTR SS:[ESP+18]
  004011A8  |.  8D5424 28     LEA     EDX, DWORD PTR SS:[ESP+28]
  004011AC  |.  51            PUSH    ECX
  004011AD  |.  52            PUSH    EDX
  004011AE  |.  C68424 F00000>MOV     BYTE PTR SS:[ESP+F0], 1
  004011B6  |.  E8 45FEFFFF   CALL    00401000
  

大牛能帮忙解答下吗?  瓶颈啊~
2009-8-8 00:40
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
支持啊大力支持哦
好文啊
经典的经典
2009-8-9 20:42
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好好学习  天天向上
2009-8-25 17:07
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码