久久综合伊人噜噜色,日本三级香港三级人妇电影精品,亚洲中文色资源,国产高清一区二区三区人妖

      <small id="r7w9x"></small>
          <td id="r7w9x"></td><sub id="r7w9x"><menu id="r7w9x"><samp id="r7w9x"></samp></menu></sub>
        1. <th id="r7w9x"></th>
          1.  找回密碼
             注冊(cè)

            QQ登錄

            只需一步,快速開始

            About anti-SoftICE tricks

            [復(fù)制鏈接]
            1#
            發(fā)表于 2008-9-28 16:34:50 | 只看該作者 |倒序?yàn)g覽 |閱讀模式
            <TABLE width=500>
            : }' S4 T: w" {: y; l* z8 F<TBODY>
            $ s8 a0 a2 |' F' O  t6 B<TR>
            % L  S( A2 ]4 t6 O$ Z<TD><PRE>Method 01 $ U9 ~+ @% F& a( e* Q( B' ^: D
            =========
            ( t* B; ~8 y' A$ Y4 S, Z
            # _  x3 g8 C  v: `% R1 v; g4 jThis method of detection of SoftICE (as well as the following one) is
            : |/ R0 ^; o+ i2 ~8 qused by the majority of packers/encryptors found on Internet.5 S8 j5 N) D/ i0 ^' J! a
            It seeks the signature of BoundsChecker in SoftICE) _- a# Y' j3 G3 C

            & @# B, {4 Z# `$ F5 E* e    mov     ebp, 04243484Bh        ; 'BCHK'
            . y$ X3 {* w+ f    mov     ax, 04h# R) v9 [, D4 b; Z' H1 c
                int     3       ; v% N$ S2 U  c0 z3 U9 m
                cmp     al,41 h/ L& g' v. }
                jnz     SoftICE_Detected
            $ ^6 h, W# v/ j/ F/ A% s; z
            3 r. e) H5 n+ s9 U; d  x___________________________________________________________________________, i; f, C# N1 d; M3 J
            ) C# h3 P' F% b
            Method 02
            8 a  M8 D4 X3 v  O0 M3 g: J=========
            + D4 I; M9 h7 q' W+ F, k$ P
            ) a' G& p3 K- G6 p. ^Still a method very much used (perhaps the most frequent one).  It is used- S  Z* a5 a$ W
            to get SoftICE 'Back Door commands' which gives infos on Breakpoints,
            ' |4 n0 y; N+ V% f" T& |9 |or execute SoftICE commands...
            ! ]" g$ H0 J- d3 `; d" \It is also used to crash SoftICE and to force it to execute any commands
            + Y# O6 V1 w% m1 |  Q; ~' J(HBOOT...) :-((  8 T( v; U- n) N, Q3 _

            ' J& t* p6 h% N6 J% DHere is a quick description:
            ( e6 g4 \  {9 ^+ w* L( W-AX = 0910h   (Display string in SIce windows)* P- g, i# m+ s. e6 u+ H
            -AX = 0911h   (Execute SIce commands -command is displayed is ds:dx)* _' u) Y7 y! B
            -AX = 0912h   (Get breakpoint infos)
            # F0 A! B$ W. f1 w-AX = 0913h   (Set Sice breakpoints)
            4 c4 r  b/ \, H0 k# f+ N, Y-AX = 0914h   (Remove SIce breakoints)
            / y, a6 C9 P1 J) N3 A2 s" i* z, q% Y0 S8 N
            Each time you'll meet this trick, you'll see:
            3 \- ~" ?- ]( ^2 g9 C! E9 G3 p-SI = 4647h
            . L2 M# W9 O6 }' a/ L" d" g-DI = 4A4Dh7 j  S, {6 a! j
            Which are the 'magic values' used by SoftIce.
            9 F2 ^# K! k0 E7 @For more informations, see "Ralf Brown Interrupt list" chapter int 03h.
            ( Q" v. H6 s. L7 o
            5 F, Y3 \' L- [2 A4 k1 r2 l8 X* yHere is one example from the file "Haspinst.exe" which is the dongle HASP
            ! u  _, j) Q. \3 PEnvelope utility use to protect DOS applications:- {0 w' D0 a- i# u
            9 p7 ~% a% x- ~( ^. }, a
            2 j( {. @1 p- r$ p$ e, C( a) V
            4C19:0095   MOV    AX,0911  ; execute command.
            7 z$ P& O$ V) N; I6 L" k# f4C19:0098   MOV    DX,[BX]  ; ds:dx point to the command (see below).4 d) ^2 ~$ ]. n( V
            4C19:009A   MOV    SI,4647  ; 1st magic value.
            8 u6 e' W. _) x  C; R2 ?# t. Q4C19:009D   MOV    DI,4A4D  ; 2nd magic value.: Q6 S, x8 Z. w: g# x
            4C19:00A0   INT    3        ; Int call.(if SIce is not loaded, jmp to 00AD*)
            6 S3 _  B1 i; g6 l  f( ^4C19:00A1   ADD    BX,02    ; BX+2 to point to next command to execute0 C6 I- V# G& c; i) D$ {0 i
            4C19:00A4   INC    CX. {7 z! r; w/ T8 ?
            4C19:00A5   CMP    CX,06    ; Repeat 6 times  to execute* a$ U7 n& o7 j/ d- J7 `
            4C19:00A8   JB     0095     ; 6 different commands.
            8 r* P/ J0 H# A' G" K9 ~4C19:00AA   JMP    0002     ; Bad_Guy jmp back.
            ) y. F2 N% k, U4 @3 K) p4C19:00AD   MOV    BX,SP    ; Good_Guy go ahead :)
            , `& W( C- w# `# n+ n# x4 T% ~
            " E7 d4 r2 N, E! k; yThe program will execute 6 different SIce commands located at ds:dx, which& `3 M$ \( N  E0 A0 Q' c6 g6 z6 w
            are: LDT, IDT, GDT, TSS, RS, and ...HBOOT.2 C) x: N( E: w% ], l9 V
            & U  V0 L1 j2 r
            * the "jmp to 00ADh" is performed via an SEH if the debugger is not loaded.( h8 j- B7 _# J0 M, {8 Q% Y$ n: O9 Z
            ___________________________________________________________________________
            ) d& w* x0 n. ?2 ~4 T+ T1 m' }1 c2 G) [! I' v6 _1 I& H5 o8 T, ~
            $ r; d+ s" t5 B8 M6 ]
            Method 03
            % w6 ^9 W5 P4 l+ Z& c=========9 L' M/ S+ N+ N0 ?  o
            5 _8 G* q8 S" h7 h
            Less used method.  It seeks the ID of SoftICE VxD via the int 2Fh/1684h
            % z( d. O! y1 Z3 y# c/ F+ b(API Get entry point)$ s0 ]6 C/ Z5 B& ^
                    2 S8 l0 Q% Z( f  s  r

            1 U' f, i# t$ X    xor     di,di- Z3 q3 P4 Z+ z: Q6 I! G9 f) E+ J
                mov     es,di5 k& _. o  t0 L! ^
                mov     ax, 1684h       , O; `! a# C: I  x5 J
                mov     bx, 0202h       ; VxD ID of winice
            ) u+ g; B! G$ e/ T    int     2Fh0 d! I! L' t1 x
                mov     ax, es          ; ES:DI -&gt; VxD API entry point
              I/ k, U+ i0 I  \- ^    add     ax, di" U: h3 U: J9 P/ Z8 c- C
                test    ax,ax
            + ^' L% y  P! F8 Z! S  O    jnz     SoftICE_Detected6 y$ G. J; B* N7 S4 V& R; \) S* H5 N
            9 H' [5 M0 _) _' Z" h' Z
            ___________________________________________________________________________0 Q9 m. k3 ^3 A
            0 u* v" I# q, M+ ]8 T
            Method 04
            + M1 Q8 f: F, Q3 ?0 ]=========; Z5 M, o- i8 f

            . T* A1 I0 Q3 D  KMethod identical to the preceding one except that it seeks the ID of SoftICE
            7 f0 A/ p$ ^6 [- DGFX VxD.% m" ~) T) M7 W' E
            ) u; Y" d6 h/ o1 C
                xor     di,di4 M- F6 G6 [. R  Z! Y  O
                mov     es,di
            : E7 u' z- j. ~; W# E' C8 x& Z" ?    mov     ax, 1684h      
            , P" D2 d% p8 x4 G    mov     bx, 7a5Fh       ; VxD ID of SIWVID8 F2 g: l  D) ~+ r  [9 Q
                int     2fh
            7 n, O) z2 p/ Z/ {3 Y/ M    mov     ax, es          ; ES:DI -&gt; VxD API entry point
            2 }" x" w% Y5 }, u, ?    add     ax, di1 u, k' s* s& P6 z; n' S/ b
                test    ax,ax( |* F8 `5 W! w3 w) |8 e, W
                jnz     SoftICE_Detected
            9 s! O0 Y9 I- L9 Z, V/ I& a( Y" q1 _, T; x* S5 J/ ]1 f
            __________________________________________________________________________
            - ?  [" u! b6 C* U! O& L, Z: Q2 k+ i/ g! C) t) n

            7 m5 M# s9 s! NMethod 05
            % [6 s5 M. J0 Z6 O) P5 ~# X=========
            , w$ Z0 p$ o8 K! Z  c- |
            + y: J- x5 g  q* aMethod seeking the 'magic number' 0F386h returned (in ax) by all system
            3 b* n! U7 `. A& J& e6 w- \  n+ e  Ndebugger. It calls the int 41h, function 4Fh.
            , ]" J9 @5 I- h: a9 y7 [There are several alternatives.  
            1 c- ?, ?- s- Y
            $ x% A) j0 {( z7 E8 f  C; I' eThe following one is the simplest:
            1 {7 y2 q8 n3 r) }4 n$ |4 X" }
            % X5 M& `; t( {9 X- s: q    mov     ax,4fh
            6 H2 Z) i% U' @2 S. O    int     41h
            ; }2 Z" V8 L" {- k7 \$ c    cmp     ax, 0F3860 i( j* Z2 q$ O0 l# Q+ z
                jz      SoftICE_detected, ~# V' C6 O- B
            - D* M- R: c( _. e. Z, _
            2 [' z- W$ Y& u1 Y0 @6 G
            Next method as well as the following one are 2 examples from Stone's , S! `' k9 J, `
            "stn-wid.zip" (www.cracking.net):8 i& y7 B" M1 a
            2 R9 ?6 d8 t! N9 g& l
                mov     bx, cs
            4 h" b4 A6 }2 K: h( O    lea     dx, int41handler2& z. o0 K' \$ a0 B2 R
                xchg    dx, es:[41h*4]
            3 h% q- c/ l- W( X7 I0 R% f    xchg    bx, es:[41h*4+2]
            $ }# x0 I; Z8 e# t) k    mov     ax,4fh
            ' ?5 j/ u3 h5 _0 X# F9 A    int     41h
            8 C8 Z7 L( E; p1 s/ r    xchg    dx, es:[41h*4]4 Y9 r9 S# o% F# p
                xchg    bx, es:[41h*4+2]
            8 o* `+ d& G+ n8 H! A$ ~    cmp     ax, 0f386h
            / ^# z# k8 C+ x1 G1 h    jz      SoftICE_detected
            2 d# Z& y  _+ Z+ c( O! N- ?& Q, W+ ~8 m6 c0 ?8 E( S
            int41handler2 PROC
            1 p9 H+ U: F1 Y& t    iret
            1 M' N+ E$ P: F- x0 @int41handler2 ENDP
            3 W3 A  @" Q% |1 `0 }* |; j
            : W6 |) P" v' C% h( J# Q
            3 Y/ X) ]/ m% S/ f_________________________________________________________________________
              i% m* y' C; s$ h6 S
            % y2 r$ j# z9 w8 j2 k1 m
            1 N1 k3 R0 a9 c- L6 h6 }Method 06" s1 G7 w, l7 W
            =========2 }* ^0 W5 B# ^& l

            / O& L" k1 |$ j  A5 |& Y1 B( }0 K+ i. z/ N* ^0 c
            2nd method similar to the preceding one but more difficult to detect:& M. h7 S# W7 b8 x) I- u

            ) W& Q+ H9 v0 [, G) B% R; n  E4 H
            int41handler PROC
            ( n: `( m, |9 J! E) A5 z    mov     cl,al
            - {+ z, N6 v, x4 K& y6 j    iret, |( b/ O# t  t3 c. D: O5 |
            int41handler ENDP
            ' \5 B; x, |/ ?, M
            . X3 ^( A, o, {$ w# S
            # L% `; i' L' h0 ^: C2 Q    xor     ax,ax8 S* j/ z, g8 ?3 ?/ n
                mov     es,ax
            0 a1 D* L6 t3 ^    mov     bx, cs! Y" ~/ [) ~1 m3 y
                lea     dx, int41handler9 A' D5 N) ~, r* Z
                xchg    dx, es:[41h*4]! X: z; C; X( N
                xchg    bx, es:[41h*4+2]
            / V: _2 ^' K# C) e, C7 n( E    in      al, 40h1 }' b1 i" k' q7 S4 P: @
                xor     cx,cx" w7 j7 m- k1 i# X: f# Q1 I
                int     41h
            5 f* j5 V0 |! ^* v8 P    xchg    dx, es:[41h*4]7 `! `' {5 |! N8 s
                xchg    bx, es:[41h*4+2]
            7 k3 e" U; [5 @" \    cmp     cl,al( N, }+ k, G3 z- L! E) d2 R
                jnz     SoftICE_detected3 ?; o, M, h( |$ M3 P" H/ D: v

            ) L4 b! Y7 z2 b* M. G, R_________________________________________________________________________/ {) m8 E' J; ^# j

            , R9 y: w# `* b! Y0 cMethod 07% k) D7 y! \" ^* h; V. C
            =========9 s, }$ F5 Q  E. V( M0 e0 `/ L
            ( U4 ~. V; d. g1 A
            Method of detection of the WinICE handler in the int68h (V86)" {+ [5 D+ ^( a3 s$ @3 V) ~
            ( i- l/ v# {6 v7 F. m
                mov     ah,43h: |! ~  [: `; i( ?* t* |
                int     68h0 F+ h" W1 ]  x3 w, t- S! @! o
                cmp     ax,0F386h
              J( s3 j) y8 g    jz      SoftICE_Detected# b9 H  |# W5 W9 w  h, T. M
            0 s0 J+ J# `6 x! W$ k& ?. I# h
            * s) {* W; I  q: x1 ]* b' i
            =&gt; it is not possible to set a BPINT 68 with softice but you can hook a 32Bit
            - ?0 Y6 s- y- l# U4 m2 O: v   app like this:
            7 L$ s- n7 G: \9 z" D
            $ \- h9 a6 N- v! E2 I( D   BPX exec_int if ax==68, J& M9 E, ?4 V& f# P
               (function called is located at byte ptr [ebp+1Dh] and client eip is3 W/ l. e4 s  D0 b6 T9 z- N
               located at [ebp+48h] for 32Bit apps). y1 b  P* M, L  I! y$ [! T. Z
            __________________________________________________________________________& o' E% n( t. W2 w

            ) R+ Z, Q. K- \$ z, G1 \: p
            ; ]& i+ ]7 H# AMethod 08
            ; d; \* Z4 v6 F3 Q' ^8 T=========! {9 d% Y# D" h  H$ }

            9 c4 d# B! ^$ o, qIt is not a method of detection of SoftICE but a possibility to crash the
            ! `  ]0 t( K. s( K- Ksystem by intercepting int 01h and int 03h and redirecting them to another
              C( V$ i' ^* a' Zroutine.) s8 ~+ Z6 i4 Z5 [/ t4 S
            It calls int 21h functions 25h and 35h (set/get int vector) and ds:dx points
            8 S9 ^* _, Q6 ^- g8 P8 Qto the new routine to execute (hangs computer...)
            % J1 d% q# t# E& v
            / T4 s1 X7 d) O$ t! n  Y- w- B    mov     ah, 25h2 u* L$ j5 L; ?
                mov     al, Int_Number (01h or 03h)' x7 a; P# U! W4 V  L
                mov     dx, offset New_Int_Routine0 }( M3 w' e! k) y/ |& G: k; V( M3 z1 Q
                int     21h
            - L0 X# f# o6 ^3 v9 s' {+ S8 Y: e7 t8 m: v) [2 J
            __________________________________________________________________________
              S9 ~. Q: c5 K$ Q6 ?2 c. [; W7 j2 [! |( l- P
            Method 09
            $ X1 @$ Q  D, \6 F& T% S7 y1 o1 E=========
            3 D: f6 H& \, Q# \. E7 x" e0 v. ]! w! y% [& C- z
            This method is closed to methods 03 and 04 (int 2Fh/1684h) but it is only* a/ ]" }1 J* \3 U) O5 ]
            performed in ring0 (VxD or a ring3 app using the VxdCall).
            : f3 m3 S4 `0 U# t9 a/ g; xThe Get_DDB service is used to determine whether or not a VxD is installed7 ?% O/ \: P1 Y7 u! I3 _  V
            for the specified device and returns a Device Description Block (in ecx) for' M) Q% w: Z5 E7 h
            that device if it is installed.
            . D0 W% G. K  `% _7 }' e1 _
            ; q$ A" {! `5 n, b' k7 t, L   mov     eax, Device_ID   ; 202h for SICE or 7a5Fh for SIWVID VxD ID1 `  z. h2 h; A3 z! n/ L+ J( Y
               mov     edi, Device_Name ; only used if no VxD ID (useless in our case ;-)1 s  v- S5 W  |8 u, K
               VMMCall Get_DDB
            9 i) o8 I# K1 c8 Z; F) C- ^( m   mov     [DDB], ecx       ; ecx=DDB or 0 if the VxD is not installed( f4 \5 _* l( r6 l# g2 c+ f

            $ f0 q' A( k6 e& E0 W' q' Z  lNote as well that you can easily detect this method with SoftICE:+ c  [4 G4 w( k, X2 ~
               bpx Get_DDB if ax==0202 || ax==7a5fh/ p: ]* g  R% F5 o, Y. o$ ^7 _
            : R/ F5 s8 X5 O( z9 M* _2 o
            __________________________________________________________________________
            ; e; k( A% \# e8 H8 E7 Y  h9 _/ m7 z" K2 u# i" \5 W' h! n( [
            Method 10
            : x3 f6 \+ Z0 O4 A/ h  y=========
            4 q: f& Z" v9 y) b1 p. F( |
            - H4 H5 j1 h  C( x=&gt;Disable or clear breakpoints before using this feature. DO NOT trace with: s" U. x; O$ X- y2 J: L4 V' x# ?/ L
              SoftICE while the option is enable!!
              L. J$ @+ h* R9 ?2 y# d& ^( g6 @! C( w% y! I% @( a9 }$ v: z
            This trick is very efficient:: X% o3 j5 e; Q* n6 Z
            by checking the Debug Registers, you can detect if SoftICE is loaded
            ! k& Q, ?* R+ r7 M0 `# @: ^2 O) t(dr7=0x700 if you loaded the soft with SoftICE loader, 0x400 otherwise) or if
            / ]5 }' r- h3 l" zthere are some memory breakpoints set (dr0 to dr3) simply by reading their3 t7 R6 A8 m$ \1 v0 g
            value (in ring0 only). Values can be manipulated and or changed as well
            * d% [; Z) A6 v9 e& o(clearing BPMs for instance)9 l: Z: E7 G  t
            . {% I9 H: s! }. p8 Z8 ^, m
            __________________________________________________________________________% m3 O- M- [0 b- B& S* A

            7 N' W) g& s) `8 z6 sMethod 11
            6 U4 G4 w+ y8 i# j2 c' k" o=========
              M3 P3 O$ z  K  O; F6 ?* d& I! u
            9 `, o2 a( R; c" Q9 A- MThis method is most known as 'MeltICE' because it has been freely distributed
            ( C' J( [9 f: `/ R: Y) Pvia www.winfiles.com. However it was first used by NuMega people to allow
            8 Y3 x) p* ~/ E. R8 VSymbol Loader to check if SoftICE was active or not (the code is located9 e0 |, a$ Z) U3 B6 i9 L/ ^
            inside nmtrans.dll).
            * v6 ^3 @' g! v: G* n( m6 _
            / }+ {# G  x" r2 n: [4 a6 u3 d" h3 BThe way it works is very simple:7 `0 B+ @3 ^3 e( b' l. A8 K, y
            It tries to open SoftICE drivers handles (SICE, SIWVID for Win9x, NTICE for9 `% _+ q, T! S
            WinNT) with the CreateFileA API.
              ?0 m6 |; G1 p0 W6 e  x. ]3 K; w5 T9 E
            Here is a sample (checking for 'SICE'):
            & Z7 E2 W5 `. U+ P( F/ r& {, c; X. W& e
            BOOL IsSoftIce95Loaded()2 [- {9 Y' B  V" U1 K
            {& K- h. g, E4 p' G( Y; \' W  h" Q# C, C
               HANDLE hFile;  , {% Z3 |1 T+ o2 E9 M1 Z
               hFile = CreateFile( "\\\\.\\SICE", GENERIC_READ | GENERIC_WRITE,5 ]+ n0 d. d! @1 w% ?
                                  FILE_SHARE_READ | FILE_SHARE_WRITE," C/ g) i3 S5 J/ R1 l# _. i9 u) h
                                  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
            + W3 J# l# ], ]4 d/ R7 y! W. f   if( hFile != INVALID_HANDLE_VALUE )1 W; @. I$ z3 C# t7 |! o5 K
               {/ A! M( c  w0 r, J) f
                  CloseHandle(hFile);& B# p% j  R3 _" v
                  return TRUE;
            * [1 j8 T( {/ E$ Z   }
            . O  R$ G) F, t+ N   return FALSE;) Z, u( j' z# r  T2 k8 L) z3 B) f+ o
            }
            # a4 N( z( i! t' o* K- {# G/ S3 V
            Although this trick calls the CreateFileA function, don't even expect to be
            2 r. s  J* t) S4 ?, V" oable to intercept it by installing a IFS hook: it will not work, no way!
            - S* w% C: @' WIn fact, after the call to CreateFileA it will get through VWIN32 0x001F" y) u5 C0 U' a# `; j5 f
            service _VWIN32_ReleaseWin32Mutex (via Kernel32!ORD_0001/VxDCall function)
            ! g( r5 J9 ]* M7 U% Z- pand then browse the DDB list until it find the VxD and its DDB_Control_Proc
            3 ]( T! z5 a% v" y9 xfield., R' _# W* F1 }; k9 e2 p. A
            In fact, its purpose is not to load/unload VxDs but only to send a
              R2 Q9 Y' \+ P" e& [( CW32_DEVICEIOCONTROL (0x23) control message (DIOC_OPEN and DIOC_CLOSEHANDLE)
            / P4 ]+ r2 f" N' ato the VxD Control_Dispatch proc (how the hell a shareware soft could try& H9 N; e% E( Y6 U: g' \
            to load/unload a non-dynamically loadable driver such as SoftICE ;-).
            4 j* ]/ E  D. P$ ^. ^If the VxD is loaded, it will always clear eax and the Carry flag to allow
            6 o* a' t+ @5 @9 uits handle to be opened and then, will be detected.
            & S' c2 n; x+ C$ {, H0 KYou can check that simply by hooking Winice.exe control proc entry point
            9 c6 \) j, E6 A7 r. m# d  iwhile running MeltICE.% p5 z- R( G: C4 T8 s
            " V5 ^' P/ K+ B
            ' L) J7 K- n9 U; f' O4 G) i6 T
              00401067:  push      00402025    ; \\.\SICE
            ) P* q5 {4 C8 \9 r5 o7 Y% L  0040106C:  call      CreateFileA* [' B* T) b# ^4 C0 r; P
              00401071:  cmp       eax,-001' A1 g, J8 a( `
              00401074:  je        00401091% e& G* e! C( \( K9 V& v& X

            / x4 f. Q$ A. M* `% \5 g
            * U; I% X* g; X- [% H! ?There could be hundreds of BPX you could use to detect this trick.
            ! f0 d: Y/ o$ ]: {7 S-The most classical one is:
            1 Z  B0 n$ ~/ y7 {* U3 g  BPX CreateFileA if *(esp-&gt;4+4)=='SICE' || *(esp-&gt;4+4)=='SIWV' ||7 I" w, `% h) B! {4 L
                *(esp-&gt;4+4)=='NTIC'
            # y' ^* c7 I# R: c1 s+ ~2 h9 R# Q  V) a- Y% `; h3 R" o$ ?3 S
            -The most exotic ones (could be very slooooow :-(
            $ o4 I5 ^3 _& D. Q. e! \) S   BPINT 30 if eax==002A001F &amp;&amp; (*edi=='SICE' || *edi=='SIWV')  
            7 y4 r6 \6 z' x) h5 z( N     ;will break 3 times :-(  D; A) `. A  j4 N) f
            - Q7 x+ B3 ^4 {# g! y
            -or (a bit) faster:
            * m. l7 }4 N' D3 h9 H   BPINT 30 if (*edi=='SICE' || *edi=='SIWV')
            & W" k0 w8 O% o8 y: A6 @& i6 y+ B4 ]( [, F
               BPX KERNEL32!ORD_0001 if *edi=='SICE' || *edi=='SIWV'  2 `4 C. p7 n- d; W% u% P, M! L0 v' g
                 ;will break 3 times :-(6 T9 N, r3 g& @5 _# A: }

              w' {, ?  u8 S-Much faster:
            6 _( M$ X- u$ z1 s/ S9 x9 t   BPX VMM_GetDDBList if eax-&gt;3=='SICE' || eax-&gt;3=='SIWV'* f# {  H) z" s2 H" L1 \! K

            ( \7 B6 r; S3 k9 f$ FNote also that some programs (like AZPR3.00) use de old 16-bit _lopen. N* J3 ~) e4 x9 }
            function to do the same job:
            ; e3 g/ r4 F- h4 A7 g; ~+ C. q- @2 B) X2 y& g+ o/ k- i
               push    00                        ; OF_READ
            0 ?0 |8 Z+ E8 `2 }/ I) r/ B5 G   mov     eax,[00656634]            ; '\\.\SICE',0
            1 T% t6 A! d1 \9 d6 h   push    eax
            3 q% Y. g) ?" H3 K, {# E   call    KERNEL32!_lopen; Z* g5 J- O2 u7 o
               inc     eax2 r/ a6 X( L: ]/ d) O
               jnz     00650589                  ; detected0 F' W9 H1 c# m( R' j
               push    00                        ; OF_READ  J  F8 H: f6 g  G
               mov     eax,[00656638]            ; '\\.\SICE'
            - y6 |# `2 r" @( }* r4 k   push    eax, X4 f+ W/ c3 A: s/ g
               call    KERNEL32!_lopen
            , |3 R: S' x; s( M' o   inc     eax! O. X8 M6 ~, s9 ^
               jz      006505ae                  ; not detected
            & f/ g" W  q% {* f
            9 a) J- @* K0 C% H* z
            2 M) I$ a$ F7 T% V6 a__________________________________________________________________________
            1 ~& c" S" q2 e: U! P& X
            ! _  d# \9 S% C# a4 iMethod 12( B) E/ G$ c* ?# S4 `" }% O% E/ l
            =========
            ; B* O, q6 a" [) A1 S0 F: D# p+ D& w/ q7 W5 w/ {
            This trick is similar to int41h/4fh Debugger installation check (code 058 R) L! ~4 l4 E
            &amp; 06) but very limited because it's only available for Win95/98 (not NT)
            & l& J: M9 [$ o$ vas it uses the VxDCall backdoor. This detection was found in Bleem Demo.0 I/ ?9 s& i  x: N5 o# P& m
            9 T; F6 f% U$ F
               push  0000004fh         ; function 4fh
            8 h4 Y+ T  f- j  O- |9 W2 ?   push  002a002ah         ; high word specifies which VxD (VWIN32)
            & u! W1 b* A6 B$ F& N6 o                           ; low word specifies which service
            & l7 D, O8 n& R+ h1 ?; R! {/ \& ^                             (VWIN32_Int41Dispatch)9 {" Q( F6 u, @9 t5 R, L
               call  Kernel32!ORD_001  ; VxdCall
            ) Y$ g, U7 R& r! U0 q   cmp   ax, 0f386h        ; magic number returned by system debuggers
            - F9 E$ A. _+ F# u6 b) C   jz    SoftICE_detected
            6 o( ~, X8 _) T/ N# m- P" P& `5 O( y. B" Y0 K
            Here again, several ways to detect it:
            7 r1 T& g% W4 Y9 D: C" o7 H+ O4 i4 b$ A5 `/ ]+ {5 x' |
                BPINT 41 if ax==4f; k. `  I; C6 }/ ]+ V" d( }

            " M; r7 y8 u; K0 z9 S    BPINT 30 if ax==0xF386   ; SoftICE must be loaded for this one$ b3 T$ d: k7 R8 P
            ; V- w; Z9 `5 T0 o: ]' F
                BPX Exec_PM_Int if eax==41 &amp;&amp; edx-&gt;1c==4f &amp;&amp; edx-&gt;10==002A002A
            7 J: d: ~! i- m
            6 N2 {. z( E; {5 D! r    BPX Kernel32!ord_0001 if esp-&gt;4==002A002A &amp;&amp; esp-&gt;8==4f   ; slooooow!
            ; p! V& V9 o1 h- _  g
              _& ?7 ^  E8 o, x__________________________________________________________________________
            % s" |3 A/ |9 b6 Q
            ' ]& i& n' Y+ x! s+ T& q! E* {+ c' hMethod 13, ^& ]0 v2 q( K5 V+ P8 F$ Y& @+ m
            =========( j% s2 W3 I: T$ v  f; U% V4 v7 Y

            1 i, F- o! O8 Q+ B$ ^Not a real method of detection, but a good way to know if SoftICE is) v" P3 P0 R7 ]
            installed on a computer and to locate its installation directory.# f, _+ o7 f, f8 g/ G' _& N) ?
            It is used by few softs which access the following registry keys (usually #2) :
            . F7 |* c! a$ k9 {8 T6 Y- J  \  W
            -#1: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion7 Z$ T. c9 w8 Z: d  A
            \Uninstall\SoftICE9 \7 |! N% t' i1 Y5 Y; r
            -#2: HKEY_LOCAL_MACHINE\Software\NuMega\SoftICE- N: ^# l" E, H" R; [
            -#3: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
            9 J4 y6 ?2 |4 P% [0 @$ F\App Paths\Loader32.Exe5 t7 s$ s. ]& w
            8 g9 Y% ^6 [6 {0 U
            % V) G# L. r6 R+ Y( C
            Note that some nasty apps could then erase all files from SoftICE directory
            : W* U6 h; c5 ?0 Z9 `& j6 }$ W(I faced that once :-(8 M2 R( `' \$ C& b8 R9 I2 O

            ) J/ A& R& o8 `6 v. ]; a. NUseful breakpoint to detect it:5 d: s! H% {4 s: g& g

            6 n8 u4 ?  o; i: ?( w     BPX _regopenkey if *(esp-&gt;8+0x13)=='tICE' || *(esp-&gt;8+0x37)=='tICE'
            6 u& S3 _. m/ X# X3 D
            $ R! c( ?5 e2 Z! a__________________________________________________________________________2 y" I  {6 \  Z( h! U8 W
            - L3 a$ z2 y" w: A7 O
            0 P# {) x/ z0 P, p( z9 H* |
            Method 14 8 b% ?1 l# c' f  [! Y2 T
            =========& A2 W9 E. z; @6 ^% O/ m3 ~- q. {# N/ J5 _

              N  b1 A3 j0 h" `6 p  _! RA call to VMM 'Test_Debug_Installed' service. As the name says, its purpose
            ) ?! K+ j; S5 w3 v6 d$ mis to determines whether a debugger is running on your system (ring0 only).
            - A. W3 i* I4 G8 `
            - I) L9 n, U+ X/ Z' _8 V6 m) P   VMMCall Test_Debug_Installed
            7 T' r+ L' L0 w3 F) j   je      not_installed
            4 I! b" @% o2 L) V7 ~& N
            $ P' d( T: G. ~7 l' gThis service just checks a flag.( F5 V6 O( Z% B( z5 L+ b7 [
            </PRE></TD></TR></TBODY></TABLE>
            您需要登錄后才可以回帖 登錄 | 注冊(cè)

            本版積分規(guī)則

            QQ|本地廣告聯(lián)系: QQ:905790666 TEL:13176190456|Archiver|手機(jī)版|小黑屋|汶上信息港 ( 魯ICP備19052200號(hào)-1 )

            GMT+8, 2025-10-18 18:37

            Powered by Discuz! X3.5

            © 2001-2025 Discuz! Team.

            快速回復(fù) 返回頂部 返回列表