首页
社区
课程
招聘
[原创]第一个密码表算法Crack Me算法分析
发表于: 2007-9-15 13:44 12742

[原创]第一个密码表算法Crack Me算法分析

2007-9-15 13:44
12742
收藏
免费 7
支持
分享
最新回复 (30)
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
26
我来注释:
name:ccbszhxd
sn:001002003004005

00427B59  MOV DWORD PTR FS:[EAX], ESP              ;  FS段[0]=0x12FAF8;
00427B5C  LEA EDX, DWORD PTR SS:[EBP-4]            ;  EDX=0x12FB0C;//EDX=EBP-4
00427B5F  MOV EAX, DWORD PTR DS:[EBX+1DC]          ;  EAX=0xCA5D54;//DS段[CA3E1C];
00427B65  CALL 00415D90                            ;  00415D90
00427B6A  MOV EAX, DWORD PTR SS:[EBP-4]            ;  EAX=0xCA6560;//SS段[12FB0C];   (字符串"ccbszhxd")
00427B6D  CALL 004037B0                            ;  004037B0
00427B72  DEC EAX                                  ;  EAX=(0x8)--;        //减1
00427B73  JL SHORT 00427BA5                        ;  不跳    //ZF=0,当比较结果是小于时,才跳
00427B75  LEA EDX, DWORD PTR SS:[EBP-4]            ;  EDX=0x12FB0C;//EDX=EBP-4   (字符串"`e")
00427B78  MOV EAX, DWORD PTR DS:[EBX+1EC]          ;  EAX=0xCA63D8;//DS段[CA3E2C];
00427B7E  CALL 00415D90                            ;  00415D90
00427B83  MOV EAX, DWORD PTR SS:[EBP-4]            ;  EAX=0xCA6578;//SS段[12FB0C];   (字符串"001002003004005")
00427B86  PUSH EAX                                 ;  0xCA6578进栈;//EAX   ("001002003004005")
00427B87  LEA EDX, DWORD PTR SS:[EBP-8]            ;  EDX=0x12FB08;//EDX=EBP-8
00427B8A  MOV EAX, DWORD PTR DS:[EBX+1DC]          ;  EAX=0xCA5D54;//DS段[CA3E1C];
00427B90  CALL 00415D90                            ;  00415D90
00427B95  MOV EAX, DWORD PTR SS:[EBP-8]            ;  EAX=0xCA6560;//SS段[12FB08];   (字符串"ccbszhxd")
00427B98  POP EDX                                  ;  EDX=0xCA6578;  //出栈到EDX   ("001002003004005")
00427B99  CALL 00427A20                            ;  00427A20
00427B9E  CMP EAX, 0BC614E                         ;  ZF=0;//EAX=0x12d691
00427BA3  JGE SHORT 00427BC3                       ;  不跳就是失败

