飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3713|回复: 9

[原创] 捣蛋部队之----Cool Capture v1.25 算法分析补遗

[复制链接]
  • TA的每日心情
    开心
    2020-11-19 11:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-1-24 10:15:17 | 显示全部楼层 |阅读模式
    版主已经写出算法了,我也没想再来一下,只是发现新东西,特拿出来玩玩。


    注册算法中有一个根据注册码字符查找其所在的位置号的问题,版主的分析只是一笔带过。若果你要是想分析一下,进入之后,估计会令你脑袋发晕,吃不准算法啥意思。
    其实,其实,……其实这个软件的验证流程使用了C语言中的重要对象--链表,而链表这东西鲜见于注册验证流程中。下面先看看对应代码:
    004110A0  PUSH EBX
    004110A1  PUSH ESI
    004110A2  MOV ESI,DWORD PTR DS:[ECX+8]            ;  表1的地址


    表1中只有三个非0数据,这三个数据分别对应着数字、字母A-O和字母P-Z。因为数字的ASCII高位是3,A-O的高位是4,而P-Z的高位是5。链表是按高位分类的。
    这三个非0数据的设置是为了按类别搜索,缩短搜索时间,完全可以顺序搜索。
    链表的地址是动态产生的,但结构是固定不变的。
    004110A5  TEST ESI,ESI
    004110A7  JE SHORT 004110CA
    004110A9  MOV BL,BYTE PTR SS:[ESP+C]
    004110AD  XOR EDX,EDX
    004110AF  MOVSX EAX,BL
    004110B2  SHR EAX,4                               ;  结果 /16,取得高位
    004110B5  DIV DWORD PTR DS:[ECX+C]                ;  结果 mod 17
    004110B8  MOV EDX,DWORD PTR DS:[ESI+EDX*4]        ;  结果查表1得搜索链表的节点首地址
    004110BB  TEST EDX,EDX                            ;  如果首地址为0则跳过报错
    004110BD  JE SHORT 004110CA                       ;  为0跳过


    除了三个非0数据,其余预示着字符不满足条件,报错。
    004110BF  /CMP BYTE PTR DS:[EDX+8],BL             ;  与链表节点中的数据(字符)比较
    004110C2  |JE SHORT 004110E1                      ;  相等则表示找到,跳出
    004110C4  |MOV EDX,DWORD PTR DS:[EDX]             ;  否则读取下一节点的地址
    004110C6  |TEST EDX,EDX                           ; 如果值为0,则表示链表查完也没找到,报错
    004110C8  \JNZ SHORT 004110BF
    004110CA  MOV AL,BYTE PTR SS:[ESP+C]              ;  2
    004110CE  LEA ECX,DWORD PTR SS:[ESP+C]
    004110D2  PUSH 00421120
    004110D7  PUSH ECX
    004110D8  MOV BYTE PTR SS:[ESP+14],AL
    004110DC  CALL <JMP.&MSVCRT._CxxThrowException>
    004110E1  TEST EDX,EDX
    004110E3  JE SHORT 004110CA                       ; 未找到时报错
    004110E5  MOV EAX,DWORD PTR DS:[EDX+C]            ; 找到时读取链表中的数据--位置号
    004110E8  POP ESI
    004110E9  POP EBX
    004110EA  RETN 4




    表1的内容:
    003881C0  00 00 00 00 00 00 00 00 00 00 00 00 54 A9 38 00  ............T?.
    003881D0  D4 A9 38 00 C4 A9 38 00 00 00 00 00 00 00 00 00  冤8.末8.........
    &H00000000, &H00000000, &H00000000, &H0038A954, &H0038A9D4, &H0038A9C4, &H00000000, &H00000000, _
    &H00000000, &H00000000, &H00000000, &H00000000, &H00000000, &H00000000, &H00000000, &H00000000


    链表:
    节点地址 下一节点地址 字符类别    字符        字符位置号
    0038A744  &H00000000, &H00000004, &HXXXXXX4F, &H00000000 O
    0038A754  &H0038A744, &H00000004, &HXXXXXX4D, &H00000001 M
    0038A764  &H0038A754, &H00000004, &HXXXXXX42, &H00000002 B
    0038A774  &H0038A764, &H00000004, &HXXXXXX48, &H00000003 H
    0038A784  &H0038A774, &H00000004, &HXXXXXX47, &H00000004 G
    0038A794  &H00000000, &H00000005, &HXXXXXX58, &H00000005 X
    0038A7A4  &H00000000, &H00000003, &HXXXXXX32, &H00000006 2
    0038A7B4  &H0038A7A4, &H00000003, &HXXXXXX35, &H00000007 5
    0038A7C4  &H0038A794, &H00000005, &HXXXXXX56, &H00000008 V
    0038A7D4  &H0038A7B4, &H00000003, &HXXXXXX39, &H00000009 9
    0038A804  &H0038A784, &H00000004, &HXXXXXX45, &H0000000A E
    0038A814  &H0038A804, &H00000004, &HXXXXXX41, &H0000000B A
    0038A824  &H0038A7C4, &H00000005, &HXXXXXX53, &H0000000C S
    0038A834  &H0038A814, &H00000004, &HXXXXXX49, &H0000000D I
    0038A844  &H0038A824, &H00000005, &HXXXXXX55, &H0000000E U
    0038A854  &H0038A834, &H00000004, &HXXXXXX4C, &H0000000F L
    0038A864  &H0038A844, &H00000005, &HXXXXXX52, &H00000010 R
    0038A874  &H0038A7D4, &H00000003, &HXXXXXX33, &H00000011 3
    0038A884  &H0038A864, &H00000005, &HXXXXXX5A, &H00000012 Z
    0038A894  &H0038A874, &H00000003, &HXXXXXX34, &H00000013 4
    0038A8C4  &H0038A894, &H00000003, &HXXXXXX31, &H00000014 1
    0038A8D4  &H0038A884, &H00000005, &HXXXXXX59, &H00000015 Y
    0038A8E4  &H0038A8C4, &H00000003, &HXXXXXX37, &H00000016 7
    0038A8F4  &H0038A854, &H00000004, &HXXXXXX4A, &H00000017 J
    0038A904  &H0038A8F4, &H00000004, &HXXXXXX4B, &H00000018 K
    0038A914  &H0038A904, &H00000004, &HXXXXXX44, &H00000019 D
    0038A924  &H0038A8E4, &H00000003, &HXXXXXX30, &H0000001A 0
    0038A934  &H0038A914, &H00000004, &HXXXXXX43, &H0000001B C
    0038A944  &H0038A924, &H00000003, &HXXXXXX38, &H0000001C 8
    0038A954  &H0038A944, &H00000003, &HXXXXXX36, &H0000001D 6--0--9的开始查找位置
    0038A984  &H0038A8D4, &H00000005, &HXXXXXX54, &H0000001E T
    0038A994  &H0038A984, &H00000005, &HXXXXXX57, &H0000001F W
    0038A9A4  &H0038A994, &H00000005, &HXXXXXX50, &H00000020 P
    0038A9B4  &H0038A934, &H00000004, &HXXXXXX4E, &H00000021 N
    0038A9C4  &H0038A9A4, &H00000005, &HXXXXXX51, &H00000022 Q--P--Z的开始查找位置
    0038A9D4  &H0038A9B4, &H00000004, &HXXXXXX46, &H00000023 F--A--O的开始查找位置





    我使用了VB结构的数据展示,如何玩转链表,那就不是我的事了,你自己看着办!

    评分

    参与人数 4威望 +24 飘云币 +64 收起 理由
    飞天 + 4 + 4 赞一个!
    pentium450 + 20 + 20 很给力!
    [PYG]版务督察 + 20 很给力!
    GeekCat + 20 赞一个!

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2016-1-24 11:09:44 | 显示全部楼层
    欢迎兄弟多来“捣蛋”
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-11-19 11:04
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2016-1-24 13:28:17 | 显示全部楼层
    一个被解职的老版主能干啥?
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2019-3-1 23:51
  • 签到天数: 559 天

    [LV.9]以坛为家II

    发表于 2016-1-24 17:10:49 | 显示全部楼层
    前排膜拜一下,谢谢楼主分享
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    17 分钟前
  • 签到天数: 958 天

    [LV.10]以坛为家III

    发表于 2016-1-24 21:29:47 | 显示全部楼层

    向楼主学习!向楼主致敬!
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2 小时前
  • 签到天数: 2490 天

    [LV.Master]伴坛终老

    发表于 2016-1-24 23:52:52 | 显示全部楼层
    不知道这个软件的用途是什么
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 1404 天

    [LV.10]以坛为家III

    发表于 2016-1-25 12:17:12 | 显示全部楼层
    人才呀,感谢分享。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-6-29 13:34
  • 签到天数: 246 天

    [LV.8]以坛为家I

    发表于 2016-1-27 08:56:33 | 显示全部楼层
    多谢楼主分享并给我们布置作业!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表