运行分析
- 需要破解Name和Serial
PE分析
- ASM程序,32位,无壳
静态分析&动态调试
- ida搜索找到关键字符串
- 动态分析关键函数,逻辑如上图,通过Name计算得到char_1,亦或后对比Serial,相等则返回成功信息
- 分析func_1,作用是提取Volume_Name和Name前5位进行计算,得到char_1前5位
- 分析func_2,作用是提取Volume_Name和Name前5位进行计算,得到char_1后4位
- 分析cmp函数
- 先提取Serial每一位,亦或9后得到char_2
- 再判断char_2与char_1是否相等,相等返回成功
算法分析
Name = 'concealbear'
import win32api
Volume_Name = win32api.GetVolumeInformation("c:\\")[0] # 获得c盘卷名称
Volume_Name += Name
char_1 = []
Serial = []
def func_1():
for i in range(0,5):
char_1.append(((ord(Name[i]) ^ ord(Volume_Name[i])) & 0x1F | 0x40) ^ 9)
char_1[-1] = 36
func_1()
def func_2():
for i in range(0,5):
char_1.append(((ord(Volume_Name[i]) ^ ord(Name[i])) & 0xF | 0x30) ^ 9)
char_1[-1] = 0
func_2()
for i in range(len(char_1)):
Serial.append(char_1[i] ^ 9)
print(Name + '的Serial为:\n' + "".join([chr(i)for i in Serial]))
- 验证成功