百度空间 | 百度首页 
               
 
查看文章
 
破解Widcomm蓝牙软件
2008-12-22 20:33
破解Widcomm蓝牙软件

tombkeeper@xfocus,http://hi.baidu.com/tombkeeper
2005.08.13

我邮购了几个二手蓝牙设备,这些设备都是正经厂商生产的,原本都配了Widcomm BTW软件。因为光盘是不能邮寄的,所以我就无法拿到随设备的原厂光盘。出于可以理解的原因,我拒绝了卖主把软件通过网络发给我的建议。

Widcomm的BTW是专门提供给蓝牙设备生产厂商的,在软件中内置了对蓝牙设备硬件地址的限制。譬如说,你买了一个XXX厂生产的蓝牙,安装了产品光盘中的BTW软件。然后又买了一个YYY厂生产的蓝牙,产品光盘里也是BTW软件。但是你发现XXX的BTW并不能让你的YYY蓝牙工作。为了让YYY蓝牙工作,你就又装了YYY光盘里的BTW。好,现在YYY蓝牙工作了,可是XXX蓝牙又不能用了。也就是说,如果你有两个不同厂商的蓝牙设备,别指望用一份BTW让它们工作——你必须不停地装来装去。

作为一个合法用户却要遭受这份憋屈是不对的。

随便到哪个厂商的页面上下载一份BTW软件,安装。以惠普为例吧,最新的版本3系列BTW是SP28427.exe(BTW 3.0.1.905),最新的版本1系列BTW是SP26005.exe(1.4.3 Build 3)。可以在惠普的网站上下载到:

http://chn.download.software.hp.com/pub/softlib/software4/COL5274/ob-24183-1/SP28427.exe
http://chn.download.software.hp.com/pub/softlib/software3/COL5274/ob-19925-1/SP26005.exe

在BTTray.exe、BTStackServer.exe、wbtapi.dll三个文件中,都有一段明显是从同一个C文件编译而来的代码,专门用于处理蓝牙设备地址不在许可证范围内的问题。用最简单的的拦截MessageBox-->调用回溯的办法就可以找到这段代码。

在安装目录下可以找到BTTray.exe和BTStackServer.exe,在系统目录下可以找到wbtapi.dll。在这三个文件中搜索0F 85 EF 00 00 00,找到后修改为90 90 90 90 90 90。其中BTStackServer.exe中可以找到三处,改最后一处。

sub_10040C60    proc near

lpCaption       = dword ptr -0C4h
lpText          = dword ptr -0C0h
hKey            = HKEY__ ptr -0BCh
var_A0          = byte ptr -0A0h
var_98          = dword ptr -98h
var_C           = dword ptr -0Ch
var_4           = dword ptr -4
arg_0           = dword ptr 4
arg_4           = byte ptr 8
arg_8           = byte ptr 0Ch

                mov     eax, large fs:0
                push    0FFFFFFFFh
                push    offset loc_10049466
                push    eax
                mov     large fs:0, esp
                sub     esp, 0B8h
                push    esi
                push    edi
                mov     edi, [esp+0CCh+arg_0]
                test    edi, 0FFFFFFFh
                jnz     short loc_10040CA8
                pop     edi
                mov     eax, 4
                pop     esi
                mov     ecx, [esp+0C4h+var_C]
                mov     large fs:0, ecx
                add     esp, 0C4h
                retn
; -------------------------------------------------------------------------

loc_10040CA8:
                lea     eax, [esp+0CCh+hKey]
                push    eax             ; hKey
                call    sub_10041610
                mov     esi, eax
                add     esp, 4
                test    esi, esi
                jnz     loc_10040DC6
                lea     ecx, [esp+0CCh+hKey]
                push    eax
                push    ecx
                call    sub_1003F640
                mov     esi, eax
                add     esp, 8
                test    esi, esi
                jnz     loc_10040DC6
                call    sub_1003F680
                mov     esi, eax
                cmp     esi, 0FFFFFE9Eh
                jnz     loc_10040DC6
                mov     eax, [esp+0CCh+var_98]
                xor     esi, esi
                test    eax, edi
                jz      loc_10040DCB
                mov     al, [esp+0CCh+arg_8]
                test    al, al
                jz      loc_10040D9D
                mov     al, [esp+0CCh+var_A0]
                cmp     al, 1
                jz      short loc_10040D17
                cmp     al, 2
                jnz     loc_10040D9D

