新160个crackme -044-tsrh-crackme

运行分析

在这里插入图片描述

  • 提示去除NAG

在这里插入图片描述

  • 不去除NAG也能进入主窗口,需要破解Name和Serial

PE分析

在这里插入图片描述

  • ASM程序,32位,壳未知

去除NAG

在这里插入图片描述

  • ida搜索字符串,发现NAG弹窗标题字符串,双击进入函数

在这里插入图片描述
在这里插入图片描述

  • 找到了messagebox,即NAG位置00401079

在这里插入图片描述

  • 打开x64dbg,定位到该位置

在这里插入图片描述

  • ctrl + 9 使用NOP填充

在这里插入图片描述
在这里插入图片描述

  • 点击菜单栏下方的修补按钮
  • 在弹出来的窗口中点击修补文件,另存为1.exe

在这里插入图片描述

  • 打开1.exe,发现NAG去除成功

静态分析&动态调试

在这里插入图片描述

  • 回到ida最底部,对关键函数进行分析,注释如上,还需要对几个未知函数进行分析

在这里插入图片描述

  • sub_4011F3作用是给String赋值
  • String = ‘tsrh-’ + (Name_length+2003) + ‘-’

在这里插入图片描述

  • sub_40122E作用是,将Name每个字符进行计算,结果拼接在String后面

在这里插入图片描述

  • sub_401287的作用是,将Name每个字符串进行和String11位以后得字符进行计算,结果赋值给String第9位之后

在这里插入图片描述

  • sub_4012D8作用是判断Seirl和String前(10+length(Name))位是否相等

算法分析

Name = 'concealbear'
String = 'tsrh-' + str(len(Name) + 2003) + '-'

# sub_40122E
for i in range(len(Name)):
    v4 = ord(Name[i]) + 12
    String += hex((v4 + v4 - 17 - len(String)) ^ v4)[2:].upper()

# sub_401287
Strings = [ord(i) for i in String]
i = 1
while i != 16:
    if i == 1:
        j = Strings[i + 11] ^ (ord(Name[i - 1]) + 1)
    else:
        j = ord(Name[i - 1]) + 1
    while j < 65:
        j += 8
    while j > 90:
        j -= 3
    v2 = i + 9
    Strings[v2] = j
    i = v2 - 8
    if i == len(Name) + 1:
        break

Serial = "".join([chr(Strings[i]) for i in range(len(Name) + 10)])	      # 取String的前(len(Name) + 10)位

print(Name + '的Serial为:\n' + Serial)

在这里插入图片描述
在这里插入图片描述

  • 需要注意的是,验证时要重启程序,否则会因之前内存导致验证失败
  • 重启程序,输入Name和Serial,验证成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值