首页
论坛
专栏
课程

[调试逆向] [五一礼物]PhantOm插件笔记~!送给大家五一礼物吧~!

2009-4-30 14:46 30418

[调试逆向] [五一礼物]PhantOm插件笔记~!送给大家五一礼物吧~!

2009-4-30 14:46
30418
明天五一了,把笔记发出来给大家学习一下,也算是个礼物吧,多余的话就不说了,直接看附件吧~!

需要说明的是Delphi部分,是最初研究的,所以很多地方都不对的,一边看汇编,一边记录,根本没调试,也没测试,只要编译通过就可以了,Delphi部分基本全了,只少驱动部分了.驱动我没心思看了~~!

C语言函数已经全部通过,也就是说功能代码没什么问题的,实际我是看着DELPHI写的C代码,后来DELPHI就再没修改了,直接用C了~!

注意:本次贴出来的是学习笔记,大家研究学习用就好了,别乱飞就是了,希望大家支持一下了,有需要研究和学习的只管下就好了



DELPHI:

2楼贴C代码...需要的看看~~!主要部分贴完了~~!
应该没了~~!

^_^

[公告][征集寄语] 看雪20周年年会 | 感恩有你,一路同行

上传的附件:
最新回复 (97)
menting 14 2009-4-30 14:47
2
0
int                        mgHOD_ModfiyOllyDbgCaption( HWND hWnd )
{
        if( g_hInstOllyDbg == NULL )
        {
                //GetModuleFileName( NULL , szbuffer , MAX_PATH);
                //ExtractFilePath
                g_hInstOllyDbg = GetModuleHandle(NULL);
                if( g_hInstOllyDbg == NULL ){ return -1; }
        }

        if( strcmpi( g_tagNmlInfo.szOllyDbgMainCaption ,_T("")) == 0 )
        {
                strcpy( g_tagNmlInfo.szOllyDbgMainCaption ,_T("Pediy"));
        }

        if( strcmpi( g_tagNmlInfo.szOllyDbgCpuCaption ,_T("")) == 0 )
        {
                strcpy( g_tagNmlInfo.szOllyDbgCpuCaption ,_T("T_T"));
        }

        //CPU WINDOW:
        DWORD        dwAddr = (DWORD)g_hInstOllyDbg + 0x0B3963;
        DWORD        dwReturn = 0;

        //
        WriteProcessMemory( GetCurrentProcess(), (LPVOID)dwAddr ,
                g_tagNmlInfo.szOllyDbgCpuCaption, 0x06,&dwReturn);

        //Main Window:
        dwAddr = (DWORD)g_hInstOllyDbg + 0x0B71EE;

        //
        WriteProcessMemory( GetCurrentProcess(), (LPVOID)dwAddr ,
                g_tagNmlInfo.szOllyDbgMainCaption, 0x07,&dwReturn);

        dwAddr = (DWORD)g_hInstOllyDbg + 0x0B7218;
        //
        WriteProcessMemory( GetCurrentProcess(), (LPVOID)dwAddr ,
                g_tagNmlInfo.szOllyDbgMainCaption, 0x07,&dwReturn);

        dwAddr = (DWORD)g_hInstOllyDbg + 0x0C1A91;
        //
        WriteProcessMemory( GetCurrentProcess(), (LPVOID)dwAddr ,
                g_tagNmlInfo.szOllyDbgMainCaption, 0x07,&dwReturn);

        char szbuffer[100] = {0};
        GetWindowText( g_hWndOllyDbg , szbuffer ,100 );

        for( int i= 0 ; i < (int)strlen( szbuffer ) ; i++ )
        {
                if( g_tagNmlInfo.szOllyDbgMainCaption[i] == 0x00 ){ break; }
                szbuffer[i] = g_tagNmlInfo.szOllyDbgMainCaption[i];
        }
        SetWindowText( g_hWndOllyDbg , szbuffer );
        return 0;
}

