首页
社区
课程
招聘
第三章shellcode搜索API函数
2012-12-8 20:37 5678

第三章shellcode搜索API函数

2012-12-8 20:37
5678
第三章第93页的汇编代码
      push 0x1e380a6a  ;hash of MessageBoxA
      push 0x4fd18963  ;hash of ExitProcess
      push 0x0c917432  ;hash of LoadLibraryA
      mov esi,esp  ; esi = addr of first function hash
      lea edi,[esi-0xc]  ; edi = addr to start writing function ①
........
     lodsd           
      cmp eax, 0x1e380a6a
                  ; LoadLibrary("user32")
      jne find_functions
      xchg eax, ebp      

      call [edi - 0x8]     ; LoadLibraryA ②
      xchg eax, ebp     ; restore current
①处的地址是怎么得到的,指代什么?
②处,怎么判断出loadlibraryA的入口在[edi-0x8]?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
孤单的狼 2012-12-8 21:23
2
0
堆栈是从高地址向低地址增长的
假如 现在栈顶地址为0x0010000C  ESP=0x0010001C
push 0x1e380a6a  ;hash of MessageBoxA  压入4个字节  ESP=0x00100018
push 0x4fd18963  ;hash of ExitProcess         压入4个字节  ESP=0x00100014
push 0x0c917432  ;hash of LoadLibraryA  压入4个字节  ESP=0x00100010
mov esi,esp  ; esi = addr of first function hash
lea edi,[esi-0xc]  ; edi = addr to start writing function ①  那这里的edi = [0x00100008]  这个地址完全是未使用的堆栈地址啊
下图是我在OD中调试的结果,本想解答的我 也晕了  求大神继续解答!
雪    币: 45
活跃值: (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
shenger 2012-12-8 21:37
3
0
其实这个edi指向的地方就是放函数名hash值地方的上面,用来存放hash的对应函数地址。通过call [edi - 0x8]   这样的指令就可以调用[edi-0x8]这个内存单元存放的函数地址的对应函数了。
建议楼主进OD走多几遍多思考,我自己就是这样做的
游客
登录 | 注册 方可回帖
返回