首页
社区
课程
招聘
为什么这段代码会有问题
发表于: 2004-10-22 10:10 3792

为什么这段代码会有问题

2004-10-22 10:10
3792
.386
        .model  flat, stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib

        .data

limit  equ     5

        db      0

        .code

_test:      
        call    delta
delta:
        pop     ebp
        sub     ebp,offset delta

        mov     esi,[esp]
        and     esi,0FFFF0000h
        call    GetK32

        push    00000000h
        call    ExitProcess

GetK32:

__1:
        cmp     byte ptr [ebp+K32_Limit],00h
        jz      WeFailed

        cmp     word ptr [esi],"ZM"
        jz      CheckPE

__2:
        sub     esi,10000h
        dec     byte ptr [ebp+K32_Limit] <--------------
        jmp     __1

CheckPE:
        mov     edi,[esi+3Ch]
        add     edi,esi
        cmp     dword ptr [edi],"EP"
        jz      WeGotK32
        jmp     __2
WeFailed:
        mov     esi,0BFF70000h
WeGotK32:
        xchg    eax,esi
        ret

K32_Limit      dw      limit
end     _test
为什么在那里会出现非法内存访问?;)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这就是那个 Billy Belceb的virus writing guide里面的。

As Win32 platforms usually round up to a page all, we can search for the beginning of any page, and as the KERNEL32 header  is just in the beginning of a page, we can check easily  for it. And  when we found  this PE header i am talking about,we know KERNEL32 base  address.

win32的分页是如何影响代码在内存中的组织的呢?
还有VA,RVA以及物理地址之间有是什么关系呢,在反汇编的时候是不是只要看virtual address space呢?

3X!
2004-10-22 10:53
0
雪    币: 104
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有人会用VB写加壳程序吗?VB或 C
2004-10-22 14:57
0
雪    币: 1580
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
limit  equ     5

        db      0

这里是什么?
2004-10-22 16:20
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个我想就像定义一个变量limit并且初始化为5。下面因该是为其分配的空间。
2004-10-22 17:54
0
游客
登录 | 注册 方可回帖
返回
//