运行分析
- 点击check,提示注册失败
PE分析
- ASM程序,32位,无壳
静态分析&动态调试
- ida搜索到关键字符串
- 发现注册文件reg.key
- 通过动态调试,获得计算机名称为’CONCEALBEAR’
- 通过计算得到int_2
- 接下来有一个剪贴板判断,将剪贴板的内容和int_2进行计算,得到int_1,要求int_1=0
- 最后一步,获得key文件内容,长度大于7,头4为和后4位亦或的值要等于int_2
算法分析
ComputerName = 'CONCEALBEAR'
# 计算int_2
int_2 = 0
for i in range(len(ComputerName)):
int_2 += ord(ComputerName[i])
# 得到Colipdata
Colipdata = ''
for i in range(len(ComputerName)-1):
Colipdata += chr(int_2 // len(ComputerName))
Colipdata += chr(int_2//len(ComputerName) + int_2%len(ComputerName))
print("剪贴板内容为:" + Colipdata)
import binascii
regdata = '1234' # regdata前4位
# 大小端序转换
def changes(input):
res = []
for i in range(len(input) // 4):
res.append('0x' + hex(input[i * 4 + 3])[2:].zfill(2) + hex(input[i * 4 + 2])[2:].zfill(2) + hex(input[i * 4 + 1])[2:].zfill(2) + hex(input[i * 4])[2:].zfill(2))
return res[0]
# 计算regdata后4位
reglist = [ord(i)for i in regdata]
regdata_changes = int(changes(reglist),16)
regdata2_changes = hex(int_2 ^ regdata_changes)[2:]
regdata2_list = []
for i in range(0,4):
regdata2_list.append(int(regdata2_changes[i*2:i*2+2],16))
regdata2 = changes(regdata2_list)[2:]
print("regdata为:"+binascii.b2a_hex(regdata.encode()).decode() + regdata2)
- 复制剪贴板内容,点击check,第一步通过,提示让我们注册,下面注册按钮变为可点击
- 同目录下创建文件,名称为reg.key,用010编辑器打开,输入上面内容
- 点击注册,发现返回成功字符串
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 新160个crackme - 084-slayer_crackme1
发表评论 取消回复