首页
社区
课程
招聘
[讨论]掘北壳-Dbg和Release差距很大
发表于: 2009-7-26 16:49 1980

[讨论]掘北壳-Dbg和Release差距很大

2009-7-26 16:49
1980
在一网站上下载掘北壳源码来研究,有一个地方不是很明白,用Debug模式编译后的代码在运行的时候会崩溃,但是Release下却很正常。

出错的代码位于:void MakeShell()函数中。
该函数用于封装壳代码,在该函数中有很多memcpy调用,其中一处在Debug模式下运行崩溃,访问无效内存。
出错的代码为:
memcpy(MapOfShell+dwSize, &loader, (DWORD)loader_end - (DWORD)loader);
这里我有很多不明白的地方,这个调用从表面来看,是在复制壳的解压代码到目标程序中。loader函数为解码函数。
loader_end 也是一个函数,我感觉作者的意图是通过loader_end与loader做差,从而得到loader函数的长度,两个函数在同一文件中,并且loader在前,loader_end在后,如果编译的时候两个函数相连,则相减后,理应为loader的长度,最多就是多几个int3。 但是在Debug模式下,运算的结果是-75.应该是算错了。-75带入memcpy,从而导致程序崩溃。我的分析就止于此,那么如果我要在Debug模式下计算loader函数的大小,该怎么做?

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//