jy2207661 发表于 2008-10-15 08:51:28

smartprinter(虚拟打印机)3.6破解分析

【破文标题】smartprinter(虚拟打印机)3.6破解分析
【破文作者】jy2207661
【破解工具】PEID,OD,ImProtREC,DUP2.6
【破解平台】WinXP SP2
【软件名称】smartprinter3.6
【软件大小】4.67MB
【原版下载】http://www.i-enet.com/products/smartprinter.html
【保护方式】注册码
【软件简介】你是否在寻找一款功能的全面虚拟打印机,那么你可以试一下SmartPrinter......SmartPrinter最初(著名软件公司)开发用于传真系统的虚拟打印,它的主要功能是:将任意可打印的文档通过虚拟打印转换成其它图片(文字)格式,后经过一段时间的发展和更新,功能已经越来越强大,在各种的智能传真系统、图片格式转换系统、条码打印系统等都能占主导地位。
------------------------------------------------------------------------
【破解过程】
1.用PEID查SmartFaxTool.exe的壳,为ASProtect V2.X Registered -> Alexey Solodovnikov   * Sign.By.fly *

2.用OD打开SmartFaxTool.exe,写入参数:showdialog,然后点击打开

3.用脱壳插件Aspr2.XX_unpacker_v1.0SC.osc脱壳,提示有偷窃代码,请查看记录窗口内的IAT数据

4.点查看->记录(ALT+L),记录数据
IAT 的地址 = 0047E000
IAT 的相对地址 = 0007E000
IAT 的大小 = 00000860
断点位于 00C40079
OEP 的地址 = 00474D7A
OEP 的相对地址 = 00074D7A

5.打开ImProtREC,选择进程SmartFaxTool.exe,在相应的地方依次输入OEP -> 00074D7ARVA -> 0007E000大小-> 0000860
点获得输入信息按钮,再点修复抓取文件按钮,选择de_SmartFaxTool.exe文件,点打开,再安装目录下便生成了de_SmartFaxTool_.exe,重命名de_SmartFaxTool_.exe为SmartFaxTool.exe,能够正常运行,致此脱壳成功。

