scheck.nas

来自「Cracker终结者——提供最优秀的软件保护技术」· NAS 代码 · 共 63 行

NAS
63
字号
;;
;; aPLib compression library  -  the smaller the better :)
;;
;; NASM safe assembler crc checker
;;
;; Copyright (c) 1998-2002 by Joergen Ibsen / Jibz
;; All Rights Reserved
;;

; define _ELF_ for ELF32 object files
; define _OBJ_ for OMF object files

bits 32

%include "apnasm.mac"

section aptext

cglobal aPsafe_check,4

cextern aP_crc32

aplabel aPsafe_check,4

    pushad

    mov    esi, [esp + 36]    ; esi -> buffer

    mov    ebx, [esi]         ; ebx = header.tag

    cmp    ebx, 032335041h    ; check tag == 'AP32'
    jne    short .return_zero

    mov    ebx, [esi + 4]     ; ebx = header.header_size
    cmp    ebx, byte 24       ; check header_size >= 24
    jb     short .return_zero

    add    ebx, esi           ; ebx -> packed data

    push   dword [esi + 8]    ; push header.packed_size
    push   ebx
    call   aP_crc32
    apadjust 8                ; adjust stack (function is cdecl)

    cmp    eax, [esi + 12]    ; check eax == header.packed_crc

    mov    eax, [esi + 16]    ; eax = header.orig_size

    je     short .return_eax

.return_zero:
    sub    eax, eax           ; eax = 0

.return_eax:
    mov    [esp + 28], eax    ; return unpacked length in eax

    popad
    apret 4

%ifdef _OBJ_
  section apdata
%endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?