016-fty_crkme3

文章详细描述了一个程序的分析过程,从检查UPX壳到使用OD进行动态分析,寻找字符串和段首,然后解析算法,特别是输入验证和数字处理部分,包括七次方运算。最后提到了暴力破解策略,用于解决特定格式输入的匹配问题。程序还考虑了不同长度的输入格式。
摘要由CSDN通过智能技术生成

运行程序

在这里插入图片描述

check错误

在这里插入图片描述

查壳

有UPX壳,ESP定律脱壳
在这里插入图片描述

1

载入OD分析

  • 搜索字符串

2

  • 向上找,找到段首

在这里插入图片描述

  • 开始分析算法

搜先判断输入是否为空

3

  • 再下面开始判断输入的字符除了 “-” 是不是满足0-9

4

  • 如果满足的话,要再判断长度,0x9 到 0xB,不同长度的有不同处理程序

5

  • 长度为0x9的,要求第3和第7个字符都要是 “-”

6

  • 之后就是循环了,做的事情是:在栈中存放输入的数字字符的ASCII码,第一字节是数字字符的长度

可以看到最后一次处理后,栈里面是0x07313234、0x35363839

7

  • 在最后还把"1245689" 转成 1245689,存放在ESI中

8

  • 再往后,把数字字符转为数字。例如:‘1’ -> 1,‘2’ -> 2,…… ,在求这些数字的七次方(图片有误),把结果累加到EDI中

    9

  • 最后累加结果和ESI比较,相等就成功

    10

算法分析

def genKey():
    for i in range(1000000, 10000000):
        sum = 0
        for s in str(i):
            sum += int(s) ** 7
        if i == sum:
            print(str(i)[:2] + '-' + str(i)[2:5] + '-' + str(i)[5:])

genKey()
# 17-417-25
# 42-108-18
# 98-008-17
# 99-263-15

暴力破解

结果

11

总结

其实真正的代码逻辑没有那么复杂,只是重复的很多,需要耐心分析,最后还要考虑怎么实现这个算法,这里用了最简单的暴力枚举

程序中还考虑了使用长度为 0xA,0xB长度的输入,0xB长度的输入,要求的 “-” 的位置是不同的,在第四个和第八个字符的位置

,需要耐心分析,最后还要考虑怎么实现这个算法,这里用了最简单的暴力枚举

程序中还考虑了使用长度为 0xA,0xB长度的输入,0xB长度的输入,要求的 “-” 的位置是不同的,在第四个和第八个字符的位置

12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值