6.下面开始破解,OD载入SmartFaxTool.exe,在数据窗口中显示为 长型->地址,找到 Kernel32.GetPrivateProfileStringA函数,右键->查找参考(Ctrl+R)->在每个参数上设置断点,F9运行,然后程序被OD断下,F8单步:
0040B930/$6A FF         PUSH -1
0040B932|.68 46D74700   PUSH SmartFax.0047D746                   ;SE 处理程序安装
0040B937|.64:A1 0000000>MOV EAX,DWORD PTR FS:
0040B93D|.50            PUSH EAX
0040B93E|.64:8925 00000>MOV DWORD PTR FS:,ESP
0040B945|.81EC 10010000 SUB ESP,110
0040B94B|.8D4424 04   LEA EAX,DWORD PTR SS:
0040B94F|.50            PUSH EAX
0040B950|.E8 CB9CFFFF   CALL SmartFax.00405620
0040B955|.8B00          MOV EAX,DWORD PTR DS:
0040B957|.83C4 04       ADD ESP,4
0040B95A|.8D4C24 10   LEA ECX,DWORD PTR SS:
0040B95E|.50            PUSH EAX                                 ; /IniFileName
0040B95F|.68 00010000   PUSH 100                                 ; |BufSize = 100 (256.)
0040B964|.51            PUSH ECX                                 ; |ReturnBuffer
0040B965|.68 A81E4C00   PUSH SmartFax.004C1EA8                   ; |Default = "1234567890"
0040B96A|.68 78154C00   PUSH SmartFax.004C1578                   ; |Key = "KEY"
0040B96F|.68 54114C00   PUSH SmartFax.004C1154                   ; |Section = "SYSTEM"
0040B974|.FF15 F0E04700 CALL DWORD PTR DS:[<&kernel32.GetPrivate>; \GetPrivateProfileStringA程序被断在这一行,F8
0040B97A|.8D4C24 04   LEA ECX,DWORD PTR SS:
0040B97E|.E8 2D8F0600   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
0040B983|.8D5424 00   LEA EDX,DWORD PTR SS:
0040B987|.52            PUSH EDX
0040B988|.E8 A37BFFFF   CALL SmartFax.00403530
0040B98D|.8D4424 14   LEA EAX,DWORD PTR SS:            ;假注册码出现在提示窗口中
0040B991|.8BCC          MOV ECX,ESP
0040B993|.896424 0C   MOV DWORD PTR SS:,ESP
0040B997|.50            PUSH EAX                                 ;假注册码入栈
0040B998|.C78424 200100>MOV DWORD PTR SS:,0
0040B9A3|.E8 E2900600   CALL <JMP.&mfc42.#537_??0CString@@QAE@PB>
0040B9A8|.51            PUSH ECX
0040B9A9|.8D5424 08   LEA EDX,DWORD PTR SS:
0040B9AD|.8BCC          MOV ECX,ESP
0040B9AF|.896424 14   MOV DWORD PTR SS:,ESP
0040B9B3|.52            PUSH EDX
0040B9B4|.C68424 240100>MOV BYTE PTR SS:,1
0040B9BC|.E8 B7900600   CALL <JMP.&mfc42.#535_??0CString@@QAE@AB>
0040B9C1|.C68424 200100>MOV BYTE PTR SS:,0
0040B9C9|.E8 327EFFFF   CALL SmartFax.00403800
0040B9CE|.83C4 08       ADD ESP,8                                 ;堆栈窗口中出现真假注册码,上面的CALL是关键,跟进
0040B9D1|.8D4C24 00   LEA ECX,DWORD PTR SS:
0040B9D5|.A2 E85D4E00   MOV BYTE PTR DS:,AL
0040B9DA|.C78424 180100>MOV DWORD PTR SS:,-1
0040B9E5|.E8 C68E0600   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
0040B9EA|.8B8C24 100100>MOV ECX,DWORD PTR SS:
0040B9F1|.64:890D 00000>MOV DWORD PTR FS:,ECX
0040B9F8|.81C4 1C010000 ADD ESP,11C
0040B9FE\.C3            RETN

7.跟进0040B9C9处的CALL,来到这里,再F8单步往下走
00403800/$6A FF         PUSH -1
00403802|.68 E8D04700   PUSH SmartFax.0047D0E8                   ;SE 处理程序安装
00403807|.64:A1 0000000>MOV EAX,DWORD PTR FS:
0040380D|.50            PUSH EAX
0040380E|.64:8925 00000>MOV DWORD PTR FS:,ESP
00403815|.51            PUSH ECX
00403816|.53            PUSH EBX
00403817|.8D4C24 04   LEA ECX,DWORD PTR SS:
0040381B|.C74424 10 010>MOV DWORD PTR SS:,1
00403823|.E8 68120700   CALL <JMP.&mfc42.#540_??0CString@@QAE@XZ>
00403828|.8D4424 04   LEA EAX,DWORD PTR SS:
0040382C|.8D4C24 18   LEA ECX,DWORD PTR SS:
00403830|.50            PUSH EAX
00403831|.51            PUSH ECX
00403832|.C64424 18 02MOV BYTE PTR SS:,2
00403837|.E8 54FEFFFF   CALL SmartFax.00403690
0040383C|.8B5424 24   MOV EDX,DWORD PTR SS:
00403840|.8B4424 0C   MOV EAX,DWORD PTR SS:
00403844|.52            PUSH EDX                                 ; /s2 这里是你输入的假注册码
00403845|.50            PUSH EAX                                 ; |s1 = "A6406E58B834403DDE369A74E75D36A4"真注册码
00403846|.FF15 4CE64700 CALL DWORD PTR DS:[<&msvcrt._mbscmp>]    ; \_mbscmp
0040384C|.83C4 10       ADD ESP,10
0040384F|.85C0          TEST EAX,EAX
00403851|.75 0E         JNZ SHORT SmartFax.00403861            ;检查是否有注册码,没有跳走,所以NOP掉
00403853|.8B4C24 1C   MOV ECX,DWORD PTR SS:
00403857|.8379 F8 01    CMP DWORD PTR DS:,1
0040385B|.7E 04         JLE SHORT SmartFax.00403861            ;检查注册码是否正确,不正确跳走,NOP掉
0040385D|.B3 01         MOV BL,1
0040385F|.EB 02         JMP SHORT SmartFax.00403863
00403861|>32DB          XOR BL,BL
00403863|>8D4C24 04   LEA ECX,DWORD PTR SS:
00403867|.C64424 10 01MOV BYTE PTR SS:,1
0040386C|.E8 3F100700   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
00403871|.8D4C24 18   LEA ECX,DWORD PTR SS:
00403875|.C64424 10 00MOV BYTE PTR SS:,0
0040387A|.E8 31100700   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
0040387F|.8D4C24 1C   LEA ECX,DWORD PTR SS:
00403883|.C74424 10 FFF>MOV DWORD PTR SS:,-1
0040388B|.E8 20100700   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
00403890|.8B4C24 08   MOV ECX,DWORD PTR SS:
00403894|.8AC3          MOV AL,BL
00403896|.5B            POP EBX
00403897|.64:890D 00000>MOV DWORD PTR FS:,ECX
0040389E|.83C4 10       ADD ESP,10
004038A1\.C3            RETN

8.自己会调试可以追出注册码,但是内存注册机没有加入启动参数的功能,所以只能爆破了。注册信息保存在C:\WINDOWS下的smartprinter.ini文件中。

9.以免以后升级再破解的麻烦,就用DUP V2.16作个通用补丁吧,但是ASProtect的壳用这个补丁后不能正常运行,
也就是说升级后脱壳的过程还是不能偷懒,但脱壳后的工作就交给补丁来做了,建立一个[搜索与替换补丁]方案,
(1).搜索字节为:75 0E 8B 4C 24 1C 83 79 F8 01 7E 04 B3 01 EB 02 32 DB
(2).替换字节为:90 90 8B 4C 24 1C 83 79 F8 01 90 90 B3 01 EB 02 32 DB
(3).选中目标为一个已被压缩的PE文件选项

10.经过上步骤smartprinter3.6破解过程算是破解完了,但要正常使用,还要用破解后的文件替换两处的SmartFaxTool.exe
安装目录下的SmartFaxTool.exe和C:\WINDOWS目录下的SmartFaxTool.exe,所以就做个批处理文件来帮助完成这项工作吧,代码如下:

@echo off
title smartprinter(虚拟打印机)3.6替换文件
MODE con: COLS=40 lines=45
color 0a

for /f "tokens=1,2,*" %%a in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\9AB234FA06470014087A915B4EF95D9D" ^| FIND /I "D0CCD292596FB8846BD94A0EACA2B4A3"') DO (
setSmartFaxTool_path=%%~fsc)
set SmartFaxTool_system=%systemroot%