loc_10040D17:
                call    sub_10041360
                test    al, al
                jz      short loc_10040D9D
                lea     ecx, [esp+0CCh+lpCaption]
                call    CString::CString(void)
                lea     ecx, [esp+0CCh+lpText]
                mov     [esp+0CCh+var_4], 0
                call    CString::CString(void)
                lea     edx, [esp+0CCh+hKey]
                lea     eax, [esp+0CCh+lpText]
                push    edx
                lea     ecx, [esp+0D0h+lpCaption]
                push    eax
                push    ecx
                mov     byte ptr [esp+0D8h+var_4], 1
                call    sub_10041160
                add     esp, 0Ch
                call    ds:GetDesktopWindow
                mov     edx, [esp+0CCh+lpCaption]
                mov     ecx, [esp+0CCh+lpText]
                push    50000h          ; uType
                push    edx             ; lpCaption
                push    ecx             ; lpText
                push    eax             ; hWnd
                call    ds:MessageBoxA
                lea     ecx, [esp+0CCh+lpText]
                mov     byte ptr [esp+0CCh+var_4], 0
                call    CString::~CString(void)
                lea     ecx, [esp+0CCh+lpCaption]
                mov     [esp+0CCh+var_4], 0FFFFFFFFh
                call    CString::~CString(void)

loc_10040D9D:

                lea     edx, [esp+0CCh+hKey]
                push    edx             ; hKey
                call    sub_10040360
                add     esp, 4
                mov     eax, 0FFFFFE9Eh
                pop     edi
                pop     esi
                mov     ecx, [esp+0C4h+var_C]
                mov     large fs:0, ecx
                add     esp, 0C4h
                retn
; -------------------------------------------------------------------------

loc_10040DC6:    
                                
                cmp     esi, 2
                jz      short loc_10040DD8

loc_10040DCB:                         
                lea     eax, [esp+0CCh+hKey]
                push    eax             ; hKey
                call    sub_10040360
                add     esp, 4

loc_10040DD8:                        
                test    esi, esi
                jz      short loc_10040E54
                cmp     esi, 7
                jz      short loc_10040E54
                mov     al, [esp+0CCh+arg_4]
                test    al, al
                jz      short loc_10040E54
                push    esi
                call    sub_10040640
                add     esp, 4
                call    sub_10040E70
                mov     esi, eax
                test    esi, esi
                jnz     short loc_10040E54
                lea     ecx, [esp+0CCh+hKey]
                push    ecx             ; hKey
                call    sub_10041610
                add     esp, 4
                test    eax, eax
                jnz     short loc_10040E56
                lea     edx, [esp+0CCh+hKey]
                push    eax
                push    edx
                call    sub_1003F640
                mov     esi, eax
                add     esp, 8
                test    esi, esi
                jnz     short loc_10040E54
                test    [esp+0CCh+var_98], edi
                jz      short loc_10040E54
                lea     eax, [esp+0CCh+hKey]
                push    eax             ; hKey
                call    sub_10040360
                add     esp, 4
                mov     eax, 0FFFFFE9Eh
                pop     edi
                pop     esi
                mov     ecx, [esp+0C4h+var_C]
                mov     large fs:0, ecx
                add     esp, 0C4h
                retn
; -------------------------------------------------------------------------

loc_10040E54:                         
                                     
                mov     eax, esi

loc_10040E56:                         
                mov     ecx, [esp+0CCh+var_C]
                pop     edi
                pop     esi
                mov     large fs:0, ecx
                add     esp, 0C4h
                retn
sub_10040C60    endp


 
网友评论:
1
2008-12-28 23:04 | 回复
沙发(欢呼...) 学汇编已经半年矣,现在感觉七窍已经通其六了...望先生指点一二。
 
2
2008-12-29 09:11 | 回复
看来只是一窍不通而已,继续加油
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu