-
-
[看雪读书月]注册机就不写了 写点简单分析吧
-
发表于: 2008-7-10 16:04 5538
-
name:ftldbp
sn:KFYTQlIDGBUP
首先用户名得是6位 并且为小写字母 并且不能出现 a z等。这个简单。
然后就到了
401e07处 这里是处理算法的call f7进去
就到了401bb0处 这里有一些花指令 可以不用管 只当是nop指令
然后这里对用户名和注册码 做了些限制
就是user1+0x1b=sn1
user2+0x1b=sn3
user3+0x1b=sn5
user4+0x1b=sn7
user5+0x1b=sn9
user6+0x1b=sn11
user1+0x20>=sn2
user2+0x20>=sn4
user3+0x20>=sn6
user4+0x20>=sn8
user5+0x20>=sn10
user6+0x20>=sn12
这里验证过了 就来到一个异常地方 是写非法内存异常。
另外还有一个anti 的call 就是call 004019f0 可以先把他NOP掉 并把4019f0这个CALL东西都NOP
下面就是那个异常处理程序了
直接在那下断 并且在下面 401c9e下段 然后F9 F9
就走到这了
00401C9E > \C745 FC FFFFF>MOV DWORD PTR SS:[EBP-4],-1
00401CA5 . 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
00401CA8 . 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00401CAF . 5F POP EDI
00401CB0 . 5E POP ESI
00401CB1 . 5B POP EBX
00401CB2 . 8BE5 MOV ESP,EBP
00401CB4 . 5D POP EBP
00401CB5 . C3 RET
00401CB6 CC INT3
然后f8下来就到这了
004017F0 . 55 PUSH EBP
004017F1 . 8BEC MOV EBP,ESP
004017F3 . 81EC 80000000 SUB ESP,80
004017F9 . 53 PUSH EBX
004017FA . 56 PUSH ESI
004017FB . 57 PUSH EDI
004017FC . C745 FC 88354>MOV DWORD PTR SS:[EBP-4],cm2.00403588 ; ASCII "ABCDEFGHIJKLMNOPQRSTUVWXY"
00401803 . 50 PUSH EAX
00401804 . 33C0 XOR EAX,EAX
00401806 . E8 00000000 CALL cm2.0040180B
0040180B $ 58 POP EAX
0040180C . 57 PUSH EDI
0040180D . 8D78 04 LEA EDI,DWORD PTR DS:[EAX+4]
00401810 . 58 POP EAX
00401811 . 5F POP EDI
00401812 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00401815 . 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
00401818 . C745 D8 00000>MOV DWORD PTR SS:[EBP-28],0
0040181F > 837D D8 18 CMP DWORD PTR SS:[EBP-28],18
走到这后发现 不论怎么走都得走到这里
004018BB > \6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
004018BD . 68 60354000 PUSH cm2.00403560 ; |Title = "错了!"
004018C2 . 68 54354000 PUSH cm2.00403554 ; |Text = "继续努力!"
004018C7 . 0FBE0D F64040>MOVSX ECX,BYTE PTR DS:[4040F6] ; |
004018CE . 83E9 55 SUB ECX,55 ; |
004018D1 . F7D9 NEG ECX ; |
004018D3 . 1BC9 SBB ECX,ECX ; |
004018D5 . 41 INC ECX ; |
004018D6 . 51 PUSH ECX ; |hOwner
004018D7 . FF15 00324000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
004018DD . 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX
004018E0 . 837D D8 00 CMP DWORD PTR SS:[EBP-28],0
004018E4 . 74 15 JE SHORT cm2.004018FB
004018E6 . FF15 20304000 CALL DWORD PTR DS:[<&KERNEL32.GetCurrent>; [GetCurrentProcess
不过4018d7走完后 要看eax的取值 如果为0 就可以接着往下走
这时发现有这么一句
MOVSX ECX,BYTE PTR DS:[4040F6]
SUB ECX,55
那么只要用户名最后一位为p即可。
这样就可以来到下面
004018FB > \C745 D8 00000>MOV DWORD PTR SS:[EBP-28],0
00401902 . C745 D0 05000>MOV DWORD PTR SS:[EBP-30],5
00401909 . C745 CC 00000>MOV DWORD PTR SS:[EBP-34],0
00401910 > 837D D8 0C CMP DWORD PTR SS:[EBP-28],0C
00401914 . 0F84 BB000000 JE cm2.004019D5
0040191A . 8B45 D0 MOV EAX,DWORD PTR SS:[EBP-30]
0040191D . 8D0C85 FCFFFF>LEA ECX,DWORD PTR DS:[EAX*4-4]
00401924 . 894D C8 MOV DWORD PTR SS:[EBP-38],ECX
00401927 > 8B55 D8 MOV EDX,DWORD PTR SS:[EBP-28]
0040192A . 0FBE82 EC4040>MOVSX EAX,BYTE PTR DS:[EDX+4040EC]
00401931 . 8B4D C8 MOV ECX,DWORD PTR SS:[EBP-38]
00401934 . 0FBE540D DC MOVSX EDX,BYTE PTR SS:[EBP+ECX-24]
00401939 . 8B4D C8 MOV ECX,DWORD PTR SS:[EBP-38]
0040193C . 83C1 01 ADD ECX,1
0040193F . 894D C8 MOV DWORD PTR SS:[EBP-38],ECX
00401942 . 3BC2 CMP EAX,EDX
00401944 . 74 13 JE SHORT cm2.00401959
00401946 . 8B55 CC MOV EDX,DWORD PTR SS:[EBP-34]
00401949 . 83C2 01 ADD EDX,1
0040194C . 8955 CC MOV DWORD PTR SS:[EBP-34],EDX
0040194F . 837D CC 04 CMP DWORD PTR SS:[EBP-34],4
00401953 . 7E 02 JLE SHORT cm2.00401957
00401955 . EB 02 JMP SHORT cm2.00401959
00401957 >^ EB CE JMP SHORT cm2.00401927
00401959 > 837D CC 05 CMP DWORD PTR SS:[EBP-34],5
0040195D . 75 3F JNZ SHORT cm2.0040199E
0040195F . C745 C4 78354>MOV DWORD PTR SS:[EBP-3C],cm2.00403578 ; ASCII "ABCDEFGHIJKLMN"
00401966 . C745 C0 68354>MOV DWORD PTR SS:[EBP-40],cm2.00403568 ; ASCII "OPQRSTUVWXYZ"
0040196D . 50 PUSH EAX
0040196E . 8D85 C4FFFFFF LEA EAX,DWORD PTR SS:[EBP-3C]
00401974 . 50 PUSH EAX
00401975 . FF75 C0 PUSH DWORD PTR SS:[EBP-40]
00401978 . 58 POP EAX
00401979 . 58 POP EAX
0040197A . 58 POP EAX
0040197B . 8945 CC MOV DWORD PTR SS:[EBP-34],EAX
0040197E . 837D CC 00 CMP DWORD PTR SS:[EBP-34],0
00401982 . 7E 07 JLE SHORT cm2.0040198B
00401984 . E8 27FEFFFF CALL cm2.004017B0
00401989 . EB 0E JMP SHORT cm2.00401999
0040198B > 50 PUSH EAX
0040198C . 8D85 C4FFFFFF LEA EAX,DWORD PTR SS:[EBP-3C]
00401992 . 50 PUSH EAX
00401993 . FF75 C0 PUSH DWORD PTR SS:[EBP-40]
00401996 . 58 POP EAX
00401997 . 58 POP EAX
00401998 . 58 POP EAX
00401999 > E8 12FEFFFF CALL cm2.004017B0
0040199E > 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28]
004019A1 . 83C0 02 ADD EAX,2
004019A4 . 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX
004019A7 . 8B4D D0 MOV ECX,DWORD PTR SS:[EBP-30]
004019AA . 83E9 01 SUB ECX,1
004019AD . 894D D0 MOV DWORD PTR SS:[EBP-30],ECX
004019B0 . EB 05 JMP SHORT cm2.004019B7
004019B2 $ F9 STC
004019B3 . 73 01 JNB SHORT cm2.004019B6
004019B5 . C3 RET
004019B6 > FFE8 JMP FAR EAX ; 非法使用寄存器
004019B8 ? F6FF IDIV BH
004019BA ? FFFF ??? ; 未知命令
004019BC . 837D D0 00 CMP DWORD PTR SS:[EBP-30],0
004019C0 . 75 07 JNZ SHORT cm2.004019C9
004019C2 . C745 D0 06000>MOV DWORD PTR SS:[EBP-30],6
004019C9 > C745 CC 00000>MOV DWORD PTR SS:[EBP-34],0
004019D0 .^ E9 3BFFFFFF JMP cm2.00401910
004019D5 > E8 96FDFFFF CALL cm2.00401770
004019DA . 5F POP EDI
004019DB . 5E POP ESI
004019DC . 5B POP EBX
004019DD . 8BE5 MOV ESP,EBP
004019DF . 5D POP EBP
来到这后就简单了
这里只要00401910 > 837D D8 0C CMP DWORD PTR SS:[EBP-28],0C
只要ebp-28 =0x0c就行了 就能走到成功之处。
算法简单 只不过就那几个字母来回运算 没啥可说的。
自己随便写的 错误之处请谅解。 看不懂别怪我 呵呵
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [求助]这种是不是加壳了? 32834
- [原创]第2阶段第2题 4918
- 第2阶段第1题 5086
- [原创]第四题 5195
- [原创]发个第3题exe版本 8818