办公中国打印机论坛

 
 立即注册

QQ登录

只需一步,快速开始

办公中国打印机维修论坛vip会员
打印机复印机维修视频教程
搜索
 开通本论坛VIP会员,
享受更多贵宾权限。
点击查看!
点这里自动积分充值,
客服QQ:454037456
客服微信号:oachn123
北京客服微信号:
186 1000 1535
开通VIP会员,免费赠送
办公设备维修培训视频教程
(赠送全套60集培训课程)
[公告]下载前必看!
详细下载说明图解
请按照说明下载资料
查看: 3092|回复: 6

[原创] 奇虎360第四题的解法

[复制链接]

72

主题

936

回帖

798

积分

初级工程师

Rank: 2

积分
798
注册时间
2008-4-3
发表于 2011-9-8 23:44:46 | 显示全部楼层 |阅读模式
办公中国打印机论坛VIP会员

马上注册,结交更多好友,享用更多功能。

您需要 登录 才可以查看,没有账号?立即注册

x
代码:
;@echo off
;goto make


.386
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                       
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\ntoskrnl.inc

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .data

ShellCodeExe  db 0ebh,00eh,05bh,04bh,033h,0c9h,0b1h,09bh,080h,034h,00bh,0feh,0e2h,0fah,0ebh,005h
               db 0e8h,0edh,0ffh,0ffh,0ffh,017h,07bh,0feh,0feh,0feh,0a1h,09ah,05fh,0ceh,0feh,0feh
               db 0feh,075h,0beh,0f2h,075h,08eh,0e2h,053h,075h,096h,0f6h,075h,009h,094h,0fch,0a7h
               db 016h,0dbh,0feh,0feh,0feh,01ch,007h,096h,0cdh,0cch,0feh,0feh,096h,08bh,08dh,09bh
               db 08ch,0aah,001h,0e8h,075h,016h,094h,0ffh,0a7h,016h,0f2h,0feh,0feh,0feh,01ch,007h
               db 0afh,0a9h,0a9h,0afh,001h,0a8h,0f6h,001h,0a8h,0fah,0afh,0a8h,075h,08bh,0c2h,075h
               db 08ah,0d0h,086h,0fdh,00bh,0a8h,075h,088h,0deh,0fdh,00bh,0cdh,037h,0b7h,0bfh,053h
               db 0fdh,03bh,0cdh,025h,0f1h,040h,0eeh,0c4h,028h,08ah,0f6h,03fh,035h,0f9h,0fdh,024h
               db 0beh,015h,00fh,0c5h,0e1h,08bh,019h,0a0h,075h,0a0h,0dah,0fdh,023h,098h,075h,0f2h
               db 0b5h,075h,0a0h,0e2h,0fdh,023h,075h,0fah,075h,0fdh,03bh,055h,0a0h,0a7h,03dh,016h
               db 088h,001h,001h,001h,0cch,08ah,06fh,0f2h,09dh,077h,02fh,0b1h,094h,0f4h,0c6h,0e0h
               db 'i am in exe',0;


ShellCodeDll     db 0E9h,096h,000h,000h,000h,05Ah,064h,0A1h,030h,000h,000h,000h,08Bh,040h
            db 0Ch,08Bh,070h,01Ch,0ADh,08Bh,040h,008h,050h,052h,06Ah,00Ch,0E8h,01Eh
            db 00h,000h,000h,05Bh,083h,0C3h,00Dh,053h,0FFh,0D0h,083h,0C3h,007h,053h
            db 6Ah,00Bh,0E8h,00Ch,000h,000h,000h,05Bh,083h,0C3h,00Ch,06Ah,000h,053h
            db 53h,06Ah,000h,0FFh,0D0h,08Bh,0D8h,083h,0C0h,03Ch,08Bh,000h,003h,0C3h
            db 80h,038h,050h,075h,049h,08Bh,040h,078h,003h,0C3h,050h,08Bh,0C8h,08Bh
            db 49h,014h,08Bh,040h,020h,003h,0C3h,055h,08Bh,0E8h,033h,0D2h,051h,08Bh
            db 00h,003h,0C3h,08Bh,0F8h,08Bh,074h,024h,014h,08Bh,04Ch,024h,010h,0FCh
            db 0F3h,0A6h,075h,017h,083h,0C4h,004h,08Bh,044h,024h,004h,08Bh,040h,01Ch
            db 03h,0C3h,0C1h,0E2h,002h,003h,0C2h,08Bh,000h,003h,0C3h,0EBh,00Bh,042h
            db 83h,0C5h,004h,08Bh,0C5h,059h,0E2h,0CCh,033h,0C0h,05Dh,059h,0C2h,004h
            db 00h,0E8h,065h,0FFh,0FFh,0FFh,04Ch,06Fh,061h,064h,04Ch,069h,062h,072h
            db 61h,072h,079h,041h,000h,075h,073h,065h,072h,033h,032h,000h,04Dh,065h
            db 73h,073h,061h,067h,065h,042h,06Fh,078h,041h,000h
            db 'i am in the dll',0;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

;                                         C O D E                                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.code


;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                              GetKernel32                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
GetKernel32 proc uses esi
  assume fs:nothing
  mov eax,fs:[30h]
  assume fs:error
  mov eax,[eax + 0ch]
  mov esi,[eax + 1ch]
  lodsd
  mov eax,[eax+08h]
  ret
GetKernel32 endp