int                        mgHOD_RemoveDebugBreakPoint( HWND hWnd ,DWORD tid )
{
        DWORD dwRet  = 0;
        DWORD dwAddr = (DWORD)g_hInstOllyDbg + 0x034E37;
        BYTE  buffer = 0x90;

        //
        if( *(PDWORD)(dwAddr) != 0x90 &&  *(PDWORD)(dwAddr) == 0x74 )
        {
                //je -> nop :
                WriteProcessMemory( ::GetCurrentProcess() , (LPVOID)dwAddr, &buffer , 0x01 , &dwRet );
                WriteProcessMemory( ::GetCurrentProcess() , (LPVOID)(dwAddr + 0x01), &buffer , 0x01 , &dwRet );

                buffer = 0xEB;
                dwAddr = (DWORD)g_hInstOllyDbg + 0x034E44;
                WriteProcessMemory( ::GetCurrentProcess() , (LPVOID)dwAddr, &buffer , 0x01 , &dwRet );
        }

        return 0;
}

int                        mgHOD_CustomHandleException( HWND hWnd ,DWORD tid )
{
        DWORD dwAddr = (DWORD)g_hInstOllyDbg + 0x0AF6DC;

        if( *(LPBYTE)(dwAddr) == 0x90 )
        {
                Addtolist( 0,-1 , _T("Status: Exceptions handler already patched .") );
                return 1 ;
        }
        if( *(LPBYTE)(dwAddr) != 0x00 )
        {
                Addtolist( 0,-1 , _T("Status: Exceptions handler error sign .") );
                return -1;
        }

        //
        BYTE        bybuf[0x5E] =
        {
                0x90, 0x90, 0xA1, 0x14, 0x57, 0x4D, 0x00, 0x83, 0xF8, 0x08,
                0x74, 0x33, 0xA1, 0x20, 0x57, 0x4D, 0x00, 0x3D, 0x05, 0x00,
                0x00, 0xC0, 0x74, 0x27, 0x3D, 0x1E, 0x00, 0x00, 0xC0, 0x74,
                0x20, 0x3D, 0x01, 0x00, 0x00, 0x80, 0x74, 0x19, 0x3D, 0x1D,
                0x00, 0x00, 0xC0, 0x74, 0x12, 0x3D, 0x94, 0x00, 0x00, 0xC0,
                0x74, 0x0B, 0x90, 0x68, 0x14, 0x57, 0x4D, 0x00, 0xE9, 0x54,
                0x9F, 0xF8, 0xFF, 0xBB, 0x01, 0x00, 0x01, 0x80, 0x53, 0xA1,
                0x1C, 0x57, 0x4D, 0x00, 0x50, 0x8B, 0x15, 0x18, 0x57, 0x4D,
                0x00, 0x52, 0xFF, 0x15, 0xB8, 0xD2, 0x50, 0x00, 0xE9, 0x43,
                0x99, 0xF8, 0xFF, 0x90
        };

        //
        DWORD dwRet = 0 ;

        //
        WriteProcessMemory( GetCurrentProcess(), (LPVOID)dwAddr , bybuf , 0x5E , &dwRet );

        //
        dwAddr = (DWORD)g_hInstOllyDbg + 0x03966A ;

        if( *(LPBYTE)(dwAddr) != 0x68 )
        {
                Addtolist( 0,-1 , _T("Status: Exceptions handler already patched .") );
                return -2;
        }

        DWORD dwbuf = 0x07606D;
        BYTE  bydat = 0xE9;

        //
        WriteProcessMemory( GetCurrentProcess() , (LPVOID)dwAddr , &bydat , 0x01 , &dwRet );
        WriteProcessMemory( GetCurrentProcess() , (LPVOID)( dwAddr + 0x01 ) , &dwbuf , 0x04, &dwRet );

        //
        Addtolist( 0,-1 , "Status: Exceptions handler patched .");
        return 0;
}

