moonYut
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2006-12-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望138点
  • 贡献值17点
  • 好评度117点
  • 原创分0分
  • 专家分0分
阅读:1737回复:4

wowocock:请看看!

楼主#
更多 发布于:2004-05-14 02:08
  szMsg0                  db \"Hey,Hope U enjoy it!\",0
;;-----------------------------------------

__Start:
     invokeInitCommonControls
     call    delta
delta:  
     pop     ebp                             ;得到delta地址
     sub     ebp,offset delta                ;因为在其他程序中基址可能不是默认的所以需要重定位
     mov     dword ptr [ebp+offset appBase],ebp     ;呵呵仔细想想
     mov     ecx,[esp]                       ;返回地址
     xor     edx,edx

getK32Base:
     dec     ecx                             ;逐字节比较验证
     mov     dx,word  ptr [ecx+IMAGE_DOS_HEADER.e_lfanew]   ;就是ecx+3ch
     test    dx,0f000h                       ;Dos Header+stub不可能太大,超过4096byte
     jnz     getK32Base                      ;加速检验
     cmp     ecx,dword ptr [ecx+edx+IMAGE_NT_HEADERS.OptionalHeader.ImageBase]
     jnz     getK32Base                      ;看Image_Base值是否等于ecx即模块起始值,
     mov     [ebp+offset k32Base],ecx        ;如果是,就认为找到kernel32的Base值
     lea     edi,[ebp+offset aGetModuleHandle]
     lea     esi,[ebp+offset lpApiAddrs]
我不太明白ecx中存的是什么内容,就不知道减一是作什么用的,还有我看了下pe文件头的资料上还是不明白这个的用意!
 
  还有一点不明白,4096不是1000H吗,为什么是0F000H呢,(以前汇编没学好)
 最好能说的详细一点,谢谢你了!
刚则折,柔恒存,柔羽胜刚强! 万法自然,无根无极!--太极
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-05-14 09:09
我不太明白ecx中存的是什么内容,就不知道减一是作什么用的,还有我看了下pe文件头的资料上还是不明白这个的用意!
因为你的进程由PELOADER加载,而该PELOADER至少在WINDOWS下是位于KERNEL32中的,也就是说你进程结束的时候返回地址是位于KERNEL32中的某个地方,ECX中的[esp]就是该返回地址,一定在KERNEL32中.
所以你可以从该地址开始向前搜索直到找到KERNEL32的PE头为止.
test dx,0f000h 表示屏蔽低12位,对齐到4K而已.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
moonYut
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2006-12-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望138点
  • 贡献值17点
  • 好评度117点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-15 20:16
高手,真的是高手!
刚则折,柔恒存,柔羽胜刚强! 万法自然,无根无极!--太极
moonYut
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2006-12-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望138点
  • 贡献值17点
  • 好评度117点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-15 20:46
getK32Base:
dec ecx ;逐字节比较验证
mov dx,word ptr [ecx+IMAGE_DOS_HEADER.e_lfanew] ;就是ecx+3ch
test dx,0f000h ;Dos Header+stub不可能太大,超过4096byte
jnz getK32Base ;加速检验
能给我说明一下,内存中的存放是什么样的吗,我不太明白
test dx,0f000h,是这句话你说是对齐,我不太明白内存中的格式是什么样的
刚则折,柔恒存,柔羽胜刚强! 万法自然,无根无极!--太极
aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-23 17:10
看来的确是高手。
技术交流:aasa2@21cn.com QQ群:10863699
游客

返回顶部