[CM] 最近学习python,写了一个小程序
本帖最后由 高苗苗 于 2019-2-16 12:02 编辑学习python,写了个小程序,也不知道算不算CM{:1_924:}
若输入正确会有 SUCCESS 提示字样,失败则提示 FAILED
(由于使用py2exe,后再使用单文件制作打包了程序,所以大小超过了1M,只能传连接了)
下载地址https://www.lanzouj.com/i35lued
本帖最后由 csftech 于 2019-2-17 00:05 编辑
这个程序很有意思。
取电脑日期(月,日)及用户输入之商数余数,进行后续两次 MD5 比对杂凑值。
暴力破解出来 e_rr0r 为 1738,_j_mp 为 17,也就是说电脑日期(日)得设定为 17。
杂凑值正确则校验余数是否为 706,余数校验中的 MD5 计算没有意义,只是再次确认余数是否为 706 。
这其实算 KeyGenMe,虽然还是可以 CM 暴力破解。
另外提一下 Python 2 不要用 input() 函式。(危险)
import time, sys, hashlib
status = 0
# MD5 hash
ca11 = 2813401333L
m0v = str(hex(ca11)) # a7b118f5
jumP = 3548329217L
a_dd = str(hex(jumP)) # d37f3501
_call = 1620897738
syS = str(hex(_call)) # 609cefca
cal1 = 18381427
t0m = str(cal1) # 18381427
# unknown
PuSh = 2694406661L
key_code = PuSh + 26 # 2694406687
# date
sdk_1 = time.localtime(time.time()).tm_mon # month
_j_mp = time.localtime(time.time()).tm_mday # correct one is 17 (bruteforce)
Ca1l = sdk_1 % 13 # month
C_cl = (Ca1l + 34323) % 17 # Ca1l % 17 = month (34323 % 17 = 0)
# user input and verification
user_input = input('')
user_input_quotient = user_input / 10000
user_input_remainder = user_input % 10000
err0r = C_cl + user_input_quotient
e_rr0r = err0r & 65246
cfgh = str(e_rr0r) + '_52_pojie' # correct e_rr0r is 1738 (bruteforce)
ae = hashlib.md5()
ae.update(cfgh)
mv_0 = ae.hexdigest()
emp_0 = mv_0 + '_52_pojie' + str(_j_mp)
ssf = hashlib.md5()
ssf.update(emp_0)
emp_0 = ssf.hexdigest()
if emp_0 == m0v + a_dd + syS + t0m:
if user_input_remainder + 3 - 2 == (user_input_remainder & 706) + 1:
gtt = hashlib.md5()
gtt.update(str(user_input_remainder) + 'jmp')
nu1l = gtt.hexdigest()
m_1 = 3540914695L
m_2 = 1561383979
m_3 = 8309
if nu1l == str(hex(m_1)) + str(hex(m_2)): # 'd30e1207' + '5d10d42b'
status = 1
key_code = eval('7695') + 8 # 7703
elif nu1l == str(hex(m_3)): # 2075
status = 2
else:
status = 3
else: # dead end
key_code = 2899
wfrr = hashlib.md5()
wfrr.update(str(user_input_remainder) + 'call')
nul1 = wfrr.hexdigest()
if nul1 == str(hex(2036215846)) + str(hex(5692103260L)): # '795e3026' + '153469a5'
status = 1
else:
status = 4
else:
print 'Error'
if status > 0 and status < 3:
key_code = 59
print 'SUCCESS', status
else:
key_code = 50
print 'FAILED', status
end__flag = raw_input('Press any key to exit...')
文末附上 keygen。
补充:
MD5(MD5('1738' + '_52_pojie') + '_52_pojie' + '17') = a7b118f5d37f3501609cefca18381427
MD5('706' + 'jmp') = d30e12075d10d42b93b6ff129b7ad923
总共 ∞ 组有效 Key,要修改日期
再补充:
暴力破解 e_rr0r 为 1738,但
err0r = C_cl + user_input_quotient
e_rr0r = err0r & 65246
由于 AND 65246,所以 err0r 总共有 ∞ 组可能性 (1738, 1739, 1770, ..., 67531, 67562, 67563, ...) 让 e_rr0r 为 1738
C_cl 为月份。
keygen 只使用第一组 1738。
user_input = (1738 - C_cl) * 10000 + 706
在这边给予几组可用Key:(将电脑日期更改为 2 月 17 日)
17360706
17370706
17680706
17690706
19920706
19930706
20240706
20250706
672720706
672730706
sophmore8 发表于 2019-2-16 13:11
我的热心值怎么是0啊
多发贴,其他人评分就有了 python是怎么生成EXE文件的?
super001 发表于 2019-2-16 12:17
python是怎么生成EXE文件的?
也是通过第三方打包 pyinstaller百度去吧 很想破你的Crackme 可惜reverse还是入门水平。 密码看起来不是string型,应该是int型,电脑没装python环境,不然应该可以unpy2exe来编程pyc文件在反编译能够得出源码。
l403091644 发表于 2019-2-16 13:24
密码看起来不是string型,应该是int型,电脑没装python环境,不然应该可以unpy2exe来编程pyc文件在反编译能 ...
想问下怎么拿到pyc文件的,我用pyinstxtractor不能把exe反编译 超大的橙子 发表于 2019-2-16 14:01
想问下怎么拿到pyc文件的,我用pyinstxtractor不能把exe反编译
https://github.com/4w4k3/rePy2exe 超大的橙子 发表于 2019-2-16 14:01
想问下怎么拿到pyc文件的,我用pyinstxtractor不能把exe反编译
我没有python环境,成功了的话,给我也发一下。我是直接解压缩包得到的exe然后用记事本打开的。 潇洒超人 发表于 2019-2-16 12:23
很想破你的Crackme 可惜reverse还是入门水平。
我也是菜鸟,慢慢来,加油