int                        mgHOD_PatchODStringAndFPUBugs( HWND hWnd ,DWORD tid )
{
        DWORD dwAddr = (DWORD)g_hInstOllyDbg + 0x0AA2EE;
        BYTE  bydat = 0xEB;
       
        //
        DWORD dwRet = 0 ;

        if( *(LPBYTE)(dwAddr) == 0x74 )
        {
                WriteProcessMemory( GetCurrentProcess() , (LPVOID)dwAddr , &bydat , 0x01 , &dwRet );
                Addtolist( 0,-1 , _T("Status: FPU bug patched ."));
        }

        //
        dwAddr = (DWORD)g_hInstOllyDbg + 0x0313A5;
        bydat  = 0x90;
        if( *(LPBYTE)(dwAddr) == 0x90 )
        {
                Addtolist( 0,-1 , _T("Status: OutputDebugString already patched ."));
                return 1;
        }

        //
        if( *(LPBYTE)(dwAddr) != 0xE8 )
        {
                Addtolist( 0,-1 , _T("Status: OutputDebugString error sign ."));
                return -1;
        }

        //
        WriteProcessMemory( GetCurrentProcess() , (LPVOID)dwAddr , &bydat , 0x01 , &dwRet );

        //
        DWORD dwbuf = 0x90909090;
        WriteProcessMemory( GetCurrentProcess() , (LPVOID)(dwAddr + 0x01) , &dwbuf , 0x04 , &dwRet );

        //
        Addtolist( 0,-1 , _T("Status: OutputDebugString patched .") );

        return 0;
}

int                        mgHOD_BlockInput(HWND hWnd)
{
        BYTE bydat[0x06]={0x33, 0xC0, 0x40, 0xC2, 0x04, 0x00};

        //
        DWORD dwFunAddr = (DWORD)GetProcAddress( GetModuleHandle("USER32.DLL"),"BlockInput");

        if( dwFunAddr == NULL )
        {
                Addtolist( 0,-1 , _T("Unable get original pointer ."));
                return -1;
        }

        BYTE bybuf[0x10] = {0};

        //
        if( Readmemory( bybuf , dwFunAddr , 0x0F , MM_SILENT ) != 0x0F )
        {
                Addtolist( 0,-1 , _T("Unable read original pointer ."));
                return -1;
        }

        int logon = 0;
        //
        if( bybuf[0x09] == 0xCD && bybuf[0x0A] == 0x2E )
        {
                logon = 0;
        }else{
                logon = 0x0A;
        }

        //
        if( logon == 0)
        {
                Addtolist( 0,-1 , _T("Unable detect function ."));
                return -1;
        }

        //
        if( Writememory( bydat , (dwFunAddr + 0x0A) , 0x06 , MM_SILENT ) != 0x06)
        {
                Addtolist( 0,-1 , _T("Unable hook BlockInput ."));
                return -1;
        }

        Addtolist( 0,-1 , _T("Status: BlockInput hooked. "));

        return 0;
}

//--------------------------------------------------------------------------------------------------------
//
//phantom plugin:
int                        mgHOD_HideFormPEB1( LPVOID lpAddr )
{
        DWORD        dwAddr = (DWORD)lpAddr + 0x30;

        DWORD dwbuf = 0;
        DWORD dwRet = 0;
        BYTE  bybuf = 0;

        //
        if( ReadProcessMemory( (HANDLE)Plugingetvalue(VAL_HPROCESS) , (LPVOID)dwAddr , &dwbuf , 0x04, &dwRet )  )
        {
                Readmemory( &dwAddr ,( dwbuf + 0x10 ), 0x04 , MM_SILENT );
               
                //
                int n = 0 ;
                do{
                        Writememory( &bybuf , ( dwAddr + 0x4C + n ) , 0x01 , MM_SILENT );
                        n++;
                }while( n != 0x1C);

                return 1;
        }
       

        return 0;
}

//--------------------------------------------------------------------------------------------------------
//
//phantom plugin:
int                        mgHOD_HideFormPEB2( LPVOID lpAddr , int nType )
{
        DWORD        dwAddr = (DWORD)lpAddr + 0x30;

        DWORD dwbuf = 0;
        DWORD dwRet = 0;
        BYTE  bybuf = 0;

        //
        if( ReadProcessMemory( (HANDLE)Plugingetvalue(VAL_HPROCESS) , (LPVOID)dwAddr , &dwbuf , 0x04, &dwRet )  )
        {
                if( nType != 0 && nType != 2 || WriteProcessMemory( (HANDLE)Plugingetvalue(VAL_HPROCESS) ,
                        (LPVOID)(dwbuf + 0x02), &bybuf , 0x01 , &dwRet  ) == TRUE )
                {
                        bybuf = 0x01;
                        if( nType != 1 || WriteProcessMemory( (HANDLE)Plugingetvalue(VAL_HPROCESS) ,
                                (LPVOID)(dwbuf + 0x02), &bybuf , 0x01 , &dwRet) == TRUE )
                        {
                                return 1;
                        }
                }
        }

        return 0;
}

