本帖最后由 csftech 于 2019-2-17 00:05 编辑
这个程序很有意思。
取电脑日期(月,日)及用户输入之商数余数,进行后续两次 MD5 比对杂凑值。
暴力破解出来 e_rr0r 为 1738,_j_mp 为 17,也就是说电脑日期(日)得设定为 17。
杂凑值正确则校验余数是否为 706,余数校验中的 MD5 计算没有意义,只是再次确认余数是否为 706 。
这其实算 KeyGenMe,虽然还是可以 CM 暴力破解。
另外提一下 Python 2 不要用 input() 函式。(危险)
[Python] 纯文本查看 复制代码 import time, sys, hashlib
status = 0
# MD5 hash
ca11 = 2813401333L
m0v = str(hex(ca11))[2:10] # a7b118f5
jumP = 3548329217L
a_dd = str(hex(jumP))[2:10] # d37f3501
_call = 1620897738
syS = str(hex(_call))[2:10] # 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[0:16] == str(hex(m_1))[2:10] + str(hex(m_2))[2:10]: # 'd30e1207' + '5d10d42b'
status = 1
key_code = eval('7695') + 8 # 7703
elif nu1l[5:9] == str(hex(m_3))[2:10]: # 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[0:12] == str(hex(2036215846))[2:10] + str(hex(5692103260L))[2:10]: # '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 日)
[Plain Text] 纯文本查看 复制代码 17360706
17370706
17680706
17690706
19920706
19930706
20240706
20250706
672720706
672730706
|