飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 18508|回复: 80

[原创] smartprinter(虚拟打印机)3.6破解分析

[复制链接]
  • TA的每日心情
    开心
    2016-2-2 16:49
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-10-15 08:51:28 | 显示全部楼层 |阅读模式
    【破文标题】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 -> 00074D7A  RVA -> 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:[0]
    0040B93D  |.  50            PUSH EAX
    0040B93E  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP
    0040B945  |.  81EC 10010000 SUB ESP,110
    0040B94B  |.  8D4424 04     LEA EAX,DWORD PTR SS:[ESP+4]
    0040B94F  |.  50            PUSH EAX
    0040B950  |.  E8 CB9CFFFF   CALL SmartFax.00405620
    0040B955  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
    0040B957  |.  83C4 04       ADD ESP,4
    0040B95A  |.  8D4C24 10     LEA ECX,DWORD PTR SS:[ESP+10]
    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:[ESP+4]
    0040B97E  |.  E8 2D8F0600   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
    0040B983  |.  8D5424 00     LEA EDX,DWORD PTR SS:[ESP]
    0040B987  |.  52            PUSH EDX
    0040B988  |.  E8 A37BFFFF   CALL SmartFax.00403530
    0040B98D  |.  8D4424 14     LEA EAX,DWORD PTR SS:[ESP+14]            ;  假注册码出现在提示窗口中
    0040B991  |.  8BCC          MOV ECX,ESP
    0040B993  |.  896424 0C     MOV DWORD PTR SS:[ESP+C],ESP
    0040B997  |.  50            PUSH EAX                                 ;  假注册码入栈
    0040B998  |.  C78424 200100>MOV DWORD PTR SS:[ESP+120],0
    0040B9A3  |.  E8 E2900600   CALL <JMP.&mfc42.#537_??0CString@@QAE@PB>
    0040B9A8  |.  51            PUSH ECX
    0040B9A9  |.  8D5424 08     LEA EDX,DWORD PTR SS:[ESP+8]
    0040B9AD  |.  8BCC          MOV ECX,ESP
    0040B9AF  |.  896424 14     MOV DWORD PTR SS:[ESP+14],ESP
    0040B9B3  |.  52            PUSH EDX
    0040B9B4  |.  C68424 240100>MOV BYTE PTR SS:[ESP+124],1
    0040B9BC  |.  E8 B7900600   CALL <JMP.&mfc42.#535_??0CString@@QAE@AB>
    0040B9C1  |.  C68424 200100>MOV BYTE PTR SS:[ESP+120],0
    0040B9C9  |.  E8 327EFFFF   CALL SmartFax.00403800
    0040B9CE  |.  83C4 08       ADD ESP,8                                 ;  堆栈窗口中出现真假注册码,上面的CALL是关键,跟进
    0040B9D1  |.  8D4C24 00     LEA ECX,DWORD PTR SS:[ESP]
    0040B9D5  |.  A2 E85D4E00   MOV BYTE PTR DS:[4E5DE8],AL
    0040B9DA  |.  C78424 180100>MOV DWORD PTR SS:[ESP+118],-1
    0040B9E5  |.  E8 C68E0600   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
    0040B9EA  |.  8B8C24 100100>MOV ECX,DWORD PTR SS:[ESP+110]
    0040B9F1  |.  64:890D 00000>MOV DWORD PTR FS:[0],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:[0]
    0040380D  |.  50            PUSH EAX
    0040380E  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP
    00403815  |.  51            PUSH ECX
    00403816  |.  53            PUSH EBX
    00403817  |.  8D4C24 04     LEA ECX,DWORD PTR SS:[ESP+4]
    0040381B  |.  C74424 10 010>MOV DWORD PTR SS:[ESP+10],1
    00403823  |.  E8 68120700   CALL <JMP.&mfc42.#540_??0CString@@QAE@XZ>
    00403828  |.  8D4424 04     LEA EAX,DWORD PTR SS:[ESP+4]
    0040382C  |.  8D4C24 18     LEA ECX,DWORD PTR SS:[ESP+18]
    00403830  |.  50            PUSH EAX
    00403831  |.  51            PUSH ECX
    00403832  |.  C64424 18 02  MOV BYTE PTR SS:[ESP+18],2
    00403837  |.  E8 54FEFFFF   CALL SmartFax.00403690
    0040383C  |.  8B5424 24     MOV EDX,DWORD PTR SS:[ESP+24]
    00403840  |.  8B4424 0C     MOV EAX,DWORD PTR SS:[ESP+C]
    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:[ESP+1C]
    00403857  |.  8379 F8 01    CMP DWORD PTR DS:[ECX-8],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:[ESP+4]
    00403867  |.  C64424 10 01  MOV BYTE PTR SS:[ESP+10],1
    0040386C  |.  E8 3F100700   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
    00403871  |.  8D4C24 18     LEA ECX,DWORD PTR SS:[ESP+18]
    00403875  |.  C64424 10 00  MOV BYTE PTR SS:[ESP+10],0
    0040387A  |.  E8 31100700   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
    0040387F  |.  8D4C24 1C     LEA ECX,DWORD PTR SS:[ESP+1C]
    00403883  |.  C74424 10 FFF>MOV DWORD PTR SS:[ESP+10],-1
    0040388B  |.  E8 20100700   CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
    00403890  |.  8B4C24 08     MOV ECX,DWORD PTR SS:[ESP+8]
    00403894  |.  8AC3          MOV AL,BL
    00403896  |.  5B            POP EBX
    00403897  |.  64:890D 00000>MOV DWORD PTR FS:[0],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 (
    set  SmartFaxTool_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

    文件包内容.png
    注册成功提示.png
    游客,如果您要查看本帖隐藏内容请回复


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

    评分

    参与人数 2威望 +42 飘云币 +40 收起 理由
    bpzm1987 + 2 原创精品 感谢分享!
    kiss-you + 40 + 40 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    7 天前
  • 签到天数: 1158 天

    [LV.10]以坛为家III

    发表于 2008-10-15 09:10:50 | 显示全部楼层
    虚拟打印机感觉用处不是太大。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-2-2 16:49
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2008-10-15 09:18:36 | 显示全部楼层
    感觉用处的大小是个人观点的问题,在此不做讨论,我认为钱的用处最大/:017
    在这里只是技术交流,互相学习彼此的长处,理清破解的思路,这篇破文我写的非常详细。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-15 09:24:47 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-11-28 17:22
  • 签到天数: 51 天

    [LV.5]常住居民I

    发表于 2008-10-15 09:26:22 | 显示全部楼层
    高手,感谢分享!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-15 09:37:56 | 显示全部楼层
    这软件没有自校验?
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    6 天前
  • 签到天数: 717 天

    [LV.9]以坛为家II

    发表于 2008-10-15 09:41:46 | 显示全部楼层
    楼主很强,支持支持!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-15 09:48:22 | 显示全部楼层
    感谢你辛勤的劳动和付出
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-15 16:30:04 | 显示全部楼层
    向楼主学习,谢谢楼主分享!!!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-2-1 17:16
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2008-10-15 17:22:26 | 显示全部楼层
    我也用这个软件,不过好像用winhex可以在内存中找到注册码
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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