int                        mgHOD_GetTickCount(HWND hWnd)
{
        HMODULE        hNTDLL = GetModuleHandle( "ntdll.dll" );
        HMODULE hKernel= GetModuleHandle( "KERNEL32.DLL" );

        //
        DWORD dwGetTickCount = (DWORD)::GetProcAddress( hKernel ,"GetTickCount");
        if(        dwGetTickCount == NULL || dwGetTickCount < (DWORD)hKernel)
        {
                Addtolist( 0,-1 , _T("Unable get original pointer."));
                return -1;
        }

        BYTE bybuf1[0x10]={0};
        //
        if( Readmemory( bybuf1 , dwGetTickCount , 0x0F , MM_SILENT ) != 0x0F )
        {
                Addtolist( 0,-1 , _T("Unable read original function."));
                return -1;
        }

        DWORD dwCount = GetTickCount();

        //向调试进程分配空间:
        DWORD        dwNewBuf = (DWORD)mgHOD_VirtualAllocEx() ;
        DWORD        dwAddr         = dwNewBuf + 0x100;
        Writememory( &dwCount , ( dwAddr + 0x04 ) , 0x04 , MM_SILENT );

        BYTE bycode[0x20] ={
                0x0F, 0xAC, 0xD0, 0x18, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
                0x90, 0xB9, 0x04, 0x01, 0x17, 0x00, 0x8B, 0x01, 0x83, 0xC0,
                0x01, 0x89, 0x01, 0x50, 0xC1, 0xE8, 0x08, 0x8B, 0xD0, 0x58,
                0xC3, 0x90};

        *(LPDWORD)&bycode[0x0C] =  ( dwAddr + 0x04 );
        //offset 0x70 write:
        Writememory( bycode , ( dwNewBuf + 0x70 ) , 0x1F ,MM_SILENT );

        //
        DWORD  dwA = dwGetTickCount + 0x0A;       
        DWORD  dwB = dwNewBuf + 0x70 - dwA - 5 ;
       
        //
        if( *(LPDWORD)&bybuf1[2] == 0x909090F3 )
        {
                dwA = dwGetTickCount + 0x2E;
        }

        //
        BYTE   bybuf2 = 0xE9;
        if( Writememory( &bybuf2 , dwA , 0x01 , MM_SILENT ) != 0x01 )
        {
                Addtolist( 0,-1 , _T("Unable hook GetTickCount."));
                return -1;
        }

        //
        dwA = dwGetTickCount + 0x0B;
        if( *(LPDWORD)&bybuf1[2] == 0x909090F3 )
        {
                dwA = dwGetTickCount + 0x2F;
                dwB = dwNewBuf + 0x70 - dwA - 4;

                bybuf2 = 0x90;
                Writememory( &bybuf2 , (dwA + 0x04), 0x01 ,MM_SILENT );
                Writememory( &bybuf2 , (dwA + 0x05), 0x01 ,MM_SILENT );
        }
        if( Writememory( &dwB , dwA , 0x04 , MM_SILENT ) != 0x04 )
        {
                Addtolist( 0,-1 , _T("Unable hook GetTickCount."));
                return -1;
        }

        //
        Addtolist( 0, -1 , "Status: GetTickCount hooked .");
        return 0;
}

//--------------------------------------------------------------------------------------------------------
//
//phantom plugin:
int                        mgHOD_ProtectDRx(HWND hWnd)
{
        mgHOD_KiUserExceptionDispatcher( hWnd );
        mgHOD_ZwContinue( hWnd );

        return 0;
}

