【文章标题】: DCSE's crackme 1.01算法分析
【文章作者】: 网游难民
【软件名称】: DCSE's crackme 1.01
【软件大小】: 412 KB
【下载地址】: 本地下载
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD,PEID
【操作平台】: winxp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一,用PEID查壳为Borland C++ [Overlay]无壳。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
二,运行软件,注册窗口进行注册,输入错误的注册信息进行检测!软件有尾巴!
提示说:“注册失败。。。”
用OD载入,右键超级字串查找,找到"注册失败。。。",双击进入程序代码段,往上查找,在一个合适的地方下断。
然后运行程序,输入注册名和注册码,程序成功被断了下来,断在这里:
004538B4 |. 51 PUSH ECX ; 程序被段在这里
004538B5 |. 53 PUSH EBX
004538B6 |. 56 PUSH ESI
004538B7 |. 57 PUSH EDI
004538B8 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
004538BB |. 33C0 XOR EAX,EAX
004538BD |. 55 PUSH EBP
004538BE |. 68 CC394500 PUSH CRACKME1.004539CC
004538C3 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004538C6 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004538C9 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
004538CC |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004538CF |. 8B80 04030000 MOV EAX,DWORD PTR DS:[EAX+304]
004538D5 |. E8 72F1FDFF CALL CRACKME1.00432A4C
004538DA |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ; 注册名输入EAX
004538DD |. E8 2A08FBFF CALL CRACKME1.0040410C ; 取得注册名位数
004538E2 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ; 注册名位数放入SS:[EBP-8]
004538E5 |. 837D F8 01 CMP DWORD PTR SS:[EBP-8],1 ; 注册名位数和1比较
004538E9 |. 7D 0F JGE SHORT CRACKME1.004538FA ; 大于一则跳
004538EB |. B8 E4394500 MOV EAX,CRACKME1.004539E4 ; 请输入用户名...
004538F0 |. E8 773AFDFF CALL CRACKME1.0042736C
004538F5 |. E9 A2000000 JMP CRACKME1.0045399C
004538FA |> 33DB XOR EBX,EBX ; EBX清0
004538FC |. 8B7D F8 MOV EDI,DWORD PTR SS:[EBP-8] ; 用户名位数放入EDI
004538FF |. 85FF TEST EDI,EDI
00453901 |. 7E 2A JLE SHORT CRACKME1.0045392D
00453903 |. BE 01000000 MOV ESI,1 ; ESI置一,为下面循环做准备
00453908 |> 8D55 F0 /LEA EDX,DWORD PTR SS:[EBP-10]
0045390B |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0045390E |. 8B80 04030000 |MOV EAX,DWORD PTR DS:[EAX+304]
00453914 |. E8 33F1FDFF |CALL CRACKME1.00432A4C
00453919 |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10]
0045391C |. 8A4430 FF |MOV AL,BYTE PTR DS:[EAX+ESI-1]
00453920 |. 25 FF000000 |AND EAX,0FF
00453925 |. 03D8 |ADD EBX,EAX
00453927 |. 03DE |ADD EBX,ESI
00453929 |. 46 |INC ESI
0045392A |. 4F |DEC EDI
0045392B |.^ 75 DB \JNZ SHORT CRACKME1.00453908 ; 这里是一个循环,求的用户名第一位ASCII码加1,第二位用户名ASCII码加2~~~~~~~一直到最后一位的和放入EBX,记为A,
0045392D |> 8BC3 MOV EAX,EBX ; 把A送入EAX
0045392F |. F7EB IMUL EBX ; EAX乘EBX,即A*A,记为B
00453931 |. 83C0 05 ADD EAX,5 ; EAX加5,即B加5,记为C
00453934 |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX ; 把C放入SS:[EBP-14]
00453937 |. DB45 EC FILD DWORD PTR SS:[EBP-14] ; C的十进制扩展为实数,记为D
0045393A |. DB45 F8 FILD DWORD PTR SS:[EBP-8] ; 用户名十进制扩展为实数,记为E
0045393D |. DEF9 FDIVP ST(1),ST ; D除以E,值记为F
0045393F |. D825 F4394500 FSUB DWORD PTR DS:[4539F4] ; F的值减去2记为G
00453945 |. E8 D2EFFAFF CALL CRACKME1.0040291C ; G的16进制放入EAX,记为H
0045394A |. 8BD8 MOV EBX,EAX ; EAX的值放入EBX,即H放入EBX
0045394C |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
0045394F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00453952 |. 8B80 08030000 MOV EAX,DWORD PTR DS:[EAX+308]
00453958 |. E8 EFF0FDFF CALL CRACKME1.00432A4C
0045395D |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] ; 试练码放入EAX
00453960 |. 50 PUSH EAX
00453961 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
00453964 |. 8BC3 MOV EAX,EBX ; EBX的值放入EAX,即H放入EAX
00453966 |. E8 7543FBFF CALL CRACKME1.00407CE0
0045396B |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; G放入ECX中
0045396E |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
00453971 |. BA 003A4500 MOV EDX,CRACKME1.00453A00 ; 把I Love Vegetable放如EDX
00453976 |. E8 DD07FBFF CALL CRACKME1.00404158 ; 把I Love Vegetable和G连接起来,值记为I
0045397B |. 8B55 E4 MOV EDX,DWORD PTR SS:[EBP-1C] ; 把I放入EDX
0045397E |. 58 POP EAX
0045397F |. E8 D408FBFF CALL CRACKME1.00404258 ; 把我们的试练码和I相比较,即I为注册码
00453984 |. 75 0C JNZ SHORT CRACKME1.00453992 ; 不相等就跳向失败,GameOver!!
00453986 |. B8 1C3A4500 MOV EAX,CRACKME1.00453A1C ; 注册成功...
0045398B |. E8 DC39FDFF CALL CRACKME1.0042736C
00453990 |. EB 0A JMP SHORT CRACKME1.0045399C
00453992 |> B8 303A4500 MOV EAX,CRACKME1.00453A30 ; 注册失败...
00453997 |. E8 D039FDFF CALL CRACKME1.0042736C
0045399C |> 33C0 XOR EAX,EAX
0045399E |. 5A POP EDX
0045399F |. 59 POP ECX
--------------------------------------------------------------------------------
【经验总结】
它的算法是:
用户名第一位ASCII码加1,第二位用户名ASCII码加2~~~~~~~一直到最后一位的和,记为A。
A的平方的值加上5,记为C。
C的十进制实数除以用户名位数的十进制实数的值减2记为G。
把I Love Vegetable和G的整数部分连接起来,值记为I。I即为正确的注册码。
此crackme比较简单,适合新手学习~~~
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年07月26日 15:06:15
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课