飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7161|回复: 11

强力抓屏 3.1.0.0.200 机器码产生过程与算法研究

[复制链接]
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2005-12-21 17:38:22 | 显示全部楼层 |阅读模式
    【破文标题】强力抓屏 3.1.0.0.200 机器码产生过程与算法研究
    破解平台】WinXp
    【破文作者】飘云[PYG]
    【作者主页】https://www.chinapyg.com
    【作者邮箱】piaoyun04@163.com
    【软件名称】强力抓屏 3.1.0.0.200
    【软件大小】403kb
    【下载地址】http://crc.onlinedown.net/soft/21782.htm
    【破解工具】PEiD0.94、DEDE、[PYG]OD
    【保护方式】序列号
    【软件简介】 “强力抓屏”是一个运行于Windows操作系统下的应用软件,她主要应用于针对屏幕选取和保存。
    “强力抓屏”提供了以下主要功能:
      1.方便用户抓屏
      2.便捷的图象内容的复制、粘贴和保存
        3. 方便制作清晰的插图说明书
    【破解目的】学习破解。
    【破解声明】我乃小菜鸟一只,偶得一点心得,愿与大家分享:)
    【破解过程】 Peid 探测ASPack 2.12 -> Alexey Solodovnikov    脱壳过程不写了~ 程序为Borland Delphi 6.0 - 7.0编写

    1.机器码生产过程分析:
    用DEDE找到如下关键:

    004B559D     8D40 00           lea eax,dword ptr ds:[eax]
    004B55A0     53                push ebx
    004B55A1     83C4 E8           add esp,-18
    004B55A4     B8 04000000       mov eax,4
    004B55A9     E8 9ED1F4FF       call unpacked.0040274C
    004B55AE     8BD8              mov ebx,eax
    004B55B0     6A 00             push 0
    004B55B2     6A 00             push 0
    004B55B4     8D4424 18         lea eax,dword ptr ss:[esp+>
    004B55B8     50                push eax
    004B55B9     8D4424 18         lea eax,dword ptr ss:[esp+>
    004B55BD     50                push eax
    004B55BE     53                push ebx
    004B55BF     6A 00             push 0
    004B55C1     6A 00             push 0
    004B55C3     68 F4554B00       push unpacked.004B55F4     ; ASCII "C:\"
    004B55C8     E8 8B14F5FF       call <jmp.&kernel32.GetVolumeInformationA>               ; 取C盘序列号
    004B55CD     8B03              mov eax,dword ptr ds:[ebx] ; 16进制保存到eax
    004B55CF     99                cdq                        ; CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)
    004B55D0     33C2              xor eax,edx                ; 和 edx(上面得到符号,我这里是负数FFFFFFFF) xor运算
    004B55D2     2BC2              sub eax,edx                ; eax = eax -edx
    004B55D4     894424 14         mov dword ptr ss:[esp+14],>; 保存到[ESP+14]
    004B55D8     DB4424 14         fild dword ptr ss:[esp+14] ; 浮点
    004B55DC     DB3C24            fstp tbyte ptr ss:[esp]    ; 此时关键东西已经生成  注意看浮点寄存器
    004B55DF     9B                wait
    004B55E0     BA 04000000       mov edx,4
    004B55E5     8BC3              mov eax,ebx
    004B55E7     E8 80D1F4FF       call unpacked.0040276C
    004B55EC     DB2C24            fld tbyte ptr ss:[esp]
    004B55EF     83C4 18           add esp,18
    004B55F2     5B                pop ebx
    004B55F3     C3                retn

    004A05B0     E8 EB4F0100       call unpacked.004B55A0         ; 关键call  (就是上面的分析)
    004A05B5     83C4 F4           add esp,-0C
    004A05B8     DB3C24            fstp tbyte ptr ss:[esp]
    004A05BB     9B                wait
    004A05BC     8D45 F8           lea eax,dword ptr ss:[ebp-8]
    004A05BF     E8 F09AF6FF       call unpacked.0040A0B4         ; 这个不用跟了
    004A05C4     8B45 F8           mov eax,dword ptr ss:[ebp-8]   ; call 004b55a0得返回值送eax
    004A05C7     8D55 FC           lea edx,dword ptr ss:[ebp-4]
    004A05CA     E8 29500100       call unpacked.004B55F8         ; 反序处理
    004A05CF     8B55 FC           mov edx,dword ptr ss:[ebp-4]   ; edx中即是机器码了~~
    004A05D2     8B83 98030000     mov eax,dword ptr ds:[ebx+398]
    004A05D8     E8 1314FAFF       call unpacked.004419F0



    2.注册算法分析:
    004A1983     53                push ebx
    004A1984     33C0              xor eax,eax
    004A1986     55                push ebp
    004A1987     68 971C4A00       push unpacked.004A1C97
    004A198C     64:FF30           push dword ptr fs:[eax]
    004A198F     64:8920           mov dword ptr fs:[eax],esp
    004A1992     B3 01             mov bl,1
    004A1994     B2 01             mov dl,1
    004A1996     A1 C47D4600       mov eax,dword ptr ds:[467DC4]
    004A199B     E8 2465FCFF       call unpacked.00467EC4
    004A19A0     8945 FC           mov dword ptr ss:[ebp-4],eax
    004A19A3     33C0              xor eax,eax
    004A19A5     55                push ebp
    004A19A6     68 531C4A00       push unpacked.004A1C53
    004A19AB     64:FF30           push dword ptr fs:[eax]
    004A19AE     64:8920           mov dword ptr fs:[eax],esp
    004A19B1     BA 02000080       mov edx,80000002
    004A19B6     8B45 FC           mov eax,dword ptr ss:[ebp-4]
    004A19B9     E8 A665FCFF       call unpacked.00467F64
    004A19BE     B1 01             mov cl,1
    004A19C0     BA AC1C4A00       mov edx,unpacked.004A1CAC         ; ASCII "Software\Microsoft\Windows\CurrentVersion\Visual Basic 6.0"
    004A19C5     8B45 FC           mov eax,dword ptr ss:[ebp-4]
    004A19C8     E8 FB65FCFF       call unpacked.00467FC8
    004A19CD     84C0              test al,al
    004A19CF     0F84 68020000     je unpacked.004A1C3D
    004A19D5     84DB              test bl,bl
    004A19D7     0F84 60020000     je unpacked.004A1C3D
    004A19DD     A1 D47E4B00       mov eax,dword ptr ds:[4B7ED4]
    004A19E2     8B00              mov eax,dword ptr ds:[eax]
    004A19E4     8B10              mov edx,dword ptr ds:[eax]
    004A19E6     FF92 E8000000     call dword ptr ds:[edx+E8]
    004A19EC     A1 507B4B00       mov eax,dword ptr ds:[4B7B50]
    004A19F1     8038 00           cmp byte ptr ds:[eax],0
    004A19F4     0F84 25020000     je unpacked.004A1C1F
    004A19FA     E8 A13B0100       call unpacked.004B55A0
    004A19FF     83C4 F4           add esp,-0C
    004A1A02     DB3C24            fstp tbyte ptr ss:[esp]
    004A1A05     9B                wait
    004A1A06     8D45 F4           lea eax,dword ptr ss:[ebp-C]
    004A1A09     E8 A686F6FF       call unpacked.0040A0B4
    004A1A0E     8B45 F4           mov eax,dword ptr ss:[ebp-C]
    004A1A11     8D55 F8           lea edx,dword ptr ss:[ebp-8]
    004A1A14     E8 DF3B0100       call unpacked.004B55F8
    004A1A19     8B55 F8           mov edx,dword ptr ss:[ebp-8]
    004A1A1C     A1 D47E4B00       mov eax,dword ptr ds:[4B7ED4]
    004A1A21     8B00              mov eax,dword ptr ds:[eax]
    004A1A23     8B80 98030000     mov eax,dword ptr ds:[eax+398]
    004A1A29     E8 C2FFF9FF       call unpacked.004419F0
    004A1A2E     E8 6D3B0100       call unpacked.004B55A0
    004A1A33     83C4 F4           add esp,-0C
    004A1A36     DB3C24            fstp tbyte ptr ss:[esp]
    004A1A39     9B                wait
    004A1A3A     8D45 E8           lea eax,dword ptr ss:[ebp-18]
    004A1A3D     E8 7286F6FF       call unpacked.0040A0B4
    004A1A42     8B45 E8           mov eax,dword ptr ss:[ebp-18]
    004A1A45     8D55 EC           lea edx,dword ptr ss:[ebp-14]
    004A1A48     E8 AB3B0100       call unpacked.004B55F8
    004A1A4D     8B45 EC           mov eax,dword ptr ss:[ebp-14]
    004A1A50     E8 BB87F6FF       call unpacked.0040A210
    004A1A55     D805 E81C4A00     fadd dword ptr ds:[4A1CE8]        ; +99
    004A1A5B     D80D EC1C4A00     fmul dword ptr ds:[4A1CEC]        ; ×88
    004A1A61     D825 F01C4A00     fsub dword ptr ds:[4A1CF0]        ; -77
    004A1A67     D835 F41C4A00     fdiv dword ptr ds:[4A1CF4]        ; /66
    004A1A6D     E8 9E0FF6FF       call unpacked.00402A10            ; 四舍五入处理~    得到的返回值就是注册码前段~
    004A1A72     8945 E0           mov dword ptr ss:[ebp-20],eax
    004A1A75     8955 E4           mov dword ptr ss:[ebp-1C],edx
    004A1A78     DF6D E0           fild qword ptr ss:[ebp-20]
    004A1A7B     83C4 F4           add esp,-0C
    004A1A7E     DB3C24            fstp tbyte ptr ss:[esp]
    004A1A81     9B                wait
    004A1A82     8D45 F0           lea eax,dword ptr ss:[ebp-10]
    004A1A85     E8 2A86F6FF       call unpacked.0040A0B4
    004A1A8A     8D45 F0           lea eax,dword ptr ss:[ebp-10]
    004A1A8D     50                push eax
    004A1A8E     E8 0D3B0100       call unpacked.004B55A0
    004A1A93     83C4 F4           add esp,-0C
    004A1A96     DB3C24            fstp tbyte ptr ss:[esp]
    004A1A99     9B                wait
    004A1A9A     8D45 D4           lea eax,dword ptr ss:[ebp-2C]
    004A1A9D     E8 1286F6FF       call unpacked.0040A0B4
    004A1AA2     8B45 D4           mov eax,dword ptr ss:[ebp-2C]
    004A1AA5     8D55 D8           lea edx,dword ptr ss:[ebp-28]
    004A1AA8     E8 4B3B0100       call unpacked.004B55F8
    004A1AAD     8B45 D8           mov eax,dword ptr ss:[ebp-28]
    004A1AB0     8A50 03           mov dl,byte ptr ds:[eax+3]        ; 机器码第4位 做为注册码后段
    004A1AB3     8D45 DC           lea eax,dword ptr ss:[ebp-24]
    004A1AB6     E8 D92AF6FF       call unpacked.00404594
    004A1ABB     8B55 DC           mov edx,dword ptr ss:[ebp-24]
    004A1ABE     58                pop eax
    004A1ABF     E8 B02BF6FF       call unpacked.00404674            ; 上面计算的结果和机器码第4位连接
    004A1AC4     8B45 F0           mov eax,dword ptr ss:[ebp-10]
    004A1AC7     50                push eax
    004A1AC8     8D55 D0           lea edx,dword ptr ss:[ebp-30]
    004A1ACB     A1 D47E4B00       mov eax,dword ptr ds:[4B7ED4]
    004A1AD0     8B00              mov eax,dword ptr ds:[eax]
    004A1AD2     8B80 84030000     mov eax,dword ptr ds:[eax+384]
    004A1AD8     E8 E3FEF9FF       call unpacked.004419C0
    004A1ADD     8B55 D0           mov edx,dword ptr ss:[ebp-30]
    004A1AE0     58                pop eax
    004A1AE1     E8 CA2CF6FF       call unpacked.004047B0            ; 经典代码~
    004A1AE6     0F85 13010000     jnz unpacked.004A1BFF             ; 爆破点


    【算法总结】
    1.机器码生成:取C盘序列号-转换-得到正数-反序
    2.((机器码+99)×88-77)/66  结果四舍五入~  然后取机器码第4位 连接起来即为注册码~

    【算法注册机】    太简单了~~~

    Dim code As String
    Dim reg As Double
    code = Text1.Text   
        If code <> "" Then
            reg = Round(((Val(code) + 99) * 88 - 77) / 66)        
            Text2.Text = reg & Mid(code, 4, 1)
                Else
                Text2.Text = "请输入完整信息!"
                End If


    附:注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Visual Basic 6.0  删除可以重新研究~

    【版权声明】 本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

     楼主| 发表于 2005-12-21 17:41:37 | 显示全部楼层
    演示动画已制作完毕
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-12-21 18:15:03 | 显示全部楼层
    我也刚分析完这个东东 ```哈```
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2019-3-20 20:06
  • 签到天数: 258 天

    [LV.8]以坛为家I

    发表于 2005-12-21 19:52:16 | 显示全部楼层
    呵呵!~~~才看到!~~~  又有动画了!~~不错

    BTW:Borland Delphi 6.0 - 7.0的程序
    怎么要去???
    附:注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Visual Basic 6.0
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-12-21 20:05:38 | 显示全部楼层
    原帖由 yyjpcx 于 2005-12-21 07:52 PM 发表
    呵呵!~~~才看到!~~~  又有动画了!~~不错

    BTW:Borland Delphi 6.0 - 7.0的程序
    怎么要去???
    附:注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Visual Basic 6.0


    呵```可能是软件作者故意用来蒙人的吧```哈```注册信息

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Visual Basic 6.0]
    "Visual Basic"=hex:00,00,a9,6a,c3,57,38,42
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

     楼主| 发表于 2005-12-21 21:41:11 | 显示全部楼层
    原帖由 风球 于 2005-12-21 08:05 PM 发表


    呵```可能是软件作者故意用来蒙人的吧```哈```注册信息

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Visual Basic 6.0]
    "Visual Basi ...



    确实

    误认为是VB 哈哈~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-12-22 08:36:31 | 显示全部楼层
    怎么显示的是这?

    UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [RAR SFX]
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-1-18 17:27
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2005-12-22 11:09:10 | 显示全部楼层
    高啊。。。。。。。。。。。。。
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-4-10 17:02
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2005-12-23 01:03:53 | 显示全部楼层
    好文啊!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-12-23 07:02:09 | 显示全部楼层
    呵呵~
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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