int                        mgHOD_KiUserExceptionDispatcher(HWND hWnd)
{
        HMODULE        hNTDLL = GetModuleHandle( "ntdll.dll" );

        //
        DWORD dwApiAddr = (DWORD)::GetProcAddress( hNTDLL ,"KiUserExceptionDispatcher");
        if(        dwApiAddr == NULL || dwApiAddr < (DWORD)hNTDLL )
        {
                Addtolist( 0,-1 , _T("Unable get original pointer."));
                return -1;
        }

        //
        DWORD dwbuf1 = 0 ;
        //
        if( Readmemory( &dwbuf1 , ( dwApiAddr + 0x0A ), 0x04 , MM_SILENT ) != 0x04 )
        {
                Addtolist( 0,-1 , _T("Unable read original function."));
                return -1;
        }

        //向调试进程分配空间:
        DWORD        dwNewBuf = (DWORD)mgHOD_VirtualAllocEx() ;
        DWORD        dwAddr         = dwNewBuf + 0x3C;

        DWORD        dwA = dwAddr - ( dwApiAddr + 0x09 ) - 0x05;

        //write JMP xxxxxxxx:
        BYTE        bybuf = 0xE9;
        if( Writememory( &bybuf , ( dwApiAddr + 0x09 ) , 0x01 , MM_SILENT ) != 0x01 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }
        if( Writememory( &dwA , ( dwApiAddr + 0x0A ) , 0x04 , MM_SILENT ) != 0x04 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }

        //
        BYTE        bycode[0x30] ={
                        0x60, 0x83, 0xC1, 0x04, 0x8B, 0xF1, 0x8B, 0xD1, 0xBF, 0x00,
                        0x00, 0x08, 0x00, 0xB9, 0x18, 0x00, 0x00, 0x00, 0xFC, 0xF3,
                        0xA4, 0xBE, 0x18, 0x00, 0x08, 0x00, 0x8B, 0xFA, 0xB9, 0x18,
                        0x00, 0x00, 0x00, 0xF3, 0xA4, 0x90, 0x90, 0x61, 0x8B, 0xC0,
                        0x90, 0x90};

        //modfiy code:
        *(LPDWORD)&bycode[0x09] = dwNewBuf;
        *(LPDWORD)&bycode[0x16] = dwNewBuf + 0x18;

        dwAddr = dwNewBuf + 0x3C - 0x01 ;
        bybuf = 0x90;
        if( Writememory( &bybuf , dwAddr , 0x01 , MM_SILENT ) != 0x01 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }

        dwAddr = dwNewBuf + 0x3C;
        if( Writememory( &bycode , dwAddr , 0x26 , MM_SILENT ) != 0x26 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }

        //write call xxxxxxxx:
        dwAddr += 0x26;
        bybuf = 0xE8;
        if( Writememory( &bybuf , dwAddr , 0x01 , MM_SILENT ) != 0x01 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }

        dwAddr ++;
        DWORD dwB = dwbuf1 + 0x05 + ( dwApiAddr + 0x09 );
        dwA = dwB - (dwAddr - 0x01) - 0x05 ;
        if( Writememory( &dwA , dwAddr , 0x04 , MM_SILENT ) != 0x04 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }

        //
        dwAddr += 0x04;
        bybuf = 0xE9;
        if( Writememory( &bybuf , dwAddr , 0x01 , MM_SILENT ) != 0x01 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }

        //
        dwB = dwApiAddr + 0x09 + 0x05;
        dwA = dwB - dwAddr - 0x05;
        if( Writememory( &dwA , ( dwNewBuf + 0x3C + 0x26 + 0x01 + 0x05 ) , 0x04 , MM_SILENT ) != 0x04 )
        {
                Addtolist( 0,-1 , _T("Unable hook KiUserExceptionDispatcher ."));
                return -1;
        }

        //
        Addtolist( 0, -1 , "Status: KiUserExceptionDispatcher hooked .");

        return 0;
}

int                        mgHOD_ZwContinue(HWND hWnd)
{
        HMODULE        hNTDLL = GetModuleHandle( "ntdll.dll" );

        //
        DWORD dwApiAddr = (DWORD)::GetProcAddress( hNTDLL ,"ZwContinue");
        if(        dwApiAddr == NULL || dwApiAddr < (DWORD)hNTDLL )
        {
                Addtolist( 0,-1 , _T("Unable get original pointer."));
                return -1;
        }

        //
        BYTE bybuf1[0x10] = {0};
        if( Readmemory( bybuf1 , dwApiAddr, 0x0F , MM_SILENT ) != 0x0F )
        {
                Addtolist( 0,-1 , _T("Unable read original function."));
                return -1;
        }

        //
        DWORD dwA = 0;
        if( bybuf1[0x09] == 0xCD && bybuf1[0x0A] == 0x2E )
        {
                dwA = 1;
        }else{
                dwA = 0;
        }

        if( dwA == 0xFF )
        {
                Addtolist( 0,-1 , _T("Unable detect function."));
                return -1;
        }
       
        //向调试进程分配空间:
        DWORD        dwNewBuf = (DWORD)mgHOD_VirtualAllocEx() ;
       
        //
        BYTE bybuf2 = 0xE9;
        DWORD dwB   = 0;

        if( dwA == 1 )
        {
                if(Writememory( &bybuf2 , (dwApiAddr + 0x09) , 0x01 , MM_SILENT ) != 0x01 )
                {
                        Addtolist( 0,-1 , _T("Unable hook ZwContinue."));
                        return -1;
                }
                dwB = dwNewBuf + 0x9E - ( dwApiAddr + 0x09 ) - 5 ;

                if( Writememory( &dwB , (dwApiAddr + 0x0A) , 0x04 , MM_SILENT ) != 0x04 )
                {
                        Addtolist( 0,-1 , _T("Unable hook ZwContinue."));
                        return -1;
                }
        }else{
                if( Writememory( &bybuf2 , (dwApiAddr + 0x0A) , 0x01 , MM_SILENT ) != 0x01 )
                {
                        Addtolist( 0,-1 , _T("Unable hook ZwContinue.."));
                        return -1;
                }
                dwB = dwNewBuf + 0x9E - ( dwApiAddr + 0x0A ) - 5 ;
                if( Writememory( &dwB , (dwApiAddr + 0x0B) , 0x04 , MM_SILENT ) != 0x04 )
                {
                        Addtolist( 0,-1 , _T("Unable hook ZwContinue."));
                        return -1;
                }
        }

        //
        dwB = dwNewBuf + 0x9E;

        BYTE        bycode[0x30] ={
                0x8B, 0x44, 0x24, 0x04, 0x0F, 0xBA, 0x30, 0x04, 0x60, 0x83,
                0xC0, 0x04, 0x8B, 0xF0, 0xBF, 0x18, 0x00, 0x08, 0x00, 0xB9,
                0x18, 0x00, 0x00, 0x00, 0xFC, 0xF3, 0xA4, 0x8B, 0xF8, 0xBE,
                0x00, 0x00, 0x08, 0x00, 0xB9, 0x18, 0x00, 0x00, 0x00, 0xF3,
                0xA4, 0x61};

        //
        *(LPDWORD)&bycode[0x0F] = dwNewBuf + 0x18;
        *(LPDWORD)&bycode[0x1E] = dwNewBuf;

        //
        if( Writememory( &bycode , dwB , 0x2A , MM_SILENT ) != 0x2A )
        {
                Addtolist( 0,-1 , _T("Unable hook ZwContinue."));
                return -1;
        }

        if( dwA == 1 )
        {
                Writememory( &bybuf1 , ( dwB + 0x2A ) , 0x0E , MM_SILENT );
        }else{
                Writememory( &bybuf1 , ( dwB + 0x2A ) , 0x0F , MM_SILENT );
        }

        //
        Addtolist( 0, -1 , "Status: ZwContinue hooked .");

        return 0;
}
cutcut 2009-4-30 15:12
3
0
好东西呀,谢谢lz,下载下来收藏
疯子 4 2009-4-30 15:42
4
0
支持  收藏
啊CR 3 2009-4-30 15:50
5
0
支持梦婷MM
stalker 8 2009-4-30 15:52
6
0
梦婷姐姐越来越厉害了
海风月影 17 2009-4-30 15:52
7
0
先膜拜一下

这个是哪个版本的?

另外,排版可以用[code]标签
海风月影 17 2009-4-30 16:04
8
0
你这样贴出来,phant0m彻底被anti死了。。。。。。

