| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1424 人关注过本帖, 1 人收藏
标题:一个比较有意思的开发库
取消只看楼主 加入收藏
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
结帖率:100%
收藏(1)
 问题点数:0 回复次数:0 
一个比较有意思的开发库
应朋友所托,HX的一个SDK。感觉比较有意思。放在这里。给需要的朋友。

程序代码:
comment *=======================================================================
    标题: MachineID
    
    描述: MachineID.dll    是一个PC硬件ID生成库。使用了注册码注册方式。未注册版本会有干扰对话框出现。
          本文件没有采取一往的分析算法,生成注册码方式进行CRACK。而是根据其采用全局变量进行注册合法标示判定的弱点,
          采用定位数据写入方式直接成为正式版本。其中定义的CrackPoint为DLL加载后模块相对偏移量。
          
    备注: MachineID SDK来源于 http:// 
    建立: 2009.9.17
    
    修改记录:    
    
    作者: 东海一鱼
=============================================================================*

IFNDEF  MACHINEID_INC
MACHINEID    equ    <1>

IFNDEF _wininc_
    include    windows.inc
ENDIF

    CTEXT MACRO y:VARARG
        LOCAL sym

    STRDATA segment dword private 'DATA'
        IFIDNI <y>,<>
            sym db 0
        ELSE
            sym db y,0
        ENDIF
    STRDATA ends

        EXITM <OFFSET sym>
    ENDM


IsVirtualMachine              typedef proto                ; Boolean; stdcall; external DLLName name 'IsVirtualMachine';

GetMachineID                 typedef proto                     ;: PAnsiChar; stdcall; external DLLName name 'GetMachineID';         //AnsiString Support UTF-8
GetMachineIDW             typedef proto                    ;: PChar; stdcall; external DLLName name 'GetMachineIDW';            //Unicode Support UTF-16

MID_R                     typedef proto  USERID:LPSTR, LicenseKey:LPSTR            ; stdcall external DLLName name 'MID_R';    //AnsiString Support UTF-8
MID_RW                     typedef proto  USERID:LPSTR, LicenseKey:LPSTR        ; stdcall external DLLName name 'MID_RW';      // Unicode Support UTF-16

UserExtraInfo                 typedef proto  Info:LPSTR                    ; stdcall; external DLLName name 'UserExtraInfo';
UserExtraInfoW             typedef proto  Info:LPSTR                ; stdcall; external DLLName name 'UserExtraInfoW';   // Unicode Support UTF-16

SetSeparator                 typedef proto  Separator:PCHAR                ;PAnsiChar; stdcall; external DLLName name 'SetSeparator';
SetHardware                 typedef proto  HDD:BOOL,CPU:BOOL,BIOS:BOOL

pIsVirtualMachine             typedef ptr  IsVirtualMachine
pGetMachineID             typedef ptr  GetMachineID
pGetMachineIDW            typedef ptr  GetMachineIDW
pMID_R                    typedef ptr  MID_R
pMID_RW                    typedef ptr  MID_RW
pUserExtraInfo                typedef ptr  UserExtraInfo
pUserExtraInfoW            typedef ptr  UserExtraInfoW
pSetSeparator                typedef ptr  SetSeparator
pSetHardware                typedef ptr  SetHardware

MacineID_Inint                proto
MacineID_Free                 proto

.const
    CrackPoint equ  0c55c8h                            ; //MachineID.dll 破解相对偏移量
    CrackCode equ  01h                                ; //MachineID.dll 使用了全局检验标记    
    
.data?
    fnIsVm        pIsVirtualMachine    ?
    fnGetID        pGetMachineID    ?
    fnGetIDW        pGetMachineIDW    ?
    fnMID_R        pMID_R            ?
    fnMID_RW    pMID_RW            ?
    fnUserEInfo    pUserExtraInfo        ?
    fnUserEInfoW    pUserExtraInfoW    ?
    fnSetSep        pSetSeparator        ?
    fnSetHard        pSetHardware        ?
    
    hDll            dd                ?
    
ELSEIF
echo--------------------------------
echo重复定义 MachineID.inc 文件
echo--------------------------------
ENDIF

程序代码:
include MachineID.inc
include kernel32.inc

MacineID_Inint proc
    
    invoke LoadLibrary,CTEXT('MachineID.dll')
    mov hDll,eax
    .if eax        
        add eax,CrackPoint
        mov edx,[eax + 4]
        cmp edx,0ffffffffh
        jnz    error
        
        mov byte ptr[eax], CrackCode
        
        invoke GetProcAddress,hDll,CTEXT('IsVirtualMachine')
        mov fnIsVm,eax
        invoke GetProcAddress,hDll,CTEXT('GetMachineID')
        mov fnGetID,eax
        invoke GetProcAddress,hDll,CTEXT('SetHardware')
        mov fnSetHard,eax
        invoke GetProcAddress,hDll,CTEXT('UserExtraInfo')
        mov fnUserEInfo,eax
        invoke GetProcAddress,hDll,CTEXT('UserExtraInfoW')
        mov fnUserEInfoW,eax
        invoke GetProcAddress,hDll,CTEXT('IsVirtualMachine')
        mov fnIsVm,eax
        invoke GetProcAddress,hDll,CTEXT('MID_R')
        mov fnMID_R,eax
        invoke GetProcAddress,hDll,CTEXT('MID_RW')
        mov fnMID_RW,eax
        
        or eax,1
        jmp over
    .endif
error:
    xor eax,eax
over:
    ret

MacineID_Inint endp

MacineID_Free proc
    
    .if hDll
        invoke CloseHandle,hDll
        mov hDll,0
    .endif    
    ret
MacineID_Free endp
搜索更多相关主题的帖子: 开发 
2009-09-18 10:23
快速回复:一个比较有意思的开发库
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021067 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved