破解工具OD
http://www.winimage.com/download.htm 下载网址 怎么找下断点的这我就不多说了。我主要学习算法分析了。 004454FB 53 PUSH EBX ; //下断F2
004454FC 57 PUSH EDI
004454FD 68 01010000 PUSH 101
00445502 BF B8DE4800 MOV EDI,winimage.0048DEB8 ; ASCII "fcrjzmd"
00445507 57 PUSH EDI
00445508 68 16080000 PUSH 816
0044550D FF75 08 PUSH DWORD PTR SS:[EBP+8]
00445510 FFD6 CALL ESI ; 取用户名,并把长度送入EAX
00445512 6A 7F PUSH 7F
00445514 BB 38E24800 MOV EBX,winimage.0048E238 ; ASCII "98765432100"
00445519 53 PUSH EBX
0044551A 68 17080000 PUSH 817
0044551F FF75 08 PUSH DWORD PTR SS:[EBP+8]
00445522 FFD6 CALL ESI ; 取假码,并把长度送入EAX
00445524 57 PUSH EDI
00445525 BF 70DB4800 MOV EDI,winimage.0048DB70
0044552A 8BC3 MOV EAX,EBX
0044552C E8 2E720000 CALL winimage.0044C75F ; 关键CALL跟进
================================================================================
跟进0044C75F
0044C75F 55 PUSH EBP
0044C760 8BEC MOV EBP,ESP
0044C762 81EC 00020000 SUB ESP,200
0044C768 85FF TEST EDI,EDI
0044C76A 74 03 JE SHORT winimage.0044C76F
0044C76C 8327 00 AND DWORD PTR DS:[EDI],0
0044C76F 56 PUSH ESI
0044C770 8D8D 00FFFFFF LEA ECX,DWORD PTR SS:[EBP-100]
0044C776 E8 FBFEFFFF CALL winimage.0044C676 ; 假码第一位和20做比较
0044C77B 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; EAX=用户名
0044C77E E8 14FFFFFF CALL winimage.0044C697 ; 关键CALL跟进!!计算用户(762C78)
0044C783 8BF0 MOV ESI,EAX ; ESI=762C78
0044C785 81FE 26DDDCB8 CMP ESI,B8DCDD26 ; 762C78和B8DCDD26做比较
0044C78B 0F84 0A020000 JE winimage.0044C99B ; 相等则失败,反之继续运算。
================================================================================
跟进0044C697 0044C697 55 PUSH EBP
0044C698 8BEC MOV EBP,ESP
0044C69A 81EC 08010000 SUB ESP,108
0044C6A0 8D8D F8FEFFFF LEA ECX,DWORD PTR SS:[EBP-108]
0044C6A6 C745 FC 4C69470>MOV DWORD PTR SS:[EBP-4],winimage.0047694C
0044C6AD E8 C4FFFFFF CALL winimage.0044C676 ; 将用户名转换成大写
0044C6B2 8D85 F8FEFFFF LEA EAX,DWORD PTR SS:[EBP-108] ; 用户名地址送入EAX
0044C6B8 50 PUSH EAX ; 压入用户名
0044C6B9 FF15 20334700 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; 取用户名长度
0044C6BF 33C9 XOR ECX,ECX ; ECX=0
0044C6C1 85C0 TEST EAX,EAX ; 测试EAX
0044C6C3 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ; 保存用户名长度
0044C6C6 7E 46 JLE SHORT winimage.0044C70E ; 小于或者等于则转移
0044C6C8 53 PUSH EBX ; 压入假码
0044C6C9 56 PUSH ESI
0044C6CA 8B75 F8 MOV ESI,DWORD PTR SS:[EBP-8] ; 将用户名长度送入ESI
0044C6CD 57 PUSH EDI
0044C6CE 8DBD F8FEFFFF LEA EDI,DWORD PTR SS:[EBP-108] ; 用户名地址送入EDI
0044C6D4 83EF 03 SUB EDI,3 ; EDI=EDI-3
0044C6D7 8BC1 MOV EAX,ECX ; EAX=0
0044C6D9 6A 0E PUSH 0E ; 压入E
0044C6DB 99 CDQ ; 双字扩展
0044C6DC 5B POP EBX ; 弹出E到EBX
0044C6DD F7FB IDIV EBX ; 除以E(带符号除法)
0044C6DF 85D2 TEST EDX,EDX ; 测试EDX
0044C6E1 75 03 JNZ SHORT winimage.0044C6E6
0044C6E3 6A 27 PUSH 27 ; 压入27
0044C6E5 5E POP ESI ; 弹出27到ESI
0044C6E6 8D41 03 LEA EAX,DWORD PTR DS:[ECX+3] ; ECX+3地址送入EAX
0044C6E9 0FB61407 MOVZX EDX,BYTE PTR DS:[EDI+EAX] ; 依次取用户名的ASCII码送入EDX
0044C6ED 0FAFD6 IMUL EDX,ESI ; EDX=EDX*ESI(带符号乘法)
0044C6F0 0155 FC ADD DWORD PTR SS:[EBP-4],EDX ; 0012E944=47694C+EDX
0044C6F3 6A 0E PUSH 0E ; 压入E
0044C6F5 99 CDQ ; 双字扩展
0044C6F6 5B POP EBX ; 弹出E到EBX
0044C6F7 F7FB IDIV EBX ; 除以E(带符号除法)
0044C6F9 85D2 TEST EDX,EDX ; 测试EDX
0044C6FB 74 05 JE SHORT winimage.0044C702
0044C6FD 8D3476 LEA ESI,DWORD PTR DS:[ESI+ESI*2] ; ESI=ESI+ESI*2
0044C700 EB 03 JMP SHORT winimage.0044C705
0044C702 6BF6 07 IMUL ESI,ESI,7
0044C705 41 INC ECX ; ECX=ECX+1
0044C706 3B4D F8 CMP ECX,DWORD PTR SS:[EBP-8] ; ECX和7做比较
0044C709 ^ 7C CC JL SHORT winimage.0044C6D7 ; 小于转移
0044C70B 5F POP EDI
0044C70C 5E POP ESI
0044C70D 5B POP EBX
0044C70E 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0044C711 C9 LEAVE
0044C712 C3 RETN
=================================================================================
如下是我列的用户名算法公式:(乱来的。。可能只有我看得懂了。) F C R J Z M D (用户名)
46 43 52 4A 5A 4D 44 (ASCII码)
27 (27+27*2)=75 (75+75*2)=15F (15F+15F*2)=41D (41D+41D*2)=C57 (C57+C57*2)=2505 (2505+2505*2)=6F0F
*
---------------------------------------------------------------------------------------------------------------------------+47694C=762C78(最后得出的值)
AAA 1E9F 706E 13062 45696 B2281 1D7FFC
好啦知道用户名的运算,运算完就返回了继续下面的运算
0044C783 8BF0 MOV ESI,EAX ; ESI=762C78
0044C785 81FE 26DDDCB8 CMP ESI,B8DCDD26 ; 762C78和B8DCDD26做比较
0044C78B 0F84 0A020000 JE winimage.0044C99B ; 相等则失败,反之继续运算。
0044C791 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C797 50 PUSH EAX
0044C798 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C79E 56 PUSH ESI
0044C79F 50 PUSH EAX
0044C7A0 E8 6EFFFFFF CALL winimage.0044C713 ; 1、注册码运算(762C7B)
0044C7A5 59 POP ECX
0044C7A6 59 POP ECX
0044C7A7 50 PUSH EAX
0044C7A8 E8 C35A0100 CALL winimage.00462270
0044C7AD 85C0 TEST EAX,EAX
0044C7AF 59 POP ECX
0044C7B0 59 POP ECX
0044C7B1 0F84 AC010000 JE winimage.0044C963
0044C7B7 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C7BD 50 PUSH EAX
0044C7BE 8D86 48190514 LEA EAX,DWORD PTR DS:[ESI+14051948] ; EAX=762C78+14051948=147B45C0
0044C7C4 50 PUSH EAX
0044C7C5 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C7CB 50 PUSH EAX
0044C7CC E8 42FFFFFF CALL winimage.0044C713 ; 2、注册码运算(147845C0)
0044C7D1 59 POP ECX
0044C7D2 59 POP ECX
0044C7D3 50 PUSH EAX
0044C7D4 E8 975A0100 CALL winimage.00462270
0044C7D9 85C0 TEST EAX,EAX
0044C7DB 59 POP ECX
0044C7DC 59 POP ECX
0044C7DD 0F84 80010000 JE winimage.0044C963
0044C7E3 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C7E9 50 PUSH EAX
0044C7EA 8D86 54190617 LEA EAX,DWORD PTR DS:[ESI+17061954] ; EAX=762C78+17061954=177C45CC
0044C7F0 50 PUSH EAX
0044C7F1 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C7F7 50 PUSH EAX
0044C7F8 E8 16FFFFFF CALL winimage.0044C713 ; 3、注册码运算(177C45CC)
0044C7FD 59 POP ECX
0044C7FE 59 POP ECX
0044C7FF 50 PUSH EAX
0044C800 E8 6B5A0100 CALL winimage.00462270
0044C805 85C0 TEST EAX,EAX
0044C807 59 POP ECX
0044C808 59 POP ECX
0044C809 0F84 54010000 JE winimage.0044C963
0044C80F 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C815 50 PUSH EAX
0044C816 8D86 81190510 LEA EAX,DWORD PTR DS:[ESI+10051981] ; EAX=762C78+10051981=107B45F9
0044C81C 50 PUSH EAX
0044C81D 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C823 50 PUSH EAX
0044C824 E8 EAFEFFFF CALL winimage.0044C713 ; 4、注册码运算(107845F9)
0044C829 59 POP ECX
0044C82A 59 POP ECX
0044C82B 50 PUSH EAX
0044C82C E8 3F5A0100 CALL winimage.00462270
0044C831 85C0 TEST EAX,EAX
0044C833 59 POP ECX
0044C834 59 POP ECX
0044C835 0F84 55010000 JE winimage.0044C990
0044C83B 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C841 50 PUSH EAX
0044C842 8D86 95190104 LEA EAX,DWORD PTR DS:[ESI+4011995] ; EAX=762C78+4011995=477460D
0044C848 50 PUSH EAX
0044C849 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C84F 50 PUSH EAX
0044C850 E8 BEFEFFFF CALL winimage.0044C713 ; 5、注册码运算(477460D)
0044C855 59 POP ECX
0044C856 59 POP ECX
0044C857 50 PUSH EAX
0044C858 E8 135A0100 CALL winimage.00462270
0044C85D 85C0 TEST EAX,EAX
0044C85F 59 POP ECX
0044C860 59 POP ECX
0044C861 0F84 FC000000 JE winimage.0044C963
0044C867 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C86D 50 PUSH EAX
0044C86E 8D86 97190602 LEA EAX,DWORD PTR DS:[ESI+2061997] ; EAX=762C78+2061997=27C460F
0044C874 50 PUSH EAX
0044C875 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C87B 50 PUSH EAX
0044C87C E8 92FEFFFF CALL winimage.0044C713 ; 6、注册码运算(27C460F)
0044C881 59 POP ECX
0044C882 59 POP ECX
0044C883 50 PUSH EAX
0044C884 E8 E7590100 CALL winimage.00462270
0044C889 85C0 TEST EAX,EAX
0044C88B 59 POP ECX
0044C88C 59 POP ECX
0044C88D 0F84 FD000000 JE winimage.0044C990
0044C893 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C899 50 PUSH EAX
0044C89A 8D86 99190912 LEA EAX,DWORD PTR DS:[ESI+12091999] ; EAX=762C78+12091999=127F4611
0044C8A0 50 PUSH EAX
0044C8A1 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C8A7 50 PUSH EAX
0044C8A8 E8 66FEFFFF CALL winimage.0044C713 ; 7、注册码运算(127F4611)
0044C8AD 59 POP ECX
0044C8AE 59 POP ECX
0044C8AF 50 PUSH EAX
0044C8B0 E8 BB590100 CALL winimage.00462270
0044C8B5 85C0 TEST EAX,EAX
0044C8B7 59 POP ECX
0044C8B8 59 POP ECX
0044C8B9 0F84 A4000000 JE winimage.0044C963
0044C8BF 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C8C5 50 PUSH EAX
0044C8C6 8D86 04200616 LEA EAX,DWORD PTR DS:[ESI+16062004] ; EAX=762C78+16062004=167C4C7C
0044C8CC 50 PUSH EAX
0044C8CD 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C8D3 50 PUSH EAX
0044C8D4 E8 3AFEFFFF CALL winimage.0044C713 ; 8、注册码运算(167C4C7C)
0044C8D9 59 POP ECX
0044C8DA 59 POP ECX
0044C8DB 50 PUSH EAX
0044C8DC E8 8F590100 CALL winimage.00462270
0044C8E1 85C0 TEST EAX,EAX
0044C8E3 59 POP ECX
0044C8E4 59 POP ECX
0044C8E5 0F84 A5000000 JE winimage.0044C990
0044C8EB 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C8F1 50 PUSH EAX
0044C8F2 8D86 02200421 LEA EAX,DWORD PTR DS:[ESI+21042002] ; EAX=762C78+21042002=217A4C7A
0044C8F8 50 PUSH EAX
0044C8F9 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C8FF 50 PUSH EAX
0044C900 E8 0EFEFFFF CALL winimage.0044C713 ; 9、注册码运算(217A4C7A)
0044C905 59 POP ECX
0044C906 59 POP ECX
0044C907 50 PUSH EAX
0044C908 E8 63590100 CALL winimage.00462270
0044C90D 85C0 TEST EAX,EAX
0044C90F 59 POP ECX
0044C910 59 POP ECX
0044C911 74 50 JE SHORT winimage.0044C963
0044C913 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C919 50 PUSH EAX
0044C91A 8D86 04200613 LEA EAX,DWORD PTR DS:[ESI+13062004] ; EAX=762C78+13062004=137C4C7C
0044C920 50 PUSH EAX
0044C921 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C927 50 PUSH EAX
0044C928 E8 E6FDFFFF CALL winimage.0044C713 ; 10、注册码运算(137C4C7C)
0044C92D 59 POP ECX
0044C92E 59 POP ECX
0044C92F 50 PUSH EAX
0044C930 E8 3B590100 CALL winimage.00462270
0044C935 85C0 TEST EAX,EAX
0044C937 59 POP ECX
0044C938 59 POP ECX
0044C939 74 55 JE SHORT winimage.0044C990
0044C93B 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C941 50 PUSH EAX
0044C942 8D86 05201109 LEA EAX,DWORD PTR DS:[ESI+9112005] ; EAX=762C78+9112005=9874C7D
0044C948 50 PUSH EAX
0044C949 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C94F 50 PUSH EAX
0044C950 E8 BEFDFFFF CALL winimage.0044C713 ; 11、注册码运算(9B74C7D)
0044C955 59 POP ECX
0044C956 59 POP ECX
0044C957 50 PUSH EAX
0044C958 E8 13590100 CALL winimage.00462270
0044C95D 85C0 TEST EAX,EAX
0044C95F 59 POP ECX
0044C960 59 POP ECX
0044C961 75 05 JNZ SHORT winimage.0044C968
0044C963 33C0 XOR EAX,EAX
0044C965 40 INC EAX
0044C966 EB 35 JMP SHORT winimage.0044C99D
0044C968 8D85 00FFFFFF LEA EAX,DWORD PTR SS:[EBP-100]
0044C96E 50 PUSH EAX
0044C96F 81C6 05201124 ADD ESI,24112005 ; ESI=762C78+24112005=24874C7D
0044C975 8D85 00FEFFFF LEA EAX,DWORD PTR SS:[EBP-200]
0044C97B 56 PUSH ESI
0044C97C 50 PUSH EAX
0044C97D E8 91FDFFFF CALL winimage.0044C713 ; 12、注册码运算(24B74C7D)
0044C982 59 POP ECX
0044C983 59 POP ECX
0044C984 50 PUSH EAX
0044C985 E8 E6580100 CALL winimage.00462270
0044C98A 85C0 TEST EAX,EAX
0044C98C 59 POP ECX
0044C98D 59 POP ECX
0044C98E 75 0B JNZ SHORT winimage.0044C99B
0044C990 33C0 XOR EAX,EAX
0044C992 40 INC EAX
0044C993 85FF TEST EDI,EDI
0044C995 74 06 JE SHORT winimage.0044C99D
0044C997 8907 MOV DWORD PTR DS:[EDI],EAX
0044C999 EB 02 JMP SHORT winimage.0044C99D
0044C99B 33C0 XOR EAX,EAX
0044C99D 5E POP ESI
0044C99E C9 LEAVE
0044C99F C3 RETN
==================================================================================
1~12都调用相同的CALL来运算的。在这里我们就先看一下00447133里面到底有什么东东了!!跟进。。。 0044C713 55 PUSH EBP
0044C714 8BEC MOV EBP,ESP
0044C716 83EC 10 SUB ESP,10
0044C719 56 PUSH ESI
0044C71A FF75 0C PUSH DWORD PTR SS:[EBP+C]
0044C71D 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
0044C720 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0044C723 68 14DB4700 PUSH winimage.0047DB14 ; ASCII "%lX"
0044C728 50 PUSH EAX
0044C729 FF15 14354700 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; USER32.wsprintfA
0044C72F 8A45 F0 MOV AL,BYTE PTR SS:[EBP-10]
0044C732 83C4 0C ADD ESP,0C
0044C735 84C0 TEST AL,AL
0044C737 74 1D JE SHORT winimage.0044C756
0044C739 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10]
0044C73C 2BCE SUB ECX,ESI
0044C73E 3C 38 CMP AL,38 ; AL和38做比较
0044C740 75 04 JNZ SHORT winimage.0044C746 ; 不等转移
0044C742 04 0A ADD AL,0A ; 相等则AL加A
0044C744 EB 06 JMP SHORT winimage.0044C74C ; 无条件转移
0044C746 3C 42 CMP AL,42 ; AL和42做比较
0044C748 75 02 JNZ SHORT winimage.0044C74C ; 不等转移
0044C74A 04 F6 ADD AL,0F6 ; 相等则AL和F6相加
0044C74C 8806 MOV BYTE PTR DS:[ESI],AL ; 保存AL到0012E954
0044C74E 46 INC ESI ; ESI=ESI+1
0044C74F 8A0431 MOV AL,BYTE PTR DS:[ECX+ESI]
0044C752 84C0 TEST AL,AL
0044C754 ^ 75 E8 JNZ SHORT winimage.0044C73E
0044C756 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0044C759 C606 00 MOV BYTE PTR DS:[ESI],0
0044C75C 5E POP ESI
0044C75D C9 LEAVE
0044C75E C3 RETN
=================================================================================
从上面这不难看出这个CALL的作用是将运算出的注册码逐个和38(8)、42(B)做比较,和38相等的则和A相加,和42相等的则和F6相加取低位AL的值。
再从044C783往下看我看到相同算法有12处之多,
762C78
762C78+14051948=147B45C0
762C78+17061954=177C45CC
762C78+10051981=107B45F9
762C78+4011995=477460D
762C78+2061997=27C460F
762C78+12091999=127F4611
762C78+16062004=167C4C7C
762C78+21042002=217A4C7A
762C78+13062004=137C4C7C
762C78+9112005=9874C7D
762C78+24112005=24874C7D
通过和38、42比较相加就得出真码了。
仔细看了一下762C78后面加的这一串数字全部竟是日期来的,而且这个12组加得的值都是注册码来的。晕哦。前面11组为标准的注册码,最一组为专业版的注册码。
通过下面的这个跳转来判断是否为专为版或是标准版的。
================================================================================
0044C961 75 05 JNZ SHORT winimage.0044C968 ; 不等则转移为专业版,相等则转移标准版!!
0044C963 33C0 XOR EAX,EAX
0044C965 40 INC EAX
0044C966 EB 35 JMP SHORT winimage.0044C99D ; 转移到标准版。
注册成功注册表信息如下:
[HKEY_CURRENT_USER\Software\WinImage]
"NameRegistered"="fcrjzmd"
"CodeRegistered"="24B74C7D" 标准版注册码:
762C7B、147845C0、177C45CC、107845F9、477460D、27C460F、127F4611、167C4C7C、217A4C7A、137C4C7C、9874C7D、
专业版注册码:
24874C7D
结后言:
总的来说这个软件算法很简单适合我等初学者学习算法,哎!夜深了一口气写完破文有点凌乱哦真是不好意思啦,眼悃了脑袋有点乱了想不出那么多,总结了过于简单文风不好希望
大侠们不要见怪了。我要睡了现在3点钟了,谢谢您能坚持看完我这个菜文。 fcrjzmd
3:01 2006-1-6
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!