新160个crackme - 039-eKH.1

运行分析

在这里插入图片描述

  • 需要破解Name和Serial,写出注册机

PE分析

在这里插入图片描述- Delphi程序,32位,无壳


静态分析&动态调试

在这里插入图片描述

  • ida搜索关键字符串,跳转到关键代码

在这里插入图片描述

  • 静态分析,修改变量如上,关键在于sub_427A20函数返回值需要大于等于12345678

在这里插入图片描述

  • 开始动态调试
  • 进入sub_427A20函数,对Name和Serial做好注释分析,向下分析到76行,发现关键判断
  • v19和serials相等,则返回值为12345678,满足主函数的条件

在这里插入图片描述

  • 跳转到第一个分析点:38行,目标是得到v2
  • 这个循环逻辑是取出Name每个字符进行累加、移位计算
  • 第47行v2 < 0,因v2为int,范围是-2147483648~2147483647,当v2<=0x7ffffffff时为整数,当v2>0x7fffffff时为负数
    在这里插入图片描述
    在这里插入图片描述
  • 计算公式中有个常量off_428880,双击查看值为LANNYDIBANDINGINANAKEKHYANGNGENTOT

在这里插入图片描述

  • 进入到第一个分析点:59行,目标是得到v19
  • 首先对刚刚得到的 v2 与 0x12345678 进行亦或,赋值给v10
  • 再将v10转数字字符串,获取数字个数v11
  • 循环v11次,每次循环都得到byte_428884[v10 % 10]字符,并将v10 = v10/10
  • 最终拼接byte_428884[v10 % 10]字符得到v19字符串
    在这里插入图片描述
  • 双击byte_428884,找到值为LANNY5646521

算法分析

from ctypes import *

Name = 'concealbear'
Serial = ''

# 第一个分析点
v2 = c_uint32(0)
v8 = c_uint32(0)
v10 =  c_uint32(0)
off_428880 = 'LANNYDIBANDINGINANAKEKHYANGNGENTOT'
for i in range(len(Name)):
    v8.value = ord(Name[i]) + v2.value
    v2.value = ord(off_428880[i]) | (v8.value << 8)
    if v2.value > 0x7fffffff:       # 因v2为int,范围是-2147483648~2147483647,当v2<=0x7ffffffff时为整数,当v2>0x7fffffff时为负数
        v2.value = -v2.value

# 第二个分析点
v10 = v2.value ^ 0x12345678
byte_428884 = 'LANNY5646521'
for i in range(len(str(v10))):
    Serial += byte_428884[v10 % 10]
    v10 //= 10

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

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

  • 验证成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值