【文章标题】: 轻松击破BitEncrypt软件加密套件之“加密试用功能”
【文章作者】: KuNgBiM
【作者邮箱】: kungbim@163.com
【作者主页】: http://www.crkcn.com
【软件名称】: BitEncrypt软件加密套件0.11D
【软件大小】: 75KB
【下载地址】: 自己搜索下载
【加壳方式】: ASPack2.12
【保护方式】: 加密组件调用
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OD
【操作平台】: 盗版XPsp2
【软件介绍】:
BitEncrypt软件加密套件(BEWorkShop)是一套用于软件加密的组件,它包括BEWorkShop加密组件和BEProtect加壳工具。
BEWorkShop加密组件:
以DLL方式提供,包括RSA128、RSA256、RSA512、RSA1024、RSA2048、RSA4096、获取硬盘系列号、获取文件CRC32校验值、软件反跟踪功能;
BEProtect加壳工具:
用于对EXE、DLL、OCX等可执行文件进行加壳保护。
软件保护:
采用RSA1024、RSA2048或RSA4096进行注册码保护,通过获取硬盘系列号作为加密依据,同时应用CRC32校验程序完整性和进行程序反跟踪 ,最后使用BEProtect加壳保护,使您的程序由里到外都有很强的保护。
说明:
1、RSA算法运算速度极快: <1024位加密、解密不超过1秒> <2048位加密、解密不超过2秒> <4096位加密、解密不超过6秒>
2、获取硬盘物理系列号不需要管理员权限;
3、CRC32算法应用汇编和固定码表,运算速度大大提高;
4、RSA算法支持中文字符加密、解密;
5、支持16进制、10进制数据加密、解密;
6、防止非法注册机的制作。
--------------------------------------------------------------------------------
【详细过程】
今天论坛上闲逛时发现BitEncrypt软件加密套件的介绍不错,非常NB,决定调试一翻,官方已经更新至0.11D版本,但保护不可恭维。。。
大家可以到http://www.pefine.com/或http://www.onlinedown.net/soft/47253.htm下载加密套件。
解压后将就用他的“调用例子”做了个目标程序,方便起见,我调用的是VB程序例子。代码如下(相关程序见附件):
====================================================================================================
'程序调用部分
Private Sub Form_Load()
'允许试用次数为10次
Dim lInt As Integer
lInt = GetTrialTime(10)
Select Case lInt
Case -1
Form1.Caption = "PEWorkShop加密套件 - " & "软件调用错误请与作者联系!"
Command1.Caption = "非法使用"
Command1.Enabled = False
Case 0
Form1.Caption = "PEWorkShop加密套件 - " & "软件试用次数已到请购买软件!"
Command1.Caption = "已过期"
Command1.Enabled = False
Case Else
Form1.Caption = "PEWorkShop加密套件 - " & "软件已试用" & CStr(lInt) & "次!"
End Select
'反调试、补丁、监视工具
If AntiDebug Then
MsgBox "软件被调试!", vbOKOnly, "提示"
End If
If AntiLoader Then
MsgBox "软件被调试!", vbOKOnly, "提示"
End If
If AntiMonitor Then
MsgBox "软件被监视!", vbOKOnly, "提示"
End If
End Sub
'模块调用部分
'试用时间
Public Declare Function GetTrialTime Lib "PEWorkShop.DLL" (ByVal iTrialTime As Integer) As Integer
'反调试、补丁、监视工具
Public Declare Function AntiDebug Lib "PEWorkShop.DLL" () As Boolean
Public Declare Function AntiLoader Lib "PEWorkShop.DLL" () As Boolean
Public Declare Function AntiMonitor Lib "PEWorkShop.DLL" () As Boolean
====================================================================================================
根据上面代码编译后,我们就制作完成了一个演示目标程序。
由于程序调用的组件“PEWorkShop.dll”使用了ASPack 2.12加壳,而我们为使调试方便,所以先将“PEWorkShop.dll”做脱壳处理。
OD装载演示程序,由于我们了解到程序要调用该加密组件,必须使用“GetTrialTime”函数,所以我们装载目标程序后可以利用OD字符串搜索。
插件搜索这个字符,搜索来到:
====================================================================================================
Ultra String Reference Plugin
Address Disassembly Text String
004011E4 push 004014CC (Initial CPU selection)
00401E13 push 00401DF0 PEWorkShop.DLL
00401E13 push 00401DF0 GetTrialTime //双击此处来到00401E13
00401E57 push 00401E34 PEWorkShop.DLL
00401E57 push 00401E34 AntiDebug
00401E9B push 00401E78 PEWorkShop.DLL
00401E9B push 00401E78 AntiLoader
00401EDF push 00401EBC PEWorkShop.DLL
00401EDF push 00401EBC AntiMonitor
00402251 push 00401F00 P
00402294 push 00401FA8 !k!
004022FA push 00401F00 P
004023C7 push 00401F00 P
====================================================================================================
我们来到这里:
00401E08 $ A1 40334000 mov eax, dword ptr [403340] ; 这里设断,F9运行
00401E0D . 0BC0 or eax, eax
00401E0F . 74 02 je short 00401E13 ; 寻找加密组件
00401E11 . FFE0 jmp eax
00401E13 > 68 F01D4000 push 00401DF0 ; PEWorkShop.DLL
00401E18 . B8 70114000 mov eax, <jmp.&MSVBVM60.DllFunctionCall> ; 准备调用
00401E1D . FFD0 call eax
00401E1F . FFE0 jmp eax ; 进入组件内部!F7跟进
F7跟进到:
100060E0 81EC 18030000 sub esp, 318 ; 跟进到这里
100060E6 53 push ebx
100060E7 55 push ebp
100060E8 56 push esi
100060E9 57 push edi
100060EA B9 3F000000 mov ecx, 3F
100060EF 33C0 xor eax, eax
100060F1 8DBC24 29020000 lea edi, dword ptr [esp+229] ; ASCII "TrialTime"
100060F8 C68424 28020000 00 mov byte ptr [esp+228], 0
10006100 F3:AB rep stos dword ptr es:[edi]
10006102 8B1D 20000110 mov ebx, dword ptr [10010020] ; ADVAPI32.RegOpenKeyA
10006108 66:AB stos word ptr es:[edi]
1000610A 8D4424 10 lea eax, dword ptr [esp+10]
1000610E 50 push eax
1000610F 68 CC360110 push 100136CC ; ASCII "SOFTWARE\Microsoft\aSoft"
10006114 68 02000080 push 80000002
10006119 FFD3 call ebx
1000611B 8D4C24 24 lea ecx, dword ptr [esp+24]
1000611F 8D9424 28020000 lea edx, dword ptr [esp+228]
10006126 51 push ecx
10006127 8B4C24 14 mov ecx, dword ptr [esp+14]
1000612B 8D4424 24 lea eax, dword ptr [esp+24]
1000612F 52 push edx
10006130 50 push eax
10006131 6A 00 push 0
10006133 68 C4360110 push 100136C4 ; ASCII "aSoft"
10006138 51 push ecx
10006139 FF15 00000110 call dword ptr [10010000] ; ADVAPI32.RegQueryValueExA
1000613F 8B2D 04000110 mov ebp, dword ptr [10010004] ; ADVAPI32.RegCloseKey
10006145 8B5424 10 mov edx, dword ptr [esp+10]
10006149 52 push edx
1000614A FFD5 call ebp ; 使用加密所使用后的次数数据
1000614C B9 3F000000 mov ecx, 3F
10006151 33C0 xor eax, eax
10006153 8DBC24 29010000 lea edi, dword ptr [esp+129]
1000615A C68424 28010000 00 mov byte ptr [esp+128], 0
10006162 F3:AB rep stos dword ptr es:[edi]
10006164 66:AB stos word ptr es:[edi]
10006166 B9 3F000000 mov ecx, 3F
1000616B 33C0 xor eax, eax
1000616D 8D7C24 29 lea edi, dword ptr [esp+29]
10006171 C64424 28 00 mov byte ptr [esp+28], 0
10006176 F3:AB rep stos dword ptr es:[edi]
10006178 8B0D BC360110 mov ecx, dword ptr [100136BC]
1000617E 66:8B15 C0360110 mov dx, word ptr [100136C0]
10006185 66:AB stos word ptr es:[edi]
10006187 A1 B8360110 mov eax, dword ptr [100136B8]
1000618C 894C24 18 mov dword ptr [esp+18], ecx
10006190 894424 14 mov dword ptr [esp+14], eax
10006194 A0 C2360110 mov al, byte ptr [100136C2]
10006199 884424 1E mov byte ptr [esp+1E], al
1000619D 8DBC24 28020000 lea edi, dword ptr [esp+228] ; ASCII "AE8D19D2C3B52844"
100061A4 83C9 FF or ecx, FFFFFFFF
100061A7 33C0 xor eax, eax
100061A9 F2:AE repne scas byte ptr es:[edi]
100061AB F7D1 not ecx
100061AD 49 dec ecx
100061AE 66:895424 1C mov word ptr [esp+1C], dx
100061B3 83F9 10 cmp ecx, 10
100061B6 75 1E jnz short 100061D6
100061B8 8D4C24 28 lea ecx, dword ptr [esp+28]
100061BC 8D5424 14 lea edx, dword ptr [esp+14] ; 访问组件中的所有服务项, ASCII
"allServer"
100061C0 51 push ecx
100061C1 8D8424 2C020000 lea eax, dword ptr [esp+22C] ; ASCII "AE8D19D2C3B52844"
100061C8 52 push edx ; 访问网络?ASCII "pefine.com"
100061C9 50 push eax ; ASCII "AE8D19D2C3B52844"
100061CA E8 B1FDFFFF call 10005F80
100061CF 8D4C24 28 lea ecx, dword ptr [esp+28]
100061D3 51 push ecx
100061D4 EB 08 jmp short 100061DE
100061D6 8D9424 28020000 lea edx, dword ptr [esp+228]
100061DD 52 push edx
100061DE E8 9B160000 call 1000787E
100061E3 8BD0 mov edx, eax ; EAX中保留的为已使用次数
100061E5 83C4 04 add esp, 4
100061E8 85D2 test edx, edx
100061EA 0F85 B6000000 jnz 100062A6 ; ??????
100061F0 B9 3F000000 mov ecx, 3F
100061F5 8DBC24 28010000 lea edi, dword ptr [esp+128]
100061FC F3:AB rep stos dword ptr es:[edi]
100061FE 66:AB stos word ptr es:[edi]
10006200 AA stos byte ptr es:[edi]
10006201 B9 3F000000 mov ecx, 3F
10006206 33C0 xor eax, eax
10006208 8D7C24 28 lea edi, dword ptr [esp+28]
1000620C 8D9424 28010000 lea edx, dword ptr [esp+128]
10006213 F3:AB rep stos dword ptr es:[edi]
10006215 66:AB stos word ptr es:[edi]
10006217 AA stos byte ptr es:[edi]
10006218 BF B4360110 mov edi, 100136B4
1000621D 83C9 FF or ecx, FFFFFFFF
10006220 33C0 xor eax, eax
10006222 F2:AE repne scas byte ptr es:[edi]
10006224 F7D1 not ecx
10006226 2BF9 sub edi, ecx
10006228 8BC1 mov eax, ecx
1000622A 8BF7 mov esi, edi
1000622C 8BFA mov edi, edx
1000622E 8D5424 14 lea edx, dword ptr [esp+14]
10006232 C1E9 02 shr ecx, 2
10006235 F3:A5 rep movs dword ptr es:[edi], dword >
10006237 8BC8 mov ecx, eax
10006239 8D8424 28010000 lea eax, dword ptr [esp+128]
10006240 83E1 03 and ecx, 3
10006243 F3:A4 rep movs byte ptr es:[edi], byte pt>
10006245 8D4C24 28 lea ecx, dword ptr [esp+28]
10006249 51 push ecx
1000624A 52 push edx
1000624B 50 push eax
1000624C E8 BFFBFFFF call 10005E10
10006251 8D4C24 10 lea ecx, dword ptr [esp+10]
10006255 51 push ecx
10006256 68 CC360110 push 100136CC ; ASCII "SOFTWARE\Microsoft\aSoft"
1000625B 68 02000080 push 80000002
10006260 FF15 08000110 call dword ptr [10010008] ; ADVAPI32.RegCreateKeyA
10006266 8D7C24 28 lea edi, dword ptr [esp+28]
1000626A 83C9 FF or ecx, FFFFFFFF
1000626D 33C0 xor eax, eax
1000626F 8D5424 28 lea edx, dword ptr [esp+28]
10006273 F2:AE repne scas byte ptr es:[edi]
10006275 F7D1 not ecx
10006277 49 dec ecx
10006278 51 push ecx
10006279 52 push edx
1000627A 6A 01 push 1
1000627C 50 push eax
1000627D 8B4424 20 mov eax, dword ptr [esp+20]
10006281 68 C4360110 push 100136C4 ; ASCII "aSoft"
10006286 50 push eax
10006287 FF15 0C000110 call dword ptr [1001000C] ; ADVAPI32.RegSetValueExA
1000628D 8B4C24 10 mov ecx, dword ptr [esp+10]
10006291 51 push ecx
10006292 FFD5 call ebp
10006294 5F pop edi
10006295 5E pop esi
10006296 5D pop ebp
10006297 B8 01000000 mov eax, 1
1000629C 5B pop ebx
1000629D 81C4 18030000 add esp, 318
100062A3 C2 0400 retn 4
100062A6 3B9424 2C030000 cmp edx, dword ptr [esp+32C] ; 内存中保留规定次数,EDX中为已使用次数
100062AD 0F8D 9E000000 jge 10006351 ; ★这里就是TNT点,NOP掉后永久试用!★
100062B3 B9 3F000000 mov ecx, 3F
100062B8 33C0 xor eax, eax
100062BA 8DBC24 28010000 lea edi, dword ptr [esp+128]
100062C1 8D72 01 lea esi, dword ptr [edx+1]
100062C4 F3:AB rep stos dword ptr es:[edi]
100062C6 66:AB stos word ptr es:[edi]
100062C8 AA stos byte ptr es:[edi]
100062C9 B9 3F000000 mov ecx, 3F
100062CE 33C0 xor eax, eax
100062D0 8D7C24 28 lea edi, dword ptr [esp+28]
100062D4 8D9424 28010000 lea edx, dword ptr [esp+128]
100062DB F3:AB rep stos dword ptr es:[edi]
100062DD 66:AB stos word ptr es:[edi]
100062DF 6A 0A push 0A
100062E1 52 push edx
100062E2 56 push esi
100062E3 AA stos byte ptr es:[edi]
100062E4 E8 386C0000 call 1000CF21
100062E9 83C4 0C add esp, 0C
100062EC 8D4424 28 lea eax, dword ptr [esp+28]
100062F0 8D4C24 14 lea ecx, dword ptr [esp+14]
100062F4 8D9424 28010000 lea edx, dword ptr [esp+128]
100062FB 50 push eax
100062FC 51 push ecx
100062FD 52 push edx
100062FE E8 0DFBFFFF call 10005E10
10006303 8D4424 10 lea eax, dword ptr [esp+10]
10006307 50 push eax
10006308 68 CC360110 push 100136CC ; ASCII "SOFTWARE\Microsoft\aSoft"
1000630D 68 02000080 push 80000002
10006312 FFD3 call ebx
10006314 8D7C24 28 lea edi, dword ptr [esp+28]
10006318 83C9 FF or ecx, FFFFFFFF
1000631B 33C0 xor eax, eax
1000631D 8B5424 10 mov edx, dword ptr [esp+10]
10006321 F2:AE repne scas byte ptr es:[edi]
10006323 F7D1 not ecx
10006325 49 dec ecx
10006326 51 push ecx
10006327 8D4C24 2C lea ecx, dword ptr [esp+2C]
1000632B 51 push ecx
1000632C 6A 01 push 1
1000632E 50 push eax
1000632F 68 C4360110 push 100136C4 ; ASCII "aSoft"
10006334 52 push edx
10006335 FF15 0C000110 call dword ptr [1001000C] ; ADVAPI32.RegSetValueExA
1000633B 8B4424 10 mov eax, dword ptr [esp+10]
1000633F 50 push eax
10006340 FFD5 call ebp
10006342 8BC6 mov eax, esi
10006344 5F pop edi
10006345 5E pop esi
10006346 5D pop ebp
10006347 5B pop ebx
10006348 81C4 18030000 add esp, 318
1000634E C2 0400 retn 4 ; 反馈给程序
--------------------------------------------------------------------------------
【经验总结】
总结:经过测试,被我们修改过的加密组件用于编译其他的程序,程序调用的“加密试用功能”均已失效。
指出:大家也可以使用这样的调试方法一一击破程序中的“1 ~ 6”个特色功能。
思考:难道以后遇见由“BitEncrypt软件加密套件”加密调用的程序,只需要替换这个“PEWorkShop.DLL”就能通用破解?
意见:要求“BitEncrypt软件加密套件”厂商提供给用户使用的是源代码,然后进行自我编译,而不是现成的动态连接库文件。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年02月19日 PM 03:02:24
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
上传的附件: