SourceFormatX 2.56破解分析
【软件名称】: SourceFormatX 2.56
【使用工具】: Fi,Ollydbg,ImportREC
【破解平台】: Win2K Server
【软件简介】: SourceFormatX 是一个强大的源代码自动格式化,缩进,排版,美化工具。
它可以格式化 C, C++、Java、C#、Object Pascal、PHP、ASP、JSP、VB、
VB.NET、VBScript、JavaScript 和 HTML Components源代码。
它还可以将源代码输出为语法高亮显示的 HTML 或 RTF 文件。
【软件大小】: 731 KB
【编写语言】: Borland Delphi 5
【加壳方式】: PECompact 1.68 - 1.84
【保护方式】: 文件验证(License.dat)。
破解行为会激活恶意代码,
主要是删注册表的HKEY_CLASSES_ROOT整个分支。
删注册表是用RegDeleteValueA 。
作者把关键代码做成一个DLL,
将DLL文件的16进制码加密后生成一个注册文件,
密匙产生函数的参数是主程序加壳后的HASH码和机器信息。
已注册用户验证注册码时,先验证有没有文件,
没有文件则自然受限制的功能无法使用。
如果有注册文件,解密后即生成一个小临时文件。
如果主程序被脱壳或者被修改(爆破),自然Hash值密码不符,
解密出来的肯定都是垃圾码,没有一点用处。
只有没有被修改的主程序才能正确地解码,
而且当然只有解密正确的文件才是一个真正的DLL文件,
才能被GetProcAddress函数找到欲调用的关键函数地址。
这样只有注册用户能正常使用了。
【破解建议】: 安装 VMware ,否则, 作者很生气, 后果很严重 :)
【软件下载】: http://wh.onlinedown.net:88/down/sourceformatx256cn.exe
/***********************************脱壳**************************************/
; 跟踪到00625556处
00625556 C2 0400 retn 4
; 此处就是OEP,记得脱壳后重建输入表,我用的是ImportREC
00573258 55 push ebp
/********************************去掉OD检查***********************************/
; 调用检查OD的函数
0057330F E8 002EFEFF call SourceFo.00556114
...
...
; 将这里的 机器码 74(jz) 修改为 EB(jmp)
0055614C 74 23 jz short upSource.00556171
; 调用检查OD的函数
005774EA E8 CDB4FFFF call SourceFo.005729BC
; 将这里的 机器码 74(jz) 修改为 EB(jmp)
005729F2 74 42 je short SourceFo.00572A36
; 将这里的 机器码 74(jz) 修改为 EB(jmp)
0055F076 74 42 je short SourceFo.0055F0BA
/*****************************去掉文件修改检查********************************/
; 检查执行程序是否被修改
005774F4 E8 97B1FFFF call SourceFo.00572690
; 将这里的 机器码 74(jz) 修改为 EB(jmp)
005723AC 74 55 je short SourceFo.00572403
;
0044EA65 E8 A69BFFFF call SourceFo.00448610
0044861D 74 17 je short SourceFo.00448636
/*******************************去掉DeDe检查**********************************/
; 将这里的 机器码 74(jz) 修改为 EB(jmp)
005727F4 74 28 je short SourceFo.0057281E
0055641C 74 28 je short SourceFo.00556446
/*****************************去掉Filemon检查*********************************/
; 将这里的 机器码 74(jz) 修改为 EB(jmp)
005560C4 74 20 je short SourceFo.005560E6
/*****************************去掉Snacker检查*********************************/
; 将这里的 机器码 74(jz) 修改为 EB(jmp)
005560ED 74 20 je short SourceFo.0055610F
/*************************其他各类调试软件的驱动句柄检测**********************/
00573314 E8 632CFEFF call SourceFo.00555F7C
; 关键CALL, 以 eax 传递参数,
005774EF B8 54885700 mov eax,SourceFo.00578854 ; ASCII "License.dat"
005774F4 E8 97B1FFFF call SourceFo.00572690
/****************************执行文件尺寸检查*********************************/
0055F105 |. 6A 00 push 0 ; /pFileSizeHigh = NULL
0055F107 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ; |
0055F10A |. 50 push eax ; |hFile
0055F10B |. E8 D477EAFF call <jmp.&kernel32.GetFileSize> ; \GetFileSize
; 将这里的 机器码 3D A8421200 修改为 3D 00E02200(00902200)
0055F110 |. 3D A8421200 cmp eax,1242A8
0055F115 |. 7E 1F jle short SourceFo.0055F136
// ???
0055EF71 75 1C jnz short SourceFo.0055EF8F
/******************************修理非法用户***********************************/
0055F117 |> /6A 03 /push 3
0055F119 |. |B8 B8F45500 |mov eax,SourceFo.0055F4B8 ; ASCII "048229125055114025094102049210040021027068051099091168132234034161018208011"
0055F11E |. |8D55 E8 |lea edx,dword ptr ss:[ebp-18]
0055F121 |. |E8 9625EFFF |call SourceFo.004516BC
0055F126 |. |8B45 E8 |mov eax,dword ptr ss:[ebp-18]
0055F129 |. |E8 124FEAFF |call SourceFo.00404040
0055F12E |. |50 |push eax ; |CmdLine
0055F12F |. |E8 4079EAFF |call <jmp.&kernel32.WinExec> ; \WinExec
0055F134 |.^\EB E1 \jmp short SourceFo.0055F117 ; 循环打开多个窗口
/****************************可疑*******************************/
00412F4D |. 807D FF 00 cmp byte ptr ss:[ebp-1],0
00412F51 |. 74 0F je short SourceFo.00412F62
00412F53 |. E8 5803FFFF call SourceFo.004032B0
0041A524 |. 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
0041A527 |. 50 push eax ; /pSystemInfo
0041A528 |. E8 0FC4FEFF call <jmp.&kernel32.GetSystemInfo> ; \GetSystemInfo
0041A52D |. 8B55 FC mov edx,dword ptr ss:[ebp-4]
0041A530 |. 8B4D F8 mov ecx,dword ptr ss:[ebp-8]
0041A533 |. 49 dec ecx
0041A534 |. 78 33 js short SourceFo.0041A569
0041A536 |. 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
0041A539 |. 66:8378 20 03 cmp word ptr ds:[eax+20],3
0041A53E |. 74 10 je short SourceFo.0041A550
; ???
00412F21 |. 837B 04 00 cmp dword ptr ds:[ebx+4],0
00412F25 |. 7D 24 jge short SourceFo.00412F4B
; ???
00412F4D |. 807D FF 00 cmp byte ptr ss:[ebp-1],0
00412F51 |. 74 0F je short SOURCEFO.00412F62
00412F53 |. E8 5803FFFF call SOURCEFO.004032B0
; eax = "0123456789abcdeffedcba9876543210"
005096B0 |. 8D45 A4 lea eax,dword ptr ss:[ebp-5C]
005096B3 |. E8 3CFFFFFF call SourceFo.005095F4
; 将这里的 机器码 3D 508D0F00 修改为 3D 00902200
00564168 . 3D 508D0F00 cmp eax,0F8D50
0056416D . 0F8E F7000000 jle SourceFo.0056426A
00564173 . 33D2 xor edx,edx
; 将这里的 机器码 3D 5F890F00 修改为 3D 00902200
00567DFC . 3D 5F890F00 cmp eax,0F895F
00567E01 . 7E 13 jle short SOURCEFO.00567E16
00567E03 . E8 50DDFEFF call SOURCEFO.00555B58
; ??? 在打开文件License.dat之后多次调用
00412F53 |. E8 5803FFFF call SOURCEFO.004032B0