• 标 题:使用dll进行验证的注册方式 (1千字)
  • 作 者:ArchFire/ATA
  • 时 间:2002-12-4 16:19:57
  • 链 接:http://bbs.pediy.com

暴破之瞒天过海
 
    分析某软件的注册验证, 发现它是通过调用一个dll来判断keyfile内容是否正确, 是否在使用期之内, 并且这个子程序作的很是复杂, 当然如果想找算法还是能找得到:) 如keyfile正确, 则返回eax=0, 并且内存某位置的8个字节应该为固定的一个值. 这样, 分析dll文件, 发现它仅有这一个导出的函数, 那么仿造这样一个dll是完全可行的。内容简单如下:

.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
.RADIX 16
SomeThing    db    26, 1d, 28, 15, 34, 5d, 08, 4b, 10, 1b, 00    
.code
.RADIX 16
DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
        mov  eax,TRUE
        ret
DllEntry Endp
;---------------------------------------------------------------------------------------------------
;反击1。
;----------------------------------------------------------------------------------------------------
XXXX proc
    push ecx
    push esi
    push edi
    mov edi, dword ptr [esp+14]  ;待赋值内存位置
    lea esi, SomeThing
    push 0b
    pop ecx
    rep movsb
    pop edi
    pop esi
    pop ecx
    xor eax, eax        ;正确的返回值
    ret 0c              ;入栈有三个参数,保持stack平衡
XXXX endp

End DllEntry