VS写的一个挺好玩的CrackMe更正版

文章资讯 2020-01-18 13:15:15

VS写的一个挺好玩的CrackMe更正版

没有装mfc库的,可以使用这个链接下载,能运行。
链接:https://pan.baidu.com/s/1cfi5bCX3DAPxRfUu2zJ6uQ 提取码:fpq4

import os
import math
 
szName = input("请输入用户名:")
 
dwNameNum = 0
for i in range(len(szName)):
    dwNameNum = dwNameNum + ord(szName[i])
    dwNameNum = dwNameNum * 10
dwNameNum = dwNameNum ^ 0x12345678
 
# 爆破密码
nNum = 0;
while True:
    szCode = str(nNum)
    dwCodeNum = 0
    for i in range(1,len(szCode),2):
        dwCodeNum = dwCodeNum + ord(szCode[i])
    dwCodeNum = dwCodeNum * nNum
    if (dwCodeNum > dwNameNum-100) and (dwCodeNum < dwNameNum+100):
        print(nNum)
        break
    nNum += 1

账号:jixun
注册码:1036258Z07

账号:jixun
注册码:450547@jixun66-FwE

账号:jixun
注册码:325526@52pojie@jixun66$$
凑合着看,笔记做得比较乱… 代码基本上是 js 在浏览器跑

code = '0123456789abcdef'.split('')
code.filter((x, i) => i % 2 == 1).reduce((sum, v) => sum + v.charCodeAt(), 0)
=565 (0x235)

565 * 123456789 = 69753085785 (0x103d9b9f59)
(转 32 位整型) 69753085785|0 = 1033609049 (0x3D9B9F59)

serial_sum = 偶数位字符代码综合 * 整体作为整数解析时的值

serial_sum - 100 <= dword_12977FC <= serial_sum + 100

用户名 = jixun
算出哈希:
012977FC  E8 9C 87 12
dword_12977FC = 0x12879cE8 (310877416)

v = code => code.split('').filter((x, i) => i % 2 == 1).reduce((sum, v) => sum + v.charCodeAt(), 0) * parseInt(code, 10) - 310877416;

满足表达式 -100 <= v(序列号) <= 100 即可。

sub_1291FF0: (base = 0x1290000)

if (dword_12977FC < (unsigned int)(serial_sum - 100)) {
    fail;
}

if (dword_12977FC > (unsigned int)(serial_sum + 100)) {
    fail;
}

g_flag = 100;