Crackme6-笔记

大神的链接:https://www.52pojie.cn/thread-610580-1-1.html
一、爆破思路
1、根据Dede找到输入用户名事件的入口处,0x442E04,OD下断,载入运行,输入用户名“52pojie.cn”,则在该处断下,找到关键跳转和关键函数处,noop关键跳转,则确定键可用
Crackme6-笔记_第1张图片
Crackme6-笔记_第2张图片
Crackme6-笔记_第3张图片
2、保存文件。发现输入用户名后,确定键可用;但是当输入验证码后,确定键不能用了,说明程序输入验证码后就立即判断是否正确了。根据Dede找到输入验证码事件的入口处,0x442C78,OD载入,在该处断下。
找到关键跳转,nop掉,则确定键可以用了
Crackme6-笔记_第4张图片
Crackme6-笔记_第5张图片
3、保存文件。当输入用户名和注册码后,点击确定键发现注册码重新变为0了!说明点击确定键后,程序就比较注册码是否正确啦!同理,找到确定键点击事件的入口处下断,找到关键跳转处,需要修改两处
Crackme6-笔记_第6张图片
Crackme6-笔记_第7张图片
4、保存文件。同理,来到点击清除按钮处,下断,找到关键跳转nop掉,成功啦!
Crackme6-笔记_第8张图片
Crackme6-笔记_第9张图片

二、破解算法
1、在输入用户名处下断,进入关键函数
Crackme6-笔记_第10张图片
发现算法是:循环,用户名的相近的两个字母的ascii相乘,并乘以第几个循环,+ 用户名的长度,累加,得到的结果-注册码处理后的结果,判断是否等于0x29A,如果等于则确定键可用,如果不等于则确定键不可用。
python实现:

#第1个算法:找到正确的注册码使确定键可用
string = "52pojie.cn"
list = []
for i in string:
    list.append(ord(i))
print list   #list = [53, 50, 112, 111, 106, 105, 101, 46, 99, 110]

sum = 10
i = 0
while i < 9:  # for循环不可以的,因为会超出边界!
    sum = sum + list[i] *  list[i+1] * (i + 1)
    i = i + 1
print sum # 384464
print sum -666 # 0x29A = 666; 注册码为383798

验证一下:
Crackme6-笔记_第11张图片

2、在输入注册码383798处下断,进入关键函数
发现关键函数和输入用户名的关键函数相同!说明二者的输入都和确定键是否可用有关!
Crackme6-笔记_第12张图片

3、输入用户名和正确的注册码,进入点击确定事件的关键函数,
Crackme6-笔记_第13张图片
算法是:循环,从注册码的最后一个字母开始,用其ascii自乘,再乘以其长度,除以0x19,得到的余数+0x41,转为字母,得到的结果与用户名相比较,如果相同则可以点击隐藏
结果为:“BWDAUQ”

4、进入清除按钮事件的关键函数:
Crackme6-笔记_第14张图片
算法为:用户名的第5个字母的ascii形式/7,得到的余数+2,求其阶乘;循环,用户名的每个字母的ascii形式乘以刚刚得到的结果(此题为6),加上第几次循环-1,得到的结果-0x7A69,如果等于注册码则成功,否则失败!
结果为:0x14EE-0x7A69 = -25979
python实现:

#第2个算法:根据用户名计算出注册码,实现清除键的隐藏
import math
name = "52pojie.cn"
char = ord(name[4])%7 + 2
b = math.factorial(char) # 阶乘

list = [] #[53, 50, 112, 111, 106, 105, 101, 46, 99, 110]
for i in name:
    list.append(ord(i))

sum = 0
j = 0
for i in list:
    sum += i * b
    i += 1
result = sum - 31337
print result # -25979

输入用户名和注册码后,ok键变为可用,同时点击清除按钮,按钮消失;但是点击ok键无反应,说明这个注册码只能隐藏清除按钮无法隐藏ok按钮
Crackme6-笔记_第15张图片

5、输入用户名和上个注册码后,重新在ok点击事件处下断,进入关键函数,发现结果为:“AACVAT”
Crackme6-笔记_第16张图片
python实现:

# 第3个算法:根据注册码计算出用户名,实现确定键的隐藏
code = '-25979'
list = [] # [45, 50, 53, 57, 55, 57]
for i in code:
    list.append(ord(i))
print list
i = 0
c = ""
while i < len(list):
    a = list[i]*list[i]*(i + 1)
    b = a % 25 + 65
    i += 1
    c += chr(b)
print c # AACVAT

则将此作用户名输入,成功隐藏
Crackme6-笔记_第17张图片
综上,程序的流程是输入用户名和注册码点击清除键,实现隐藏同时ok键可用,再输入用户名实现ok键的隐藏

你可能感兴趣的:(Crackme)