luliucheng 发表于 2023-1-14 20:13

一个网络验证CM

这是一个Python制作的网络验证CM,已使用pyinstaller打包。破解目标是像这里所说的一样,想办法把验证请求重定向到本地,再构造合适的数据来破解。此CM的运行方式:解压后,请在“CrackMe.exe”所在目录下打开命令提示符,输入“CrackMe 密码”(不带引号),程序会给出运行结果(如果破解成功程序会提示“密码正确!”)。你需要修改这个程序目录下的1个文件,且不是exe本体来完成破解。另外,在破解时如果找不出破解位置可以使用抓包工具辅助,但不要使用改包工具。欢迎大家交流修改方法!

因为文件超过了3MB所有传网盘了:
百度网盘: https://pan.baidu.com/s/1xrQtQmq0G1JAb2aEcDq4OA?pwd=52pj 提取码: 52pj
阿里云盘(自解压文件): https://www.aliyundrive.com/s/httbUGVv5NY 提取码: 52pj

xqyqx 发表于 2023-1-14 21:20

本帖最后由 xqyqx 于 2023-1-14 21:25 编辑

直接用pyinstxtractor解包,得到crackme.pyc,用uncompyle6反编译:
import sys as a, requests as c
import os.path as d
try:
    with open(d.join(d.dirname(d.abspath(__file__)), 'resoUrces.dlL'), 'rb') as (f):
      j = f.read()
      i = b''
      h = 0
      for g in j:
            if h:
                i += bytes()
            else:
                if g == 36:
                  h = 1
                _ =
                input = eval(bytes((112, 114, 105, 110, 116)).decode('utf-8'))

except:
    raise
    print('Failed to load program resources.')
    a.exit(1)
else:
    input(_)

    def __import__(*args, **kwargs):
      raise OSError(_)


try:
    if len(a.argv) != 2:
      input(_)
      a.exit(1)
    else:
      passwd = a.argv
      del a
      input(_ + passwd)
      ____ = _
      __ = 0
      c.packages.urllib3.disable_warnings()

      def ___(n):
            global __
            if eval(c.get((____ + f"/{n}.txt"), verify=False).text):
                input(f"#{n} " + _)
                __ += 2 ** n


      ___(0)
      ___(1)
      ___(2)
      ___(3)
      if __ - 16 == -1:
            __ += 1
      if __ == 16:
            input(_)
      else:
            input(_)
except Exception:
    input(_)

可知关键字符串在resource.dll里,且当读取到0x24使用UTF-8解码(论坛自动把网址加上discuz代码了,源文件没有这个代码):
HEX:
E7BD91E7BB9CE9AA8CE8AF8120437261636B4D655C6E202020204279206C756C69756368656E675C6EE4B88DE698AFE6AF8FE4B880E68A8AE99481E983BDE883BDE794A8E992A5E58C99E68993E5BC80E380822D2D3F3F3F3F3F3F3F3F5C6E0D0A596F752063616E277420696D706F72742061206D6F64756C652062656361757365206F66207468652073656375726974792070726F626C656D0D0AE8BE93E585A5E6A0BCE5BC8FE99499E8AFAFEFBC810D0AE4BDA0E8BE93E585A5E79A84E5AF86E7A081EFBC9A0D0A68747470733A2F2F706561736F66742E6769746875622E696F2F646C2F637261636B6D65310D0AE6A380E6B58BE9809AE8BF870D0AE5AF86E7A081E6ADA3E7A1AEEFBC810D0AE5AF86E7A081E99499E8AFAFEFBC810D0AE7A88BE5BA8FE9AA8CE8AF81E587BAE99499EFBC8CE8AFB7E9878DE8AF95EFBC810D0A

UTF-8:
网络验证 CrackMe\n    By luliucheng\n不是每一把锁都能用钥匙打开。--????????\n
You can't import a module because of the security problem
输入格式错误!
你输入的密码:
https://peasoft.github.io/dl/crackme1
检测通过
密码正确!
密码错误!
程序验证出错,请重试!

可知关键在https://peasoft.github.io/dl/crackme1,继续分析源码,input函数其实就是print函数,判断的关键语句就是在这个网址的4个txt里,密码需要满足:
passwd[-4:] == "52pj"
len(passwd) == 20080313
hash(passwd) == 1145141919810
f"{passwd}" == "{passwd}"
这样的密码显然不存在,那么直接本地建4个txt,内容都是True,然后修改resource中的网址为localhost就行了

pikapika233 发表于 2023-1-15 00:03

66666真不错

yanwenkai 发表于 2023-1-15 00:53

感谢楼主分享

tanzhijun8 发表于 2023-1-15 03:32

谢谢分享

大大连连 发表于 2023-1-15 10:11

badwd 发表于 2023-1-15 15:32

这个只能在Python里用吗

luliucheng 发表于 2023-1-15 17:52

badwd 发表于 2023-1-15 15:32
这个只能在Python里用吗

这个是已经打包成exe的,电脑无需安装Python即可运行,但破解时可能还是需要Python辅助。

mengyoyoyo 发表于 2023-1-15 23:57

感谢分享,刚刚好用得上

stone989 发表于 2023-1-16 09:13

页: [1] 2
查看完整版本: 一个网络验证CM