运行分析
- 需破解用户名和RegKey
PE分析
- C++程序,32位,无壳
静态分析&动态调试
- ida函数窗口逐个查看,找到关键函数sub_401440
- ida无法动调,需使用OD,启用StrongOD插件才可以动调
- ida静态分析,逻辑如下:
- 1、猜测this[25]是Serial
- 2、第一个循环:通过提取Serial每一位进行累加计算得到Serial_ascii_plus
- 3、通过关键判断函数cmp,返回值为1时,程序返回成功弹窗
- 分析cmp函数,逻辑如下:
- 1、定义字符串s = ‘KEY-KANON’
- 2、第一个循环:提取Name每一位累加得到Name_ascii_plus
- 3、第二个循环:提取s每一位和Name_ascii_plus进行累加计算,得到v3
- 4、若v3和Serial_ascii_plus相等,则返回1
算法分析
- 算法逻辑:
- 1、先确定Name,通过cmp中的函数计算得到v3
- 2、判断Serial为9位,由于是累加计算,默认前8位 = (v3//9) ^ 0xAA
- 3、Serial最后一位补上v3//9的余数,即Serial第9位 = (v3 // 9 + v3 % 9) ^ 0xAA
Name = 'concealbear'
s = 'KEY-KANON'
# 计算Name_ascii_plus
Name_ascii_plus = 0
v3 = 0
for i in range(len(Name)):
Name_ascii_plus += ord(Name[i])
for j in range(0,9):
v3 += (Name_ascii_plus * ord(s[j]) % 26 + 97) ^ 0xAA
# 计算RegKey
char0_7 = (v3 // 9) ^ 0xAA
char8 = (v3 // 9 + v3 % 9) ^ 0xAA
RegKey = chr(char0_7) * 8 + chr(char8)
print(Name + '的RegKey为:\n' + RegKey)
- 验证成功