- UID
- 2
注册时间2004-12-1
阅读权限255
最后登录1970-1-1
总坛主
TA的每日心情 | 开心 2024-12-1 11:04 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
|
【破文标题】强力抓屏 3.1.0.0.200 机器码产生过程与算法研究
【破解平台】WinXp
【破文作者】飘云[PYG]
【作者主页】https://www.chinapyg.com
【作者邮箱】[email protected]
【软件名称】强力抓屏 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 删除可以重新研究~
【版权声明】 本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢! |
|