;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                              MyGetProcAddress                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
MyGetProcAddress proc uses ebx ecx esi edi ImageBase:DWORD,FuncName:DWORD
  LOCAL FunNameArray  :DWORD
  LOCAL PE  :DWORD
  LOCAL Count  :DWORD
  LOCAL IED  :DWORD
  LOCAL iedN  :DWORD
  LOCAL flen  :DWORD

  mov Count,0

        mov eax,FuncName
  test eax,eax
  je tmpret
  lea edx,DWORD PTR ds:[eax+1]
        strloop:
  mov cl,BYTE PTR ds:[eax]
  inc eax
  test cl,cl
  jnz strloop

  sub eax,edx
        tmpret:
   
      mov flen,eax

  mov eax,ImageBase
  add eax,3ch      
  mov eax,[eax]     
  add eax,ImageBase   
  cmp DWORD PTR [eax],00004550h
  jne NotFound     
  mov PE,eax
  mov eax,[eax+78h]
  add eax,ImageBase
  mov IED,eax      
  mov eax,[eax+0ch]
  add eax,ImageBase   
  mov iedN,eax
  mov eax,IED
  mov eax,[eax+20h]
  add eax,ImageBase
  mov FunNameArray,eax  
  mov ecx,IED
  mov ecx,[ecx+14h]   
FindLoop:
  mov eax,[eax]
  add eax,ImageBase
  mov esi,FuncName
  mov edi,eax
  push ecx
  mov ecx,flen      
  cld
  repe cmpsb
  jne FindNext   
  add esp,4        
  mov eax,IED
  mov eax,[eax+24h]
  add eax,ImageBase
  shl Count,1  

  add eax,Count
  mov eax,[eax]      
  and eax,0000ffffh
  mov ebx,eax
  mov eax,IED
  mov eax,[eax+1ch]
  add eax,ImageBase
  shl ebx,2
  mov eax,[eax+ebx]
  add eax,ImageBase
  jmp Found
FindNext:
  inc Count        
  add FunNameArray,4
  mov eax,FunNameArray  
  pop ecx         
  loop FindLoop     
NotFound:
  xor eax,eax        
Found:
  ret
MyGetProcAddress endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



;                             usermain                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
usermain proc
  LOCAL hKer32:DWORD
  LOCAL pGetModuleHandle:DWORD
  invoke GetKernel32
  mov hKer32,eax

  call GetHandle
  db "GetModuleHandleA",0
GetHandle:
  push hKer32
  call MyGetProcAddress
  mov pGetModuleHandle,eax

  push NULL
  call pGetModuleHandle

        cmp eax,10000h
  jne dll
  lea eax,ShellCodeExe
        call eax
        jmp  TheEnd

dll:
            call @F
            @@:
            pop ebx
            sub ebx,offset @B
            lea eax,[ebx+offset ShellCodeDll]
      call eax
            jmp  TheEnd
TheEnd:
  ret
usermain endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                              GetKernel                                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
GetKernel proc uses ecx
    mov eax, [ebp+4]
FindMZ:
    and eax,0fffff000h
    cmp word ptr [eax],'ZM'
    jne MoveUp
    mov ecx,[eax+3ch]
    add ecx,eax
    cmp word ptr [ecx],'EP'

    je Found
MoveUp:
    sub eax ,1000h
    jmp FindMZ
Found:
    ret
GetKernel endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                              MyDbgPrint                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
MyDbgPrint proc hKer:DWORD
  call DbgPrt
  db "DbgPrint",0
DbgPrt:
  push hKer
  call MyGetProcAddress
  call MyDbgPrt
  db "I am in the kernel!",13,10,0
MyDbgPrt:
  call eax
  ret
MyDbgPrint endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       DriverEntry                                                
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING


  call tmpadd1
tmpadd1:
  pop eax
  cmp eax,7fffffffh
  ja kernel
  invoke usermain
  jmp useret
kernel:
  invoke GetKernel
  invoke MyDbgPrint,eax
  mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
  ret
useret:
  ret 0
  

DriverEntry endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                                                                                   
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

end DriverEntry

:make

set drv=kyo

\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj

del %drv%.obj

echo.

110

主题

3513

回帖

18

积分

新手上路

维修资料互换共享

Rank: 1

积分
18
注册时间
2005-10-27
居住地
上海市 黄浦区

热心会员勋章

发表于 2011-9-9 00:18:36 | 显示全部楼层
太高深了。整点实用的,

10

主题

165

回帖

1075

积分

初级工程师

Rank: 2

积分
1075
注册时间
2011-8-2
发表于 2011-9-9 09:05:19 | 显示全部楼层
办公中国打印机论坛VIP会员
高手啊  就是看不懂

1

主题

19

回帖

0

积分

新手上路

Rank: 1

积分
0
注册时间
2011-9-11
发表于 2011-9-11 11:58:52 | 显示全部楼层
碰到高手啦,硬是看不懂

13

主题

439

回帖

1317

积分

高级工程师

浑水摸鱼

Rank: 4

积分
1317
注册时间
2011-1-18

海洋勋章

发表于 2011-9-11 15:06:25 | 显示全部楼层
办公中国打印机论坛VIP会员

1

主题

9

回帖

1677

积分

高级工程师

Rank: 4

积分
1677
注册时间
2008-5-6
发表于 2011-9-14 05:56:20 | 显示全部楼层
一点都不懂呀!

52

主题

201

回帖

576

积分

初级工程师

Rank: 2

积分
576
注册时间
2011-9-13
发表于 2011-9-21 17:42:04 | 显示全部楼层
办公中国打印机论坛VIP会员
太高的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|开通vip会员|关于我们|手机版|Archiver|打印机维修论坛 (京ICP备05009053号;北京市公安局备案:京公网安备110108002830号 )

GMT+8, 2024-5-3 14:48

Powered by Discuz!

办公中国打印机论坛
快速回复 返回顶部 返回列表