这是一个折磨电脑的CrackMe (有后续想法但没写完,这是最初版,python写的……很简陋)
本帖最后由 .·.·. 于 2017-3-14 21:18 编辑需要python3(我是用3.5编写的)
成功和失败的操作如下图:
验证码是数字,不支持其他格式
表示大约就是这样了……
以及如果破解了可以把涂掉的那一小段填回去
def alert():
print("计算错误……如果程序没问题应该是你的码算错了")
input("请按回车退出程序");
raise SystemExit()
def convert(what):
val=''
vals='alert()'
if type(what)==type(1):
tmp=what%256
what//=256
while 32<=tmp&tmp<=126:
val+=chr(tmp)
tmp=what%256
what//=256;
else:
if what==0:vals=val
return vals
elif type(what)==type('1'):
val=0;tmp=1
for d in :val+=d*tmp;tmp*=256
return val
else:alert()
code=1637204578211396448030494090498193460136922475389444481926256908002871980560408179032683048573011810797211728378171299526430254230961401110898052670520628926488383029786272673885842802175042752160581007938095961183210823023044308677052417098206728966803609183860798971231508153562103569831638656262172333054650339873077150006557494309595404299163285820061490575549876580899319076281887155301487530594705560059953316740883744329072378569182614329851826141387091294451111392798396277268830771733389237697904696117626617338523082244311666119078592153263508520683863426147544941288934046697028800171414598381995597349414639130976251757728404290883773256582818030470204771441292597632471295752059418150096802723658372990302531260792420211195442362180743680548211945726610767963643967064767011591197359321609932574085241614539055464921784041772369295051882516667734029393869635908363373447494394859803327966876198870256189202764849411436522564341416381584130488799402388940171378097190770881846616652506109369930313540890147045027489691267058501276204479454438387102415260846751425667277659289875022240755733837496119205677476465974444090417766709422560683366633492140051953373752278557749249604335301998155886285999330217959322364956626487
a=2**2046*5+1113;a*=2**2047*3+115
mod=a
a=int(input("请输入注册码"))
if a<2147483647:
while a>0:
c=code
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=c;code%=mod;
a-=1
eval(convert(code))
if code!=329812182381753086714043622274082346626084492572232674725132990927195856543301918232:print("你可能遇到了假破解")
话说还是写一些破解吧……
编写这个CrackMe需要用RSA知识……然而破解只需要……
try: ... except SystemExit()
如果需要得到注册码……可以预先记录a的值
本帖最后由 .·.·. 于 2017-3-14 22:37 编辑
我好想世界末日 发表于 2017-3-14 20:24
这个不是几个月前看雪的题吗?
{:17_1054:}应该不是吧……
每一个参数都是我自己算出来的
调错用了两三个小时的……
以及
原帖在哪里
其实还有一个PowerMod的函数我没写出来……程序里面只执行了类似x=x**65537%mod(然而速度快很多)的指令
话说这个题如果硬破{:17_1051:}……输入正确注册码似乎需要验证80s……颇有些论坛600s的意念在里面
所以大家可以想一些巧妙办法……
话说,如果程序的全部代码都用类似方法进行加密……相当想知道破解组到底会发一个几百k的补丁……还是把破解完了之后的程序(比如几十G的游戏)直接发出去
最后写一些破解吧……
把alert的输出改掉
然后借助题目暴力判断就好了
改完以后的程序长这个样子
qwe=0;
def alert():
if (b-a)%100==0:print((b-a)//100,'is complete')
raise SystemExit()
def convert(what):
val=''
vals='alert()'
if type(what)==type(1):
tmp=what%256
what//=256
while 32<=tmp&tmp<=126:
val+=chr(tmp)
tmp=what%256
what//=256;
else:
if what==0:vals=val
return vals
elif type(what)==type('1'):
val=0;tmp=1
for d in :val+=d*tmp;tmp*=256
return val
else:alert()
code=1637204578211396448030494090498193460136922475389444481926256908002871980560408179032683048573011810797211728378171299526430254230961401110898052670520628926488383029786272673885842802175042752160581007938095961183210823023044308677052417098206728966803609183860798971231508153562103569831638656262172333054650339873077150006557494309595404299163285820061490575549876580899319076281887155301487530594705560059953316740883744329072378569182614329851826141387091294451111392798396277268830771733389237697904696117626617338523082244311666119078592153263508520683863426147544941288934046697028800171414598381995597349414639130976251757728404290883773256582818030470204771441292597632471295752059418150096802723658372990302531260792420211195442362180743680548211945726610767963643967064767011591197359321609932574085241614539055464921784041772369295051882516667734029393869635908363373447494394859803327966876198870256189202764849411436522564341416381584130488799402388940171378097190770881846616652506109369930313540890147045027489691267058501276204479454438387102415260846751425667277659289875022240755733837496119205677476465974444090417766709422560683366633492140051953373752278557749249604335301998155886285999330217959322364956626487
a=2**2046*5+1113;a*=2**2047*3+115
mod=a
a=int(input("请输入注册码"))
b=a;
if a<2147483647:
while a>0:
c=code
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;code*=code;code%=mod;
code*=c;code%=mod;
a-=1
try:
eval(convert(code))
except:
continue
print('\n','\na=',b-a,'is correct!\n','\n')
eval(convert(code))
if code!=329812182381753086714043622274082346626084492572232674725132990927195856543301918232:print("你可能遇到了假破解")
是的这很强大……然而……如果主楼的程序也被改掉了会怎么样呢?
Egoista丶 发表于 2017-3-16 18:07
借鉴一下,其实我也只是对这些一知半解
我也是
因而胡乱开了一个坑
这个破解的最大难点就是……
哪怕正常用户也需要解一分钟{:17_1054:} 楼主威武 看起来挺厉害的哈
{:301_1002:}膜拜大神 厉害了,,,, 喝水不忘打井人,感谢分享! 多谢大佬分享。谢谢 这个不是几个月前看雪的题吗? 看起来挺厉害的哈{:301_1000:} 小白表示不懂这是什么