首页
社区
课程
招聘
[求助]关于第三版中的外壳编写基础代码的问题
发表于: 2008-8-4 16:29 5271

[求助]关于第三版中的外壳编写基础代码的问题

2008-8-4 16:29
5271
今天公司买的书刚到,  真是如获至宝,  第一时间借了出来, 怕别人抢去.
  在看外壳编写基础这一部分的时候, 有一点问题向作者请教一下.
  我从网站上下载了这部分的代码,  为什么用这个加壳示例程序加壳后, 程序无法运行,  选项我也做了多次调整, 始终还是不行,  请问一下这是什么原因?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
2
我这边怎么就能用?Lz确认你配置的没问题?
2008-8-4 17:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是在两个系统上,同样的加壳后的一个文件,一个能运行,一个不能运行
反汇编跟踪,在 恢复原输入表中,
if        eax==0
  push        esi
call        dword ptr [ebp+(LoadlibraryADDR-ShellStart)]
这个函数的地址错误,不知道为什么
2008-11-29 23:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
接上面的
就是加载DLL动态库函数的时候出错
这个上述的地址是在上面的一个函数call        dword ptr [ebp+(GetprocaddressADDR-ShellStart)]
加载的地址
一个用这个函数循环加载了3个函数,
'GetProcAddress',
'GetModuleHandleA',0
'LoadLibraryA',0
不能运行,是因为加载这三个函数地址的时候,就中间一个是正确的,所以导致后面的错无,
不知道什么原因,请高手指教
2008-11-29 23:47
0
雪    币: 241
活跃值: (21)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
不是很明白你的问题。
FirstFunc         DW        0       
                 DB        'GetProcAddress',0
SecondFunc         DW        0
                 DB        'GetModuleHandleA',0
ThirdFunc         DW        0
                 DB        'LoadLibraryA',0

是组成外壳的输入表,并没有主动的去取地址。
能不能说得更详细一点,比如是执行shell.asm的哪段代码出错的。行号是多少。
那台出错的机器是不是装了什么杀毒的或者主动防御的东西?
2008-12-2 18:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我把杀毒软件退出也是有问题,是PE加载器加载外科输入表的时候,三个函数的地址只有GetModuleHandleA地址是正确的,其他两个的是错误的:
在OLLYICE加载完没有执行代码后,三个地址分别为:7C883FEC   7C80B6A1  7C883F9C  
所以导致在执行到
next0:
        pop        ebp
        sub        ebp,(ImportTable-ShellStart0)

        ;////////////////////////////////////////////////以下代码是处理DLL时起作用
        mov        eax, dword ptr [ebp+(ShellStep-ShellStart0)]
        .if        eax != 0;dll文件退出时走这里       
                push        ebp
                jmp        dword ptr [ebp+(ShellBase2-ShellStart0)]
        .endif
        inc        dword ptr [ebp+(ShellStep-ShellStart0)]
       
        mov        eax, dword ptr [esp+24h]
        mov        dword ptr [ebp+(imagebase-ShellStart0)], eax;取当前映像基址,如果是EXE在后面会用Getmulehandle取基址的
        ;////////////////////////////////////////////////

        lea        esi,[ebp+(DllName-ShellStart0)]
        push        esi
        call        dword ptr [ebp+(AddressSecond-ShellStart0)]  
                                   //这里调用GetModuleHandleA函数,地址正确,不会有问题
                        //ebp+(AddressSecond-ShellStart0) 地址的数值为7C80B6A1
        lea        esi,[ebp+(Virtualalloc-ShellStart0)]
        push        esi
        push        eax
        call        dword ptr [ebp+(AddressFirst-ShellStart0)]
                   //这里是调用GetProcAddress,就会出问题了,因为 ebp+(AddressFirst-ShellStart0)]地址的数值为7C883FEC,而这不是GetProcAddress的真实地址,就导致错误了。
很是郁闷,不知道是什么原因
2008-12-3 20:38
0
雪    币: 241
活跃值: (21)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
你说的好象已经不是外壳编写的问题了。
我也想不出来这个问题的原因是什么。唯一能想到的就是一些主动防御的东西可能HOOK修改了这些东西。
2008-12-4 15:14
0
游客
登录 | 注册 方可回帖
返回
//