星与酸咪咪

十年树木,百年树袋熊

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  14 Posts :: 15 Stories :: 5 Comments :: 0 Trackbacks

常用链接

留言簿(11)

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 5924
  • 排名 - 1432

最新评论

阅读排行榜

评论排行榜

      这里说的重定位不是dll里的重定位表,那个不好玩,让windows自己修正去.我说的是远程线程的代码需要重定位,定位什么呢?说白了就是全局变量,什么函数地址拉(所谓的api重定位,是吗?也许是我呆会要说的不重定位),函数名字的字符串啊,只是前者没初始化而已,不管它,全部都要修正地址,简单点讲就是多了个偏移量,每个访问这些变量的代码都要加上个偏移量,这个偏移量的获得就厉害啦,call当前位置,这样这个位置就进堆栈喽~在pop出来,sub之前call的位置,偏移量就完成了,然后所有什么mov啊 call啊的全部得写成[ebx+offset **](偏移量在ebx),**除了变量名还能是啥?这里加不加offset都是一样,结果还是被offset了的,我已经试过了,机器码都一样.为了键盘不磨损我以后再不打offset.

      说不重定位之前,阿,本来就是直接定位,重个屁呀.是这样的,你也知道那些api要重新找地址,靠三个函数,GetModuleHandle,LoadLibrary,GetProcAddress,居家旅行必备良函数.这三个函数不也是api嘛,怎么定位呢?方法一,不定.前提是kernel32.dll未被重定位,方法二,这个方法厉害的不得了!竟然需要利用CreateProcess的过程,它在运行的开头竟然push了个地址,然后才jmp到子进程(有点像子程序,虽然进程无法互访,能讲出这种话还不是因为windows权限最大,管他什么进程想访就访).然后子进程ret的话,就运行到push的地址中,哇竟然是ExitThread.不管这个先,我们能用的就是这个ret回来的地址,就是这个地址打通了我们找api的狗洞.你知道地址在kernel32.dll模块中,所以好戏开始上演.
       说详细点吧,不然你听了没意思.适时用[esp]就得到地址了,从这个地址往回找页对齐的地址,找那个'MZ',懂吧,dos头,就是文件头嘛,算了说快点了,反正你可以查MSDN,我是说相应的结构体,MSDN才不会教你耍这种把戏,
        [esi]->dos头->可选头(这只是个名字,你知道的)->数据目录->导出表->扫描名表,保存索引,在地址表取你要的.

        真的,罗文彬你呀就是一大帅哥,都不知道你从哪研究出来的,真的是非常精彩,人类社会没见几个有这么精彩的办法了.
        对了,关于导入导出表我画了两张图,对着内存里的数据画的,把那些七七八八名表地址表指来指去的位置和普遍取值都列出来了,有机会上传一下,我这辈子都没画过这么有价值的图,在我眼里他们已经是藏宝图了

posted on 2007-07-06 06:01 0down274 阅读(484) 评论(3)  编辑 收藏 引用

Feedback

# re: 重定位,不重定位,厉害! 2007-07-08 05:15 0down274
总结一下重定位
使用函数的话,参数要用到地址的时候,只能先lea出来,我当然是说全局变量

罗大哥的在同节添代码的代码似乎有点毛病,顺带一提,玩这玩意需要一会儿内存偏移一会儿文件偏移,痛苦的要死,差点寄存器就不够用了
他的代码里我倒是精简了许多地方,SEH,nt头检测,导出表里的索引表,内存使用,挖记不得了,基本上从头到尾都改过了,把各个功能整理了一下,思路清晰多了(大概就我觉得清晰吧)

有个想法可以免疫一切病毒,威金拉,熊猫拉,全部失效.不过我怕系统会崩掉,在自己电脑上用上几个星期再说  回复  更多评论
  

# re: 重定位,不重定位,厉害! 2007-09-17 16:40 fk
写的是个屁啊  回复  更多评论
  

# re: 重定位,不重定位,厉害![未登录] 2007-09-20 20:49 me
你回复的屁都不是 我为它进入数据库感到愤慨  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理