首页
社区
课程
招聘
SEH ? 虚拟 CPU ? 垃圾?
发表于: 2005-4-15 23:30 5917

SEH ? 虚拟 CPU ? 垃圾?

2005-4-15 23:30
5917

恶搞的代码,如果把 OPCODE 集发展下去想跟踪就得费费脑子了。

v_key_sign                equ        0DEADC0DEh        ; haha

v_call_opcode_num32        equ        '00'
v_push_opcode_num32        equ        '01'
v_jmp_opcode_num32        equ        '02'

v_push        macro        opcode1

dw        -1
dd        v_key_sign
dd        v_push_opcode_num32
dd        opcode1
;==push opcode1

endm

v_call        macro        opcode1
dw        -1
dd        v_key_sign
dd        v_call_opcode_num32
dd        opcode1
;==call opcode1(address)
endm

v_jmp        macro        opcode1
dw        -1
dd        v_key_sign
dd        v_call_opcode_num32
dd        opcode1
;==call opcode1(address)
endm

;opcode×î´ó£´×Ö½Ú

.386
.Model Flat,StdCall
Option CaseMap:None
assume fs:flat
include        windows.inc
include        kernel32.inc
include        user32.inc

includelib        kernel32.lib
includelib        user32.lib

.data

szcaption        db                ' my own CPU? muhahahahahah',0
szsth        db                ' oh my!!!!!!!!!!!!!!!!!!!!!!!!!I really hate dustx',0

.code

start:

push        offset DCProcessor
push        fs:[eax]
mov        fs:[eax], esp        ; reg processor

v_jmp        place1

;--------------------------------------------------
place3:

v_push        0
v_call        GetModuleHandleA
xchg        esi, eax

v_call        GetCommandLineA
xchg        edi, eax

v_push        0
v_push        offset szcaption
v_push        offset szsth
v_push        0
v_call        MessageBoxA

v_push        7758521h        ;for test
v_call        ExitProcess

place1:
v_jmp        place2

db        'haaaaaaaaaaaaaaaaaaa'
place2:
v_jmp        place3
;--------------------------------------------------

DCProcessor:

SehHandler1 PROC C pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD

pushad
mov        esi, pContext
assume        esi: ptr CONTEXT
mov        edi, [esi].regEip
inc        edi
inc        edi
mov        eax, [edi]
cmp        eax, v_key_sign
jnz        @@not_vpc_code

;;;;;;;;;;;;;;;;;;;;;;;;

add        edi, 4        ;
mov        eax, [edi]
.if        eax==v_push_opcode_num32
        add        edi, 4
        sub        [esi].regEsp, 4h
        mov        eax, [esi].regEsp
        push        [edi]
        pop        [eax]
        add        edi, 4        ; Ö¸ÏòÐéÄâÖ¸Áîºó±ß

.elseif        eax==v_call_opcode_num32
        add        edi, 4
        mov        eax, [edi]        ; eax->to callµØÖ・
        sub        [esi].regEsp, 4h;・µ»ØµØÖ・stack space       
        lea        ecx, [edi+4]        ; ->・µ»ØµØÖ・
        mov        ebx, [esi].regEsp
        mov        [ebx], ecx
        mov        edi, eax        ;дeip
.elseif        eax==v_jmp_opcode_num32
        add        edi, 4
        mov        eax, [edi]
        xchg        eax, edi
.endif

;ÐÞÕýeip

mov        [esi].regEip, edi

;;;;;;;;;;;;;;;;;;;;;;;;

@@not_vpc_code:

popad

mov  EAX,ExceptionContinueExecution
assume        eax:nothing

ret

SehHandler1 ENDP

end        start


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
放血?
2005-4-15 23:58
0
雪    币: 111
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
呵呵 想法很不错啊~~
在seh中实现指令解释
2005-4-17 11:23
0
雪    币: 223
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哎  看不懂
2005-4-18 15:17
0
雪    币: 127
活跃值: (212)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
对于mov eax,ebx之类的指令实现起来有点困难。
2005-4-19 07:57
0
雪    币: 149
活跃值: (344)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
v_jmp  macro  opcode1
dw  -1
dd  v_key_sign
dd  v_call_opcode_num32  ;v_jmp_opcode_num32粗心了吧
dd  opcode1
;==call opcode1(address)
endm
2005-5-12 22:16
0
雪    币: 204
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
opcode恶搞,恶搞自有对付恶搞的办法,只是看值得不值得。说来说去,还是人和人之间的博弈。
2005-5-13 14:58
0
游客
登录 | 注册 方可回帖
返回
//