发一个CM,目测较难【已被破解】
本帖最后由 zcm2005 于 2017-9-3 10:37 编辑使用说明:用户号码是大于等于0、小于等于4294967295的数字,密码是十五位数字,都不能包含字母。
有兴趣可以尝试找出算法。
原版例子:
用户号码:1 密码:174094882455171
修改例子:
用户号码:1 密码:351391667411090
加壳用的是se,也有没加壳的版本。
失败例子:
http://ww3.sinaimg.cn/large/0060lm7Tgy1fj30gm7aqnj30r70e8a9z.jpg
成功例子:
http://ww3.sinaimg.cn/large/0060lm7Tgy1fj30gm6spyj30r70e874k.jpg
源码:http://pan.baidu.com/s/1qYiEnj2(密码:pnE$*c)eCAY+ke()
修改了一些东西,增加了难度,无壳。
源码:http://pan.baidu.com/s/1mhM1Nvy(密码:+v91pgQYn=%!S0a) 本帖最后由 zbnysjwsnd8 于 2017-9-3 10:41 编辑
zcm2005 发表于 2017-9-3 10:35
应该是对的,中间我也不太懂……但我不是这样编的。
rand()/3%10我的是这样
我只是把代码优化了一下
你那个用了链表
我没加到keygen里面。
还有那个乘法的 我也不知道翻译成什么样的C代码才好。
所以就直接用汇编写了
00FF142F|.FF75 C8 push ; /seed = 0x0
00FF1432|.FF15 3431FF00 call dword ptr ds:[<&api-ms-win-crt-util>; \srand
00FF1438|.6A 08 push 0x8
00FF143A|.E8 650C0000 call hardCM.00FF20A4
00FF143F|.8BD8 mov ebx,eax
00FF1441|.895D D4 mov ,ebx
00FF1444|.FF15 3831FF00 call dword ptr ds:[<&api-ms-win-crt-util>; [rand
00FF144A|.8BC8 mov ecx,eax
00FF144C|.B8 56555555 mov eax,0x55555556
00FF1451|.F7E9 imul ecx ;hardCM.<ModuleEntryPoint>
00FF1453|.B9 0A000000 mov ecx,0xA
00FF1458|.8BC2 mov eax,edx ;hardCM.<ModuleEntryPoint>
00FF145A|.C1E8 1F shr eax,0x1F
00FF145D|.03C2 add eax,edx ;hardCM.<ModuleEntryPoint>
00FF145F|.99 cdq
00FF1460|.F7F9 idiv ecx ;hardCM.<ModuleEntryPoint>
00FF1462|.B9 0E000000 mov ecx,0xE
00FF1467|.8913 mov dword ptr ds:,edx ;hardCM.<ModuleEntryPoint>
00FF1469|.E8 B2FCFFFF call hardCM.00FF1120
00FF1120/$56 push esi ;hardCM.<ModuleEntryPoint>
00FF1121|.57 push edi ;hardCM.<ModuleEntryPoint>
00FF1122|.6A 08 push 0x8 ; /Arg1 = 00000008
00FF1124|.8BF9 mov edi,ecx ; |hardCM.<ModuleEntryPoint>
00FF1126|.E8 790F0000 call hardCM.00FF20A4 ; \hardCM.012020A4
00FF112B|.83C4 04 add esp,0x4
00FF112E|.8BF0 mov esi,eax
00FF1130|.FF15 3831FF00 call dword ptr ds:[<&api-ms-win-crt-util>; [rand
00FF1136|.8BD0 mov edx,eax
00FF1138|.B9 0A000000 mov ecx,0xA
00FF113D|.B8 56555555 mov eax,0x55555556
00FF1142|.F7EA imul edx ;hardCM.<ModuleEntryPoint>
00FF1144|.8BC2 mov eax,edx ;hardCM.<ModuleEntryPoint>
00FF1146|.C1E8 1F shr eax,0x1F
00FF1149|.03C2 add eax,edx ;hardCM.<ModuleEntryPoint>
00FF114B|.99 cdq
00FF114C|.F7F9 idiv ecx ;hardCM.<ModuleEntryPoint>
00FF114E|.8916 mov dword ptr ds:,edx ;hardCM.<ModuleEntryPoint>
00FF1150|.83FF 01 cmp edi,0x1
00FF1153|.7C 10 jl short hardCM.00FF1165
00FF1155|.8D4F FF lea ecx,dword ptr ds:
00FF1158|.E8 C3FFFFFF call hardCM.00FF1120
00FF115D|.8946 04 mov dword ptr ds:,eax
00FF1160|.8BC6 mov eax,esi ;hardCM.<ModuleEntryPoint>
00FF1162|.5F pop edi ;kernel32.74F738F4
00FF1163|.5E pop esi ;kernel32.74F738F4
00FF1164|.C3 retn
00FF1165|>5F pop edi ;kernel32.74F738F4
00FF1166|.C746 04 00000>mov dword ptr ds:,0x0
00FF116D|.8BC6 mov eax,esi ;hardCM.<ModuleEntryPoint>
00FF116F|.5E pop esi ;kernel32.74F738F4
00FF1170\.C3 retn
本帖最后由 zbnysjwsnd8 于 2017-9-2 15:47 编辑
我看的CM是修改版的(Release.zip)。
2308
517410618515878
Keygen:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned int User;
int r;
int key;
scanf("%d",&User);
if(User < 0)
return 0;
if(User > 4294967295)
return 0;
srand(User);
for(int i = 0;i < 15;i++)
{
r = rand();
_asm
{
mov ecx,r
mov eax,0x55555556
imul ecx
mov r,edx
}
r = r + (r >> 0x1F);
r = r % 10;
key = r;
}
for(int i = 0;i < 15;i++)
printf("%d",key);
while(1);
return 0;
} 秒破,没什么难度! 飘一飘 发表于 2017-9-1 17:06
秒破,没什么难度!
哇!那发一组密码看看 我猜待会会有人问cm是什么 技术的交流呀 电脑没装VS2015,楼主能不能编译一个Release的或者不需要运行库版本的 苏紫方璇 发表于 2017-9-1 22:59
电脑没装VS2015,楼主能不能编译一个Release的或者不需要运行库版本的
已经加上了,但是只有修改后的了,原来的没了 慕容影 发表于 2017-9-2 11:24
死码还是动态的
由用户号码决定密码