Winlicen HWID 研究——合集
By david hee
2010/2/28
Winlicen HWID 研究之一:CPUID
www.unpack/viewthread.php?tid=38518&highlight=
Winlicen HWID 研究之二:BIOS
www.unpack/viewthread.php?tid=38771&highlight=
Winlicen HWID 研究之三:HD
www.unpack/viewthread.php?tid=38684&highlight=
Winlicen HWID 研究之四:MAC
www.unpack/viewthread.php?tid=38736&highlight=
Winlicen HWID 研究之五:程序小结
www.unpack/viewthread.php?tid=39133&highlight=
Winlicen HWID 研究之六:总结篇(前三节)
www.unpack/viewthread.php?tid=39133&highlight= (2楼)
Winlicen HWID 研究之六:总结篇(四五节)
企业团建www.unpack/viewthread.php?tid=41922&highlight=
因为的为怎么写Winlicen HWID 研究——全套源代码
www.unpack/viewthread.php?tid=39135&highlight=
综述
陆陆续续写了一系列Winlicen HWID 的研究文章,回头看看发现,如果直接合并在一起,逻辑性不强。只有调整、补充一些内容才象个文章的样。
从《研究之一》到《研究之五》实际上没有什么内容,只是把研究成果与各位网友分享一下。《研究之六》才有具体的内容,但是只是说明了一下研究目的和调试方法,对HWID的算法没有具体的说明。在《研究——全套源代码》中用Delphi展示了Winlicen HWID的算法。
在这个合集中,将重点补充分析一下HWID的结构和算法。
一、为什么要研究HWID
WL的机码锁在shoooo的经典方法下一段时间形同虚设。现在不少软件用SDK二次检测anti-patch,或者脱壳后功能不正常。我的目的不是脱壳(脱壳大牛们已经做得比较完美了),只是想用在其他机子上。论坛上没有WL-HWID的资料,只好自力更生。搞清楚HWID的机制,可以从源头上patch程序。
二、如何研究HWID
shoooo说过,研究TMD/WL,可以先搞低版本的。通过测试,可以发现HWID从WL1.8.5.5到2.0.8.0一直没变过,也就是说算法一直没变过。嗯,那么就从最简单的开始
吧。
先做一个WL-HWID的小程序:
test.asm
尉迟恭和秦琼
******************************************************************弥子瑕
.386
.model flat, stdcall ;32 bit memory model
option camap :none ;ca nsitive
include Test Project.inc
;--------------------------------------------------------------------------------
;If you are doing source code breakpoints, this file must be included.
;You don't need it with int 3 breakpoints.
include \radasm\masm\inc\radbg.inc
;--------------------------------------------------------------------------------
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
invoke ExitProcess,0
;>>>>>>>>>>>>>>##DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG
.elif eax==WM_COMMAND
pushad
mov eax,1
invoke SetLastError,0
popad
mov eax,wParam
.if ax==HWID_BTN
invoke GetDlgItemText,hWin,HWID_STC,addr MIDtmp ,sizeof MIDtmp
invoke SetWindowText, hWin, addr MIDtmp
群面是怎么面试的 invoke GetDlgItem,hWin,HWID_EDT
invoke SetWindowText, eax, addr MIDtmp
.elif ax==TEST_BTN
;lea eax,MachineId
lea eax,MIDtmp
集体备课的五个步骤 mov MIDPoint,eax
invoke WLHardwareGetID , MIDPoint
invoke SetWindowText, hWin, MIDPoint
invoke GetDlgItem,hWin,HWID_EDT
invoke SetWindowText, eax, MIDPoint
.elif ax==EXIT_BTN
invoke EndDialog,hWin,0
.endif
.elif eax==WM_CLOSE
pushad
popad
invoke EndDialog,hWin,0
.elif eax==WM_SIZING
mov edx,lParam
mov eax,[edx].p
add eax,204
mov [edx].RECT.bottom,eax
mov eax,[edx].RECT.right
sub eax,[edx].RECT.left
.if eax>400
mov eax,[edx].RECT.left
add eax,400
mov [edx].RECT.right,eax
; mov eax,TRUE
; ret
天的成语
.endif
.el
怎样写辞职报告 mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start
****************************************************************
Test Project.inc
****************************************************************
include windows.inc
include kernel32.inc
include ur32.inc
include Comctl32.inc
include shell32.inc
includelib kernel32.lib
includelib ur32.lib
includelib Comctl32.lib
includelib shell32.lib
includelib WinlicenSDK.lib
;--------------------------------------------------------------------------------