//CALL 00427A20
00427A20  PUSH EBP                                 ;  0x12FB10进栈;//EBP
00427A21  MOV EBP, ESP                             ;  EBP=0x12FAF0;//EBP=ESP
00427A23  ADD ESP, -10                             ;  在栈中增加空间,大小为10字节(如EAX为双字,4字节)
00427A26  PUSH EBX                                 ;  0xCA3C40进栈;//EBX
00427A27  PUSH ESI                                 ;  0xCA6040进栈;//ESI
00427A28  XOR ECX, ECX                             ;  ECX=0,CF=0;//自身xor运算结果为0,CF=0
00427A2A  MOV DWORD PTR SS:[EBP-10], ECX           ;  SS段[12FAE0]=0x0;
00427A2D  MOV DWORD PTR SS:[EBP-C], ECX            ;  SS段[12FAE4]=0x0;
00427A30  MOV DWORD PTR SS:[EBP-8], EDX            ;  SS段[12FAE8]=0xCA6578;
00427A33  MOV DWORD PTR SS:[EBP-4], EAX            ;  SS段[12FAEC]=0xCA6560;
00427A36  MOV EAX, DWORD PTR SS:[EBP-4]            ;  EAX=0xCA6560;//SS段[12FAEC];   (字符串"ccbszhxd")
00427A39  CALL 00403964                            ;  00403964
00427A3E  MOV EAX, DWORD PTR SS:[EBP-8]            ;  EAX=0xCA6578;//SS段[12FAE8];   (字符串"001002003004005")
00427A41  CALL 00403964                            ;  00403964
00427A46  XOR EAX, EAX                             ;  EAX=0,CF=0;//自身xor运算结果为0,CF=0
00427A48  PUSH EBP                                 ;  0x12FAF0进栈;//EBP
00427A49  PUSH 427B2A                              ;  0x427B2A进栈
00427A4E  PUSH DWORD PTR FS:[EAX]                  ;  SEH异常处理
00427A51  MOV DWORD PTR FS:[EAX], ESP              ;  FS段[0]=0x12FACC;
00427A54  XOR EBX, EBX                             ;  EBX=0,CF=0;//自身xor运算结果为0,CF=0
00427A56  MOV EAX, DWORD PTR SS:[EBP-4]            ;  EAX=0xCA6560;//SS段[12FAEC];   (字符串"ccbszhxd")
00427A59  CALL 004037B0                            ;  004037B0
00427A5E  MOV ESI, EAX                             ;  ESI=0x8;//ESI=EAX
00427A60  TEST ESI, ESI                            ;  ZF=0;//ESI=0x8;ESI自身TEST运算时,ESI为0则ZF=1;否则ZF=0
00427A62  JLE SHORT 00427AA0                       ;  不跳    //ZF=0;当比较结果是小于或等于时,才跳
00427A64  MOV EAX, 1                               ;  EAX=0x1
00427A69  /MOV EDX, EAX                            ;  EDX=0x2;//EDX=EAX
00427A6B  |MOV ECX, DWORD PTR SS:[EBP-4]           ;  ECX=0xCA6560;//SS段[12FAEC];   (字符串"ccbszhxd")
00427A6E  |MOVZX ECX, BYTE PTR DS:[ECX+EDX-1]      ;  ECX=0x63; ('c')//DS段[CA6560];   ("ccbszhxd")
00427A73  |ADD EBX, ECX                            ;  EBX=0x63;//EBX=EBX+ECX;
00427A75  |JNO SHORT 00427A7C                      ;  跳到00427A7C  //结果超出表示范围及OF=0时
00427A77  |CALL 00402A30                           ;  00402A30
00427A7C  |SHL EBX, 8                              ;  EBX=0x6300;//SHL EBX<<0x8 移出的数据进入标志位CF
00427A7F  |MOV ECX, DWORD PTR DS:[428880]          ;  ECX=0x4279FC;//DS段[428880];   (字符串"LANNYDIBANDINGINANAKEKHYANGNGENTOT")
00427A85  |MOVZX EDX, BYTE PTR DS:[ECX+EDX-1]      ;  EDX=0x4c; ('L')//DS段[4279FC];   ("LANNYDIBANDINGINANAKEKHYANGNGENTOT")
00427A8A  |OR EBX, EDX                             ;  EBX=0x634C;//EBX=EBX|EDX
00427A8C  |TEST EBX, EBX                           ;  ZF=0;//EBX=0x634C;EBX自身TEST运算时,EBX为0则ZF=1;否则ZF=0
00427A8E  |JGE SHORT 00427A9C                      ;  跳到00427A9C  //ZF=1,SF=OF
00427A90  |IMUL EDX, EBX, -1
00427A93  |JNO SHORT 00427A9A                      ;  00427A9A
00427A95  |CALL 00402A30                           ;  00402A30
00427A9A  |MOV EBX, EDX
00427A9C  |INC EAX                                 ;  EAX=(0x1)++
00427A9D  |DEC ESI                                 ;  ESI=(0x8)--;   //减1
00427A9E  \JNZ SHORT 00427A69                      ;  跳到00427A69  //ZF=0
00427AA0  XOR EBX, 12345678                        ;  EBX=0x2C7704C6;//EBX=0x3E4352BE^0x12345678
00427AA6  LEA EDX, DWORD PTR SS:[EBP-10]           ;  EDX=0x12FAE0;//EDX=EBP-10
00427AA9  MOV EAX, EBX                             ;  EAX=0x2C7704C6;//EAX=EBX
00427AAB  CALL 004063F4                            ;  004063F4
00427AB0  MOV EAX, DWORD PTR SS:[EBP-10]           ;  EAX=0xCA6594;//SS段[12FAE0];   (字符串"745997510")
00427AB3  CALL 004037B0                            ;  004037B0
00427AB8  MOV ESI, EAX                             ;  ESI=0x9;//ESI=EAX
00427ABA  TEST ESI, ESI                            ;  ZF=0;//ESI=0x9;ESI自身TEST运算时,ESI为0则ZF=1;否则ZF=0
00427ABC  JLE SHORT 00427AF6                       ;  不跳    //ZF=0;当比较结果是小于或等于时,才跳
00427ABE  /MOV EAX, EBX                            ;  EAX=0x2C7704C6;//EAX=EBX
00427AC0  |MOV ECX, 0A                             ;  ECX=0xA
00427AC5  |CDQ                                     ;  将EAX中的最高位符号扩展到EDX中
00427AC6  |IDIV ECX                                ;  EAX=0x4724D47;EDX=0x0;   //除法运算,商在EAX中,余数在EDX中
00427AC8  |BOUND EDX, QWORD PTR DS:[427B3C]
00427ACE  |MOV DL, BYTE PTR DS:[EDX+428884]        ;  DL=0x0;//DS段[429754];
00427AD4  |LEA EAX, DWORD PTR SS:[EBP-10]          ;  EAX=0x12FAE0;//EAX=EBP-10
00427AD7  |CALL 004036D8                           ;  004036D8
00427ADC  |MOV EDX, DWORD PTR SS:[EBP-10]          ;  EDX=0xCA65AC;//SS段[12FAE0];   (字符串"L")
00427ADF  |LEA EAX, DWORD PTR SS:[EBP-C]           ;  EAX=0x12FAE4;//EAX=EBP-C
00427AE2  |CALL 004037B8                           ;  004037B8
00427AE7  |MOV EAX, EBX                            ;  EAX=0x2C7704C6;//EAX=EBX
00427AE9  |MOV ECX, 0A                             ;  ECX=0xA
00427AEE  |CDQ                                     ;  将EAX中的最高位符号扩展到EDX中
00427AEF  |IDIV ECX                                ;  EAX=0x4724D47;EDX=0x0;   //除法运算,商在EAX中,余数在EDX中
00427AF1  |MOV EBX, EAX                            ;  EBX=0x4724D47;//EBX=EAX
00427AF3  |DEC ESI                                 ;  ESI=(0x9)--;        //减1
00427AF4  \JNZ SHORT 00427ABE                      ;  跳到00427ABE  //ZF=0
00427AF6  MOV EAX, DWORD PTR SS:[EBP-C]            ;  EAX=0xCA65CC;//SS段[12FAE4];   (字符串"LA54555Y4")
00427AF9  MOV EDX, DWORD PTR SS:[EBP-8]            ;  EDX=0xCA6578;//SS段[12FAE8];   (字符串"001002003004005")
00427AFC  CALL 004038C0                            ;  004038C0
00427B01  JNZ SHORT 00427B0A                       ;  跳到00427B0A  //ZF=0
00427B03  MOV EBX, 0BC614E
00427B08  JMP SHORT 00427B0F                       ;  00427B0F
00427B0A  MOV EBX, 12D691                          ;  EBX=0x12D691
00427B0F  XOR EAX, EAX                             ;  EAX=0,CF=0;//自身xor运算结果为0,CF=0
00427B11  POP EDX                                  ;  EDX=0x12FAF8;  //出栈到EDX
00427B12  POP ECX                                  ;  ECX=0x427B2A;  //出栈到ECX
00427B13  POP ECX                                  ;  ECX=0x12FAF0;  //出栈到ECX
00427B14  MOV DWORD PTR FS:[EAX], EDX              ;  FS段[0]=0x12FAF8;
00427B17  PUSH 427B31                              ;  0x427B31进栈   (字符串"嬅^[嬪]?)
00427B1C  LEA EAX, DWORD PTR SS:[EBP-10]           ;  EAX=0x12FAE0;//EAX=EBP-10
00427B1F  MOV EDX, 4                               ;  EDX=0x4
00427B24  CALL 00403558                            ;  00403558
00427B29  RETN                                     ;  ____函数返回处____retn
2008-4-16 13:47
0
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
27
楼上的充分说明了那个插件很好用
2008-4-17 22:00
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
28
测试测试
2008-4-18 01:09
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
我是菜鸟,希望有一个完整的分析
2008-4-24 22:22
0
雪    币: 315
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
高手啊,向高手学习啊...不只我什么时候能到这种境界...不说了,先顶....
2008-4-28 22:03
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
只相信自己的眼睛
2008-4-29 07:01
0
游客
登录 | 注册 方可回帖
返回
//