我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: [原创]我写的一段[屏蔽]代码 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

buguty



性别: 帅哥 状态: 该用户目前不在线
头衔: 孤独的心
等级: 品行端正
发贴: 424
威望: 1
浮云: 1159
在线等级:
注册时间: 2005-10-12
最后登陆: 2024-01-19

5come5帮你背单词 [ announce /ə'nauns/ vt. 宣布,发表 ]


[原创]我写的一段[屏蔽]代码

标 题: 【原创】昨天写的一个GetProcAddress
作 者: buguty
时 间: 2006-09-29,10:40

昨天心血来潮就自己写了个.并复习下pe哈哈...
写作原因:
因为要在一个文件中读入一行函数名然后将其找到(我的一个dll库)所以刚开始
我用的是ms自己的GetProcAddress发现怎样都成功不了.实在找不到原因.所以就
自己写了个并温习了下pe.(感谢看学上的pe方面的文章!)
刚开始写出来后发现还是成功不了.经过跟踪终于发现原因,并且这个也是GetProcAddress不可以成功的原因.就是,在一个文件中读入一行字符后在结尾处
是"\x0A\x00"本来应该是没有\x0a的.比如文件中一行
buguty
被读入后就是
"buguty''\x0a'\x0'"本来没有那个换行符的.所以我在第一次计算hash的时候加了个cmp al,0xa
后来我改进了下.就是在之前将我的所有读入的字符串(读入的字符串还有参数等信息)进行了一下转换去掉结尾的\x0a:
    _asm
    {
    push esi
    mov   esi,pBuff
FindA:
    lodsb
    cmp   al,0x0a
    jnz   FindA
    xor   al,al
    mov   byte ptr [esi-1],al
    pop   esi
    }
然后一下是改进后的代码:

pExploit GetProcAddr(char* pFuncName,HMODULE hDll)
{
unsigned long hash;

pExploit RetVanlue;

_asm
{
  mov   esi,pFuncName
  call GetHash
  mov   hash,eax

  ;找到数据目录表 ebx,edi
  mov   ebx,hDll           ;base to eax
  mov   edi,[ebx+0x3c]
  mov   edi,[edi+ebx+0x78]
  add   edi,ebx             ;edi==Addr of IMAGE_EXPORT_DIRECTORY

  mov   edx,[edi+0x20]
  mov   esi,dword ptr [edx+ebx]
  add   esi,ebx             ;esi-->names

  xor   edx,edx             ;counter...
  dec   edx
  mov   ecx,[edi+0x18]         ;Number of Names of Funcs

  push ebx
GetByNameLoop:
  dec   ecx
  inc   edx

  call GetHash
  mov   eax,hash
  cmp   eax,ebx
  jz   HashFind
  cmp   ecx,0
  jnz   GetByNameLoop
  jmp   UnFindAndEnd

HashFind:
  mov   eax,[edi+0x24]         ;Get AddressOfNameOrdinals's Address
  pop   ebx
  add   eax,ebx
  movzx ax,word ptr [eax+edx*2]
  mov   edx,[edi+0x1c]
  add   edx,ebx
  and   eax,0x0ffff
  mov   eax,[edx+eax*4]
  add   eax,ebx
  jmp   FindAndEnd


/* GetHashFunc */
GetHash:
  xor   ebx,ebx
  xor   eax,eax
HashLoop:
  lodsb
  cmp   ah,al
  jz   GetHashRet
  ror   ebx,7
  add   ebx,eax
  jmp   HashLoop

GetHashRet:
  mov   eax,ebx
  ret
/* GetHashFuncEnd */

UnFindAndEnd:
  pop   esi
  xor   eax,eax
FindAndEnd:
  mov   RetVanlue,eax
}
return RetVanlue;
}
顶端 Posted: 2006-10-11 11:22 | [楼 主]
buguty



性别: 帅哥 状态: 该用户目前不在线
头衔: 孤独的心
等级: 品行端正
发贴: 424
威望: 1
浮云: 1159
在线等级:
注册时间: 2005-10-12
最后登陆: 2024-01-19

5come5帮你背单词 [ provoke /prə'vəuk/ vt. . 激怒,挑起(感情),引起(事件) ]


由于某些原因请求版主删帖。谢谢。。。
顶端 Posted: 2006-10-12 10:05 | [1 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.008573(s) query 5, Time now is:11-24 03:25, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号