del %SmartFaxTool_system%\SmartFaxTool.exe /q /f
copy SmartFaxTool.exe %SmartFaxTool_system%\SmartFaxTool.exe
copy SmartFaxTool.exe %SmartFaxTool_path%
pause



**** Hidden Message *****

[ 本帖最后由 jy2207661 于 2008-10-15 09:12 编辑 ]

psccj 发表于 2008-10-15 09:10:50

虚拟打印机感觉用处不是太大。

jy2207661 发表于 2008-10-15 09:18:36

感觉用处的大小是个人观点的问题,在此不做讨论,我认为钱的用处最大/:017
在这里只是技术交流,互相学习彼此的长处,理清破解的思路,这篇破文我写的非常详细。

azzal 发表于 2008-10-15 09:24:47

yxg888 发表于 2008-10-15 09:26:22

高手,感谢分享!

py22 发表于 2008-10-15 09:37:56

这软件没有自校验?

mrlin 发表于 2008-10-15 09:41:46

楼主很强,支持支持!

njkyzy 发表于 2008-10-15 09:48:22

感谢你辛勤的劳动和付出

jsj731 发表于 2008-10-15 16:30:04

向楼主学习,谢谢楼主分享!!!

dxswp 发表于 2008-10-15 17:22:26

我也用这个软件,不过好像用winhex可以在内存中找到注册码
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: smartprinter(虚拟打印机)3.6破解分析