首页
社区
课程
招聘
P254困惑的地方
发表于: 2004-9-7 09:49 5051

P254困惑的地方

2004-9-7 09:49
5051
在254页的代码中,有个迷惑的问题:

          。。。。
push        PAGE_READWRITE
        push        MEM_COMMIT
        push        dword ptr [ebp+(ShellPackSize-ShellStart0)]
        push        0
        call        dword ptr [ebp+(VirtualallocADDR-ShellStart0)]

        push        eax  ; 这里应该是新申请的内存地址吧。
                          ; 解压缩后的内容应该放到这里,对吗?      

        mov        ebx,dword ptr [ebp+(ShellBase-ShellStart0)]
        add        ebx,ebp
        push        eax
        push        ebx
        call        _aP_depack_asm

        pop        edx  ;这里应该是解压缩前的代码地址?
        push        ebp
        jmp        edx   ;为何是跳到这里执行,而不是eax中的地址呢?按理eax中存放的是解压缩后的执行代码啊?
           。。。。。

不知道我理解的是否正确,请高手指点一二?

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

收藏
免费 1
支持
分享
最新回复 (11)
雪    币: 241
活跃值: (21)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
第一个PUSH EAX和下面的POP EDX是对应的,存放的都是申请的空间,
因为解压过程会破坏EAX的内容,所以先入栈保存,然后再恢复.
把代码解压到那以后,跳过去执行.
2004-9-7 10:01
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
谢谢!

也就是说
push  eax
  push  ebx
在call  _aP_depack_asm 中释放了?
2004-9-7 13:26
0
雪    币: 241
活跃值: (21)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
那是_aP_depack_asm的2个参数,_aP_depack_asm是自平衡堆栈的
2004-9-7 17:28
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
fuapfdw_isNT:
        mov        eax, [eax+0ch]
        mov        eax, [eax+0ch] ;指向InLoadOrderModuleList处
        mov        dword ptr [eax+20h], 1000h ;可是这句是什么作用?
        jmp        fuapfdw_finished

附录:
struct _PEB_LDR_DATA
   。。。   
   +0x00c InLoadOrderModuleList : struct _LIST_ENTRY, 2 elements, 0x8 bytes
   。。。
2004-9-9 11:11
0
雪    币: 241
活跃值: (21)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
typedef struct _LDR_MODULE
{
    LIST_ENTRY        InLoadOrderModuleList;            // +0x00
    LIST_ENTRY        InMemoryOrderModuleList;          // +0x08
    LIST_ENTRY        InInitializationOrderModuleList;  // +0x10
    PVOID             BaseAddress;                      // +0x18
    PVOID             EntryPoint;                       // +0x1c
    ULONG             SizeOfImage;                      // +0x20    //注意这个.
    UNICODE_STRING    FullDllName;                      // +0x24
    UNICODE_STRING    BaseDllName;                      // +0x2c
    ULONG             Flags;                            // +0x34
    SHORT             LoadCount;                        // +0x38
    SHORT             TlsIndex;                         // +0x3a
    LIST_ENTRY        HashTableEntry;                   // +0x3c
    ULONG             TimeDateStamp;                    // +0x44
                                                        // +0x48
} LDR_MODULE, *PLDR_MODULE;
详细资料看这
http://www.nsfocus.net/index.php?act=magazine&do=view&mid=2002
2004-9-9 12:32
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
;*******压缩
        mov        eax,ShellSize_NoPack
        mov        edx, 9 ;下面几句的原理是什么?即为何是9 ,3,16等数字
        mul        edx
        shr        eax,3
        add        eax,16
        mov        MEMSize,eax                        ;计算需要占用的内存空间
        invoke        VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE
        mov        MEM, eax
        invoke        aP_pack,ShellBufferMap,MEM,ShellSize_NoPack,lpPackBuffer,0

谢谢
2004-9-22 09:41
0
雪    币: 241
活跃值: (21)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
这几个数字应该和APLIB压缩后文件存储的格式有关,具体不是很清楚。这段计算实际上APLIB库里已经提供了一个函数进行类似的处理。
2004-9-24 18:59
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
我效仿写了个十分简单的加壳程序,但是不知道错在哪里?请高手帮我检查和调试一下代码。谢谢了。

http://www.ksaiy.com/bbs/upload/4/2004927175236_SafeSoftExe.jpeg

请选择另存为。。。,然后把后缀jpeg改为.rar,解压缩即可
2004-10-8 16:41
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
希望有人能够解答
2004-10-10 16:34
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
希望有人能够帮忙看看
2004-10-10 16:35
0
雪    币: 296
活跃值: (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
请帮忙找一下我的错误在哪里
2004-10-16 21:05
0
游客
登录 | 注册 方可回帖
返回
//