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

      <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.  找回密碼
             注冊

            QQ登錄

            只需一步,快速開始

            About anti-SoftICE tricks

            [復制鏈接]
            1#
            發(fā)表于 2008-9-28 16:34:50 | 只看該作者 |倒序瀏覽 |閱讀模式
            <TABLE width=500>' H6 V; t0 F' V$ z! J; J8 q
            <TBODY>
            * ]0 P; s* D- @, @5 d<TR>
            $ V* X& ^" a* ^6 L# c( w& |6 g0 T, i<TD><PRE>Method 01
            1 {0 h3 C+ V( S% d$ D1 G  m. P$ p& U=========/ z! ~. q1 O6 }- ?& E# E% O

            9 \! l5 S( b# |: K! L; RThis method of detection of SoftICE (as well as the following one) is
              L6 U. r% q) Q8 q  F+ N0 Gused by the majority of packers/encryptors found on Internet.
            : e9 M9 Z( p0 [1 d8 B- r2 UIt seeks the signature of BoundsChecker in SoftICE0 M0 X) ]2 o! L4 z( t4 a

            ( G0 r- n8 X1 _- V; K0 c    mov     ebp, 04243484Bh        ; 'BCHK'+ |7 `4 q+ u0 ]2 T  y( w( `
                mov     ax, 04h& z: F" t: o, O
                int     3       $ Y# V( f5 D% _9 w! B* {$ |
                cmp     al,4
            " S) s5 q  B$ W, u- d8 R+ `- s# o  a" [2 Z    jnz     SoftICE_Detected% v# @; `7 i- o9 G5 U; }( k$ m
            0 u! O; @( ^" P  u- f, u# z
            ___________________________________________________________________________
            . c7 f/ g; Q" @7 `" I2 b; V- H  A# y, I  K. C& ~6 f
            Method 02
            $ W/ O% a0 O  [+ N8 D) n=========0 A! {- n  k9 p$ a
            4 r# u8 U1 }, Z8 E" Q2 }
            Still a method very much used (perhaps the most frequent one).  It is used
            & A+ l. h4 X9 _) x8 A  ]# yto get SoftICE 'Back Door commands' which gives infos on Breakpoints,- E* i& U3 l& @% c, _) K& V7 z4 _2 R
            or execute SoftICE commands...
            6 l) G' z" E( `4 m! fIt is also used to crash SoftICE and to force it to execute any commands' m0 l7 |: f9 L: n0 M
            (HBOOT...) :-((  
            5 c" b5 ?. A7 B' y7 x
            6 M* ^1 w  q! P# hHere is a quick description:  t0 F8 ]1 q& a1 j: R" o$ U
            -AX = 0910h   (Display string in SIce windows)
            5 R5 y0 F( H- {4 Z! W% P* ~, T-AX = 0911h   (Execute SIce commands -command is displayed is ds:dx)( k7 k: @6 t' p3 i0 h# u; g
            -AX = 0912h   (Get breakpoint infos)
              D5 k9 l$ h, a4 Y% {% H-AX = 0913h   (Set Sice breakpoints)3 u' M# S+ Q% D' _, V% E1 S
            -AX = 0914h   (Remove SIce breakoints)0 y/ X; Z7 w1 C; K5 I# E

            ! y' n$ ]/ G+ z  u& d& sEach time you'll meet this trick, you'll see:
            3 t! p# s$ L% H" k9 ^7 T" [" `! a. q2 T2 k-SI = 4647h' V$ b2 `6 O" Q* R7 V( I
            -DI = 4A4Dh
            3 I: f: t* F3 Q3 DWhich are the 'magic values' used by SoftIce.  d  s1 M8 O- @: B4 x
            For more informations, see "Ralf Brown Interrupt list" chapter int 03h.
            ' |+ `: J: O, z
            7 Q6 \% H5 ?' J" `7 c& \Here is one example from the file "Haspinst.exe" which is the dongle HASP
            . Q+ o+ \. L, O6 A- Y1 l$ j; XEnvelope utility use to protect DOS applications:
              O3 l& }. w) m2 O9 @- f% R# Y1 g& F4 ]8 K: k& k% m2 E% B# ^; O
            2 v0 }, [; Y% X7 d
            4C19:0095   MOV    AX,0911  ; execute command.
            + T0 e; a0 I/ e5 n4C19:0098   MOV    DX,[BX]  ; ds:dx point to the command (see below).2 z) q3 D: n- F% u9 x7 q( }
            4C19:009A   MOV    SI,4647  ; 1st magic value./ M: r9 A6 M' v+ E5 G
            4C19:009D   MOV    DI,4A4D  ; 2nd magic value.: D# ~. y7 g5 n
            4C19:00A0   INT    3        ; Int call.(if SIce is not loaded, jmp to 00AD*); W3 g1 Y& T8 H; N
            4C19:00A1   ADD    BX,02    ; BX+2 to point to next command to execute
            ; z& T0 C' |6 d, R8 L2 y0 B8 p- O4C19:00A4   INC    CX- |- p, ?& g* s6 \1 t
            4C19:00A5   CMP    CX,06    ; Repeat 6 times  to execute: }; }  D5 a( M( M4 x% Z1 g
            4C19:00A8   JB     0095     ; 6 different commands.
            % a5 ]& X8 X! f2 [% e. q, t4C19:00AA   JMP    0002     ; Bad_Guy jmp back.
            9 P# x# x' z& @3 q4 ?9 R4C19:00AD   MOV    BX,SP    ; Good_Guy go ahead :)3 h7 o0 G/ ^% F

            $ {7 a) m/ j8 x) g4 GThe program will execute 6 different SIce commands located at ds:dx, which; E2 T& V/ z+ M/ k
            are: LDT, IDT, GDT, TSS, RS, and ...HBOOT.
            # m( [' d3 S+ ]* B4 u8 I, ]5 k# r: W* Z
            * the "jmp to 00ADh" is performed via an SEH if the debugger is not loaded.
            0 v1 @$ @# Q1 K$ _5 v8 w___________________________________________________________________________
            " M" b! J. q0 S% X' {5 P! }2 i
            2 x! n) l  \9 D& C$ m: q, C
            7 B! }. f% X" m7 F7 s9 BMethod 03
              _' P& t9 b0 S% T1 ^0 O=========$ }5 D& t! u& x0 f" I+ q: v
            ! O9 j; a5 X1 F  T9 m* P
            Less used method.  It seeks the ID of SoftICE VxD via the int 2Fh/1684h/ u/ U5 N* E& r& `4 Z
            (API Get entry point)
            7 C' S6 v' l' ~9 y5 Z, v0 n        
            ( \; r9 U! \8 V  i, c9 @  E1 |' |' W( ^# E
                xor     di,di
            3 |6 h: T; \- z  ]6 v' u. }2 _5 z) V    mov     es,di  s- P# w+ J1 _; V! o7 `2 M
                mov     ax, 1684h      
            0 i5 K! d7 f# z& T4 n  h# M    mov     bx, 0202h       ; VxD ID of winice$ f8 R7 s, g! a
                int     2Fh" y* H* T* b( P  O
                mov     ax, es          ; ES:DI -&gt; VxD API entry point7 d; B+ T/ [0 @8 d
                add     ax, di6 j2 s1 v6 l$ k3 _
                test    ax,ax$ O8 x# z- L& C7 \4 U" T
                jnz     SoftICE_Detected1 @+ m0 n+ X5 J
            / I# k# B5 y% x! }. b! x3 i: z
            ___________________________________________________________________________
            3 ^9 K1 ^% i# ^  W; P: H
            % w) ]: F" j7 XMethod 04
            6 B* G& ?5 i% Q=========
            3 G% I1 B4 S+ I) M" z% \3 e/ R* O  b5 \2 d& v. Y, M
            Method identical to the preceding one except that it seeks the ID of SoftICE/ p# a/ L9 B# u; j5 X- |1 i) r
            GFX VxD.; T7 k7 f" F6 z) u+ S; q
            2 ?+ c, p6 E$ V7 ]
                xor     di,di
            / N3 o4 z; c8 @3 O/ T+ b    mov     es,di& z6 G; P9 P* P6 e2 h7 x
                mov     ax, 1684h      
            ) P! @1 u' O: p$ l7 Q3 Z    mov     bx, 7a5Fh       ; VxD ID of SIWVID* V$ i" i9 U7 G- u2 P. W$ @& U# X1 z
                int     2fh+ C: ~% x' @1 C- C& p
                mov     ax, es          ; ES:DI -&gt; VxD API entry point
            6 W* n' Q% r: q# o- [    add     ax, di1 ]$ F( D/ R2 g$ S9 f4 H
                test    ax,ax/ |7 n5 x5 I$ f( x5 q( _
                jnz     SoftICE_Detected; X1 Y4 ?  r% f+ Y
            2 u+ _5 N$ r3 Q4 E, U
            __________________________________________________________________________( C9 {$ N# k+ A  w- x$ H& _7 m
            , G8 H( o: c  k5 O
            / ^2 _$ B/ M" X, F) }7 w. E& c( f
            Method 05
            + B  s# e- E2 N=========
            # b' U* y0 B" l) U) I( U- y. \- z0 Z5 K+ Z. d
            Method seeking the 'magic number' 0F386h returned (in ax) by all system
            8 w, K9 E* m3 b6 v; r- gdebugger. It calls the int 41h, function 4Fh.% f# h. a) a  d5 d
            There are several alternatives.  9 d. v; `; T! p1 Z2 A; |$ {5 ?

            6 L/ S7 x! J8 n; _3 z0 TThe following one is the simplest:/ R, x" J" r- q: C

            " B( G, P9 N; m! R5 \# j    mov     ax,4fh
            7 J( z& R; b8 W  Z    int     41h
            2 S' M+ x! X- F' s    cmp     ax, 0F3865 h& q, C) o% P% D. W# j+ ^5 v
                jz      SoftICE_detected- Z+ [' ^9 x& n4 @  t& b' y, z
            5 z: N, y* J- H% b/ ?7 F! `8 n1 ]
            - c( O* q! N1 e2 k/ E3 b
            Next method as well as the following one are 2 examples from Stone's
            ( q. y/ S) ]4 P1 x7 w) g"stn-wid.zip" (www.cracking.net):
            : ~+ T  N$ r/ d, F9 v4 H2 R7 O0 r, R6 Y
                mov     bx, cs- X. t; K/ z$ E, V0 \
                lea     dx, int41handler2* u9 t! s% P: u' s0 B) u
                xchg    dx, es:[41h*4]
            5 m3 f/ ~' J6 h7 C" }$ ]    xchg    bx, es:[41h*4+2]
            : e' C+ Z6 ~/ `7 ^% R7 B. H    mov     ax,4fh( [* |% Y% W+ L) Y+ K, w+ s* x: v
                int     41h
              [. K) i7 F* H    xchg    dx, es:[41h*4]
            * R( W% M% @2 b% L& A) b    xchg    bx, es:[41h*4+2]8 d, F% d+ ], }! J8 Y( l
                cmp     ax, 0f386h
            - m% O: m; Y0 ^$ a  W    jz      SoftICE_detected
            4 z* Q& y" G7 G2 ~" b, ]3 c! x( X. g0 i
            int41handler2 PROC
            : A5 W1 p6 K: Y7 a# L/ ^    iret' u1 a# [, o7 W2 i2 B
            int41handler2 ENDP$ X' t+ @4 e; N2 a. l0 u. _0 I8 h. X
            4 K' @/ R4 R% c
            ( ~" t2 S# I$ D. @) @
            _________________________________________________________________________* \7 `+ A. m7 q/ D& s* O
            8 A9 Z1 B( E& N/ r
            / d5 V4 o, V# ?* b) r/ {
            Method 06% C" `& q. Y+ _3 Z7 y
            =========1 P5 }; \9 i( ?  y% x
            ) m, p) `% n3 ~) u/ J. j

            5 r$ K1 _1 j5 G% y, u2nd method similar to the preceding one but more difficult to detect:
            1 a" G: O) O0 R& Y+ N7 S" o% b+ \7 A9 m- g; P: r; I, S
            : g! W+ b* N4 g6 `  y
            int41handler PROC
            . h+ F: T1 d1 d2 v8 ^% R    mov     cl,al
            ' r8 }# o8 B$ z) R* a! ~    iret2 _  z; f. }/ p. g3 f
            int41handler ENDP* y! P# e1 J5 ]' X6 g
            & t. H$ R& U8 N% j  {0 p( Z

            5 j0 Z8 e3 ~8 I- x+ h    xor     ax,ax; p5 x. M& r+ [
                mov     es,ax
            . A- V2 l+ ?* F+ ~/ J    mov     bx, cs
            8 |* _& Z6 f3 R    lea     dx, int41handler
            1 Y. T5 R( M! g: u+ h" M    xchg    dx, es:[41h*4]  K. C2 g7 x# B. h; r
                xchg    bx, es:[41h*4+2]/ c6 k2 n( G, N( Y. w3 m
                in      al, 40h
            ' v* E% S1 P* z. x    xor     cx,cx
            + X" z  N( S9 O" t  c; C    int     41h' |. ]+ v: x9 F: y5 W
                xchg    dx, es:[41h*4]' I" w5 A& ?% H/ ?
                xchg    bx, es:[41h*4+2]% h$ H/ y$ U  K/ `9 A! X
                cmp     cl,al" m" b7 g7 f/ `. q. ~6 ]
                jnz     SoftICE_detected6 Z; [" y" @4 D$ R9 P+ Q& M

            / p% K' |. \2 R& p. `_________________________________________________________________________) }/ @% f- @) a
            3 v  o' l0 N' J! W  q% p, R% }: P
            Method 07
            / b4 @, V4 Q3 j5 c; x/ d  m& i7 p=========2 P) r! S$ `% S3 C4 B

            . G. K/ Q% |8 Z5 iMethod of detection of the WinICE handler in the int68h (V86)
            & G. e6 A# ~0 M+ V. c* o4 L$ r( X) B  p, U) l
                mov     ah,43h
            # o) B& [2 X0 G- J0 y& i    int     68h
            6 S$ [& C, Y7 j+ E/ s% E8 }    cmp     ax,0F386h
            * f0 N  A  d% B+ F8 t7 D    jz      SoftICE_Detected
            7 O: G, H3 M3 c+ c( p5 g& g7 ^
            - v) z/ ~  o" i, y8 C2 O( N) I0 w3 A  p, t* l& B
            =&gt; it is not possible to set a BPINT 68 with softice but you can hook a 32Bit
            ) J) m' L6 O) ^% l; N/ e   app like this:
            ' A6 R0 b. j# g9 ?4 B2 J: H- [8 i
            7 Z- i, n  k. V2 S! n" G% ^% j. Z   BPX exec_int if ax==68. j: w7 {3 `3 C/ f
               (function called is located at byte ptr [ebp+1Dh] and client eip is
            7 `- U6 b0 M$ U  R, N* F4 z7 ?   located at [ebp+48h] for 32Bit apps)/ r+ r5 E6 T, i6 r% A
            __________________________________________________________________________% R$ x/ I0 L' Y; u. ]
            1 P& y% u! m* l: \* S; v& `

            $ U$ l; o/ y- t. D8 @1 d# V# aMethod 08
            $ H/ R. R+ h' M. b* e=========
            * {2 d' ]: d! ~  e2 j: k5 m) I6 }/ H* N3 b5 o
            It is not a method of detection of SoftICE but a possibility to crash the
            3 \$ }4 M; S/ j0 H9 U: U3 vsystem by intercepting int 01h and int 03h and redirecting them to another
            - l+ G" ]6 O4 O" Froutine.
            $ m" C: p2 [. E0 E5 PIt calls int 21h functions 25h and 35h (set/get int vector) and ds:dx points; Q4 K5 G- A1 r. B, O+ z8 p. b
            to the new routine to execute (hangs computer...)6 H) H7 Q8 w* {& k) o2 F9 u' z
            5 j( [5 c2 C1 _7 p' H
                mov     ah, 25h& p1 w6 O* f/ ]6 w; L
                mov     al, Int_Number (01h or 03h)( s1 R  {) t" G* Y3 |1 s5 j
                mov     dx, offset New_Int_Routine' h$ k4 K8 f2 v$ z$ c; Q) g
                int     21h
            4 c8 {& z. b% B! L% R% D3 f2 r" M) U9 q0 r) J0 e- x
            __________________________________________________________________________% x% A, F8 g8 w3 N/ i7 t

            . K' W  S$ k; [& LMethod 09
            ) `0 B* U5 A; O. `3 h=========8 J1 u7 ]4 a+ Q$ g# a

            9 V) P- K# ]# K# ?* o$ U% vThis method is closed to methods 03 and 04 (int 2Fh/1684h) but it is only
            # k/ |3 d- a: T. ~4 j8 g$ xperformed in ring0 (VxD or a ring3 app using the VxdCall).
            ( ~8 r% a: \+ C  `The Get_DDB service is used to determine whether or not a VxD is installed
            % L8 O1 ^1 `4 c. G% A) B/ afor the specified device and returns a Device Description Block (in ecx) for) B+ R7 p/ L, _$ W/ P* b  n$ l0 e
            that device if it is installed.% u# b1 \; V+ U/ ]  Z
            5 ~( Y1 |) N  u( Z. i0 R/ x5 J
               mov     eax, Device_ID   ; 202h for SICE or 7a5Fh for SIWVID VxD ID
            2 J, r$ g5 `$ O   mov     edi, Device_Name ; only used if no VxD ID (useless in our case ;-)) S; O* O  Q/ F6 J' [' g9 K
               VMMCall Get_DDB
            5 l3 D: L. Y& t* x   mov     [DDB], ecx       ; ecx=DDB or 0 if the VxD is not installed/ B$ o( l& K" D3 T$ K

            2 \+ J5 ?' q" b( X# ?7 hNote as well that you can easily detect this method with SoftICE:  u" C7 ^/ l/ Q
               bpx Get_DDB if ax==0202 || ax==7a5fh
            " p9 }" |0 J, G0 I' P
            5 V1 j' r8 [" ~6 n  k__________________________________________________________________________
            7 A; ?* N) u8 `- `4 z$ ]/ {2 Q0 e/ M5 q* F9 b* G
            Method 10
            7 L' s& r/ w/ |- v4 r, q2 z=========
            ' b% @) x, G# o+ G$ S0 z  I2 X8 w* i6 n6 o0 B5 D
            =&gt;Disable or clear breakpoints before using this feature. DO NOT trace with
            4 r. O+ J( e+ ^  SoftICE while the option is enable!!+ O3 Z- z: t8 X8 C

            & v/ L; @: D: X- _2 BThis trick is very efficient:
            6 J/ d! X8 ~, ?4 F0 Tby checking the Debug Registers, you can detect if SoftICE is loaded, B# W0 A- Q+ a0 T  U- F
            (dr7=0x700 if you loaded the soft with SoftICE loader, 0x400 otherwise) or if3 \. ?5 f' }; u
            there are some memory breakpoints set (dr0 to dr3) simply by reading their& o1 F. H8 A/ M# ?
            value (in ring0 only). Values can be manipulated and or changed as well
            $ ~1 x( R- w" }1 I(clearing BPMs for instance)! t7 k4 G7 p* x* d
            7 L1 d1 ]8 x& D0 ^# o
            __________________________________________________________________________  {- Y2 A. c6 M: @% A' d$ @+ h6 t- e( p
            1 d3 S" r% J$ N- O  n$ \, P
            Method 11
            % d) f( |4 b/ {9 B+ a5 b, M; h=========
            - e+ H0 Y, [! Q% O- V2 p9 G' i1 A- ]; u5 m& X& S% O  ^( h9 h
            This method is most known as 'MeltICE' because it has been freely distributed
            4 [% Y9 Y7 M& Evia www.winfiles.com. However it was first used by NuMega people to allow# Y+ W( s1 f" S1 T
            Symbol Loader to check if SoftICE was active or not (the code is located% b7 n* ]- O# n8 U
            inside nmtrans.dll).$ x0 F# q' C9 r* d% f  h2 K
            - g* K/ I5 _3 I# j( }4 R# v" s
            The way it works is very simple:
            / C- E7 c" S8 OIt tries to open SoftICE drivers handles (SICE, SIWVID for Win9x, NTICE for
            3 ^  ~. O: n. c; b+ P1 [WinNT) with the CreateFileA API.
            - }' ]4 F; o  C8 h5 w# }9 v/ ?5 G
            & W% K1 Y# l5 k8 d' S7 b% G2 Q/ UHere is a sample (checking for 'SICE'):2 H  n6 R" |! E  t3 Q, z5 {

            0 x$ |! C# A# }1 w# B% }BOOL IsSoftIce95Loaded()
            0 Q' c+ c# X% P& E0 q{: U, W4 T# P* O; V. v5 @
               HANDLE hFile;  
            0 S  Q5 S: B' V/ a   hFile = CreateFile( "\\\\.\\SICE", GENERIC_READ | GENERIC_WRITE,5 J# p  ~8 G0 n1 L9 \6 T/ S( E. _+ P
                                  FILE_SHARE_READ | FILE_SHARE_WRITE,( N7 i% T" j3 E! @$ i. T% K) u
                                  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
            5 g( \( e/ o4 K- w  K! }6 P; ?   if( hFile != INVALID_HANDLE_VALUE ); D8 y$ _& ~: `; d6 C; F
               {( A. [  Q0 G  k0 {
                  CloseHandle(hFile);
              X6 E% C- v# R1 [% q6 z/ g3 J      return TRUE;
            ! G. t' W- x' B   }
            . Y$ m$ v! R. B- q$ E   return FALSE;
            / q: O5 F4 h/ f) {& j0 R# [. W}
            ; f: D( ^, H2 \: r/ m: l: x, O, d# d; @  w! `. B. {5 R& {
            Although this trick calls the CreateFileA function, don't even expect to be
            ! }' q& J( S9 i# Vable to intercept it by installing a IFS hook: it will not work, no way!9 ~2 V  r! n' `- e" N9 Z
            In fact, after the call to CreateFileA it will get through VWIN32 0x001F
            " I! N& _/ X5 Z0 tservice _VWIN32_ReleaseWin32Mutex (via Kernel32!ORD_0001/VxDCall function)
            5 u) |: }  ]3 T3 x$ T# Uand then browse the DDB list until it find the VxD and its DDB_Control_Proc
            ' [1 u5 o0 f, r1 ~6 Gfield.
            , b* C2 E7 ~+ S$ R. g1 t% h# aIn fact, its purpose is not to load/unload VxDs but only to send a & ]7 ^7 H* A5 a* k2 |. v0 Z0 u
            W32_DEVICEIOCONTROL (0x23) control message (DIOC_OPEN and DIOC_CLOSEHANDLE)
            ! M- h5 \' \  J6 e9 s0 w$ E9 |& Zto the VxD Control_Dispatch proc (how the hell a shareware soft could try+ x" t+ y1 R; ~
            to load/unload a non-dynamically loadable driver such as SoftICE ;-).
            5 R4 L/ n5 N& t0 jIf the VxD is loaded, it will always clear eax and the Carry flag to allow
            4 [8 n3 t: ~  Z+ S0 Xits handle to be opened and then, will be detected.
            . l1 k+ ^3 }$ ~4 d: \You can check that simply by hooking Winice.exe control proc entry point- s1 w8 B9 c$ w& j% Y1 U8 ^& b/ _/ H
            while running MeltICE.
            5 V3 p5 p2 o  A- P' l0 J
            8 w4 g- N; N6 a& _8 D. L4 j- M3 c: U& E/ |' U( ]% e
              00401067:  push      00402025    ; \\.\SICE
            * p, V0 g- P  E: m) a. Z3 Z  0040106C:  call      CreateFileA- O7 @2 Z/ `" Z' t3 {
              00401071:  cmp       eax,-001
            ; G1 k6 V0 q5 V5 {5 B6 O3 S) R  00401074:  je        00401091+ E6 [& \  |! e8 D

            ( b3 D) w# k# F  Y+ O) s3 d9 `9 e) P/ e7 f" j9 h, ^
            There could be hundreds of BPX you could use to detect this trick.
            , s: b8 F! S. r' y' e6 u9 J-The most classical one is:5 j7 t0 O; g% p( r" @
              BPX CreateFileA if *(esp-&gt;4+4)=='SICE' || *(esp-&gt;4+4)=='SIWV' ||! ]5 l3 f) \# N. H" N) X
                *(esp-&gt;4+4)=='NTIC'
            : m3 U: {) P% ^! u+ k
            - Y9 }- _. H  Z9 ^. V# `-The most exotic ones (could be very slooooow :-(# h" b, u8 G7 ?. s6 q
               BPINT 30 if eax==002A001F &amp;&amp; (*edi=='SICE' || *edi=='SIWV')  
            + D0 h6 J6 y6 h, y; D" O     ;will break 3 times :-(5 f  ?& u5 e" [, W
            2 o9 z/ }+ s6 M" w  w5 {/ x
            -or (a bit) faster: 1 E+ g9 O6 S  i+ O6 Q* R
               BPINT 30 if (*edi=='SICE' || *edi=='SIWV')
            3 r0 w5 Z! b$ y& M0 S% }4 Y% ^# _' r% h- ^
               BPX KERNEL32!ORD_0001 if *edi=='SICE' || *edi=='SIWV'  $ n  C7 f: I5 A( g; J+ e4 r. p* M
                 ;will break 3 times :-(% |9 h, i; H2 J$ G! S' [
            5 C. j/ S! @" o5 e6 U7 ]5 |. g$ B7 }2 X
            -Much faster:
              P7 U5 V4 |/ Z: w+ U3 Q   BPX VMM_GetDDBList if eax-&gt;3=='SICE' || eax-&gt;3=='SIWV'+ Y! e: v+ h; c+ A

            7 g" K% S9 @+ S( ?8 _Note also that some programs (like AZPR3.00) use de old 16-bit _lopen" G5 ^9 R; c5 n  O
            function to do the same job:
            + R9 {- y) ?9 |4 g! R) O) \& W  T# A
               push    00                        ; OF_READ
            7 J# {9 ]+ Q, R   mov     eax,[00656634]            ; '\\.\SICE',0
            , X9 ^  k( l5 b3 L2 _   push    eax
            ' L) c, }0 I. t5 ]   call    KERNEL32!_lopen; g5 U% p/ `7 ^& Z  }( [/ A
               inc     eax
            4 r7 ~+ M5 @3 g   jnz     00650589                  ; detected. f5 m( L1 M2 u7 c
               push    00                        ; OF_READ
            ; C9 ~* N( F- J3 M   mov     eax,[00656638]            ; '\\.\SICE'' k0 y) e- ^7 h" ?
               push    eax( u/ I) h" k4 r. D* H& d
               call    KERNEL32!_lopen% |0 h0 w% Z1 p6 S- |
               inc     eax, [0 V7 a0 r# i) [/ A: U9 |# o7 e
               jz      006505ae                  ; not detected- q8 Q' w8 p8 j2 c0 S

            ! y' M0 E* Z, `% G" r1 u4 _% x# [; y
            __________________________________________________________________________+ ^; ^5 ]: V& l( m; j4 E, y
            7 I8 Q' S3 N6 L0 T, K
            Method 12+ C' w2 _* c/ Z% s
            =========
            $ t6 w! I' ]' C+ i" B7 C, @7 @4 c4 M2 g- V, O
            This trick is similar to int41h/4fh Debugger installation check (code 052 E  r& R* g/ L; G6 m
            &amp; 06) but very limited because it's only available for Win95/98 (not NT)7 K' {- o5 \. o1 j
            as it uses the VxDCall backdoor. This detection was found in Bleem Demo.
            ) F) g' r; g- m* d8 e$ @" _
            , V, u; @! s! e   push  0000004fh         ; function 4fh" t% X2 W& H7 n1 m- n6 ^8 k
               push  002a002ah         ; high word specifies which VxD (VWIN32)0 _$ D5 J' W' g, d9 [! r
                                       ; low word specifies which service
            9 z2 E+ n. B2 x                             (VWIN32_Int41Dispatch)) c( M2 C, N  M
               call  Kernel32!ORD_001  ; VxdCall$ V' b9 S5 Q6 u7 i$ W) e# t, b
               cmp   ax, 0f386h        ; magic number returned by system debuggers0 r/ K3 P* U/ T- s
               jz    SoftICE_detected
            ' W. _' ^! b; e# I% k9 Q! ?3 W$ E/ l# D  L( c
            Here again, several ways to detect it:2 u0 s" }0 F. g  a* F1 \$ H
            8 T7 E4 H& C  t$ }; d9 [5 U) B( P
                BPINT 41 if ax==4f
            + g! r' r* j; y0 R7 C& o3 _) V6 z/ k$ y
                BPINT 30 if ax==0xF386   ; SoftICE must be loaded for this one9 d8 Y3 v2 v1 H9 |3 ]. x* I
            ) c* P* R! d0 N2 x# t) f, Z- @
                BPX Exec_PM_Int if eax==41 &amp;&amp; edx-&gt;1c==4f &amp;&amp; edx-&gt;10==002A002A3 |, u. {' |# I: B" \! {$ `

            # T1 r* [, t) e& s" q$ S' \7 ~) G    BPX Kernel32!ord_0001 if esp-&gt;4==002A002A &amp;&amp; esp-&gt;8==4f   ; slooooow!' w; _- n0 |2 e1 @: D" }" F
            $ O9 }5 W) G3 p+ z
            __________________________________________________________________________
            7 @5 d" r9 O) s
              Y, v- n) j  c0 GMethod 13* S/ V- m# \4 Q* N! C6 d
            =========
            ! d6 H$ T/ K- w& o. y0 t7 T- C2 \" H
            Not a real method of detection, but a good way to know if SoftICE is
            ; [, u6 U( t$ t5 kinstalled on a computer and to locate its installation directory.3 W' M( }1 P+ M1 K9 k3 x
            It is used by few softs which access the following registry keys (usually #2) :1 {* T8 Y# |1 C/ S3 g. X
            * u- B, q* i3 j
            -#1: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion) G+ [/ E, U; y
            \Uninstall\SoftICE! z5 y1 q( K9 N1 H/ M# n
            -#2: HKEY_LOCAL_MACHINE\Software\NuMega\SoftICE) V4 b$ S0 w% w  o5 l8 y6 ?" q
            -#3: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
            ; r3 O! ^  ^6 s% K( y\App Paths\Loader32.Exe
            ! P* ^- H/ X# L% h. k9 t
            % M. M7 K  r: Q% g
            % X* ]# l4 B' ZNote that some nasty apps could then erase all files from SoftICE directory
            0 _, n: o( Y* ]1 P- S; Z0 y; L(I faced that once :-(; Z' M8 M$ g% ]. ~
            7 A1 J: S: E+ ~% R2 X: v- g" A
            Useful breakpoint to detect it:) m% h7 f; z( B

            7 ~* r0 h* ^# V+ F- a; Y     BPX _regopenkey if *(esp-&gt;8+0x13)=='tICE' || *(esp-&gt;8+0x37)=='tICE'( l/ Y# M! B9 p8 j! b
            5 v# I5 `* Y( ^! j  l
            __________________________________________________________________________8 m7 g  h+ f  w( }

            * S" g8 L1 ^; A8 b9 X+ {' O/ _2 g' a8 r0 t6 \4 N
            Method 14
            : \  O2 _7 F5 ]% `. I=========, D0 {: b& K) ^$ \2 K

            " l8 ?: l! t( J4 }# N) ^, oA call to VMM 'Test_Debug_Installed' service. As the name says, its purpose
            + D/ Q' |. S! O  Kis to determines whether a debugger is running on your system (ring0 only).
            . e; d. u/ J! R$ C( @( T8 i* f  A+ J( E4 s1 w8 F
               VMMCall Test_Debug_Installed
            % o4 d) Z$ L$ o- y. e! N   je      not_installed
            " K2 p) L( z( \) j: k8 ]9 ^) |9 B4 d1 ]; r# G- a
            This service just checks a flag.
            : U, d. r" b7 n% r</PRE></TD></TR></TBODY></TABLE>
            您需要登錄后才可以回帖 登錄 | 注冊

            本版積分規(guī)則

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

            GMT+8, 2025-5-17 05:19

            Powered by Discuz! X3.5

            © 2001-2025 Discuz! Team.

            快速回復 返回頂部 返回列表