新160个crackme - 008-Afkayas.1

运行分析

在这里插入图片描述

  • 运行发现需要输入Name和Serial

PE分析

在这里插入图片描述

  • VB程序,32位,无壳

静态分析

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

  • ida无法反编译,使用x32dbg发现关键字符串,进入主函数

在这里插入图片描述

  • 找到关键跳转

在这里插入图片描述

  • 初步分析,找到vbaLenBstr:取Name长度

动态调试

在这里插入图片描述

  • 上面有一个vbaStrCat拼接函数,其中一个参数为AKA-,猜测应该是与其他字符拼接后得到Serial
  • 在找到关键比较,F2下断点,输入Name=abcde,Serial=12345运行,发现已显示出了真正Serial为AKA-487752

在这里插入图片描述

  • 运行发现破解成功,但是也发现了一个问题,当Name改变时,对应的Serial也会发生变化,接下来分析Name和Serial之间的算法(难度较大)



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

  • 从vbaLenBstr处向下动态调式,监视Serial相关地址变化,发现执行00402458地址处函数后,上述地址发生变化。而此函数的eax来自于上一个函数vbaStrI4函数,通过调式发现vbaStrI4函数为关键算法函数
  • 对vbaStrI4函数两个参数进行分析,发现与Name首字母和长度有关
  • edi = length * 0x17CFB
  • edi = edi + ord(Name[0])

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

  • F7 进入vbaStrI4函数,再向下进入Ordinal#110函数,继续向下进入oleaut32.sub_75C8A9B5函数

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

  • 找到两处关键算法,第一个是常规计算,第二个是字符串反转

算法分析

import binascii

Name = 'concealbear'
Serial1 = 'AKA-'
Serial2 = ''

length = len(Name)          # 获取Name长度

edi = length * 0x17CFB
edi = edi + ord(Name[0])

ebx = edi

# 关键算法中的常规计算
while 1:
    if ebx != 0:
        esi = 0xA
        edx = 0
        eax = ebx
        edx = eax % esi
        eax = ebx
        ecx = edx
        edx = 0
        eax = eax // esi
        ebx = eax
        eax = ecx + 30
        Serial2 += binascii.a2b_hex(str(eax)).decode()
    else:
        break

# 关键算法中的字符串逆转
Serial2 = Serial2[::-1]

serial = Serial1 + Serial2          # 拼接Serial

print(Name + "的Serial为:" + serial)

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

  • 输入任意Name,得到Serial,验证成功
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值