比如NoobyProtect
芳草碧连 2009-4-30 16:13
9
0
占个位
chimney 3 2009-4-30 16:25
10
0
占位,学习!
gzdang 2009-4-30 16:26
11
0
相当好,多杰多杰
kanxue 8 2009-4-30 16:29
12
0
不用担心,还有海风月影在
饮水思源 2009-4-30 17:16
13
0
支持一下。。

我还得努力。。。
klxiwu 2009-4-30 19:19
14
0
收藏,好东西
fool 2009-4-30 20:35
15
0
支持一下,慢慢学习
Nooby 5 2009-4-30 20:41
16
0
原来都是r3的.
himcrack 6 2009-4-30 21:15
17
0
双刃剑 学习之余 以后要被anti了..
zzxxaa 2009-4-30 21:26
18
0
学习学习好久没来了哈哈
cqhhwz 2009-4-30 22:17
19
0
先下载看看,分析分析
estore 2009-4-30 22:30
20
0
收藏好东西。
twoseconds 2009-4-30 22:37
21
0
好东西一起分享
LOCKLOSE 2 2009-5-1 00:03
22
0
也许会浴火重生吧。
海风月影 17 2009-5-1 00:13
23
0
这个插件的r3和r0是2个人写的

插件r3部分的东西技巧性很强,不过有缺陷,注入到被调试进程的那段代码,是怎么也隐藏不了的,公开之后,也就被anti死了
qyc 4 2009-5-1 01:23
24
0
真是好东西啊!
月夜樱飞 2009-5-1 08:33
25
0
谢谢lz,祝节日快乐!!
miracler 2009-5-1 09:15
26
0
顶下楼主
经理让我学linux
但我不会放下破解的
windsun 1 2009-5-1 11:22
27
0
很强大。。这个要顶的
coderui 2 2009-5-1 13:05
28
0
路过看看,五一快乐!
快雪时晴 4 2009-5-1 13:40
29
0
如此凶悍的MENTING
再次见证了IDA的强大
jrc96 2009-5-1 14:54
30
0
谢谢分享....
liangdong 2009-5-1 15:07
31
0
强文 学习一下
cooray 2009-5-1 15:17
32
0
收藏+学习。。。
cntrump 13 2009-5-1 16:42
33
0
我悄悄地下载....
bjhrwzh 2009-5-1 17:37
34
0
绝对支持下载学习!!!!!!!!!!
说爱我 2009-5-1 18:25
35
0
。。看看大牛的表演。。就算了。小菜。。继续深造中······
Nooby 5 2009-5-1 20:50
36
0
不去anti它.写个壳还用得着去刻意猥琐某个插件,也太挫了.
zzlya 2009-5-1 21:14
37
0
谢谢~很好的礼物啊
luzechao 2009-5-1 21:32
38
0
被Anti了才能出来更好的代码,
膜拜楼主
cuihf秋 2009-5-2 00:46
39
0
谢谢分享收藏,辛苦了!
Aker 4 2009-5-2 03:50
40
0
占领第40贴
简单爱 2009-5-2 04:09
41
0
Phant0m倒下了,还有StrongOD坚强地活着
轩辕小聪 7 2009-5-2 04:23
42
0
看到一堆OllyDbg.exe模块中的偏移量,头晕ing
estelle 2009-5-2 05:49
43
0
anti 到死 防忽悠者 海风
小菜鸟一 2009-5-2 08:18
44
0
这下我们菜鸟们可有苦吃了   
jxdyxg 2009-5-2 08:36
45
0
看不太懂,下下来慢慢看
xxyyzasabc 2009-5-2 11:37
46
0
这个好啊 要学习!
wudinjian 2009-5-2 12:17
47
0
哈哈感谢了~~要是每天都过节就好了天天有礼物收哈
hzfjl 2009-5-2 13:05
48
0
现在还在学习,等懂了再来看看,应该比较容易看懂
jhh 2009-5-2 14:37
49
0
收藏,学习了
kagayaki 2009-5-2 15:59
50
0
支持一下,慢慢学习
游客
登录 | 注册 方可回帖
返回