首页
社区
课程
招聘
[求助]那位大牛能发些关于EPO技术的源码最好是c/c++的
发表于: 2011-11-1 23:53 4366

[求助]那位大牛能发些关于EPO技术的源码最好是c/c++的

2011-11-1 23:53
4366
那位大牛能发些关于EPO技术的源码最好是c/c++的,最近在研究EPO.看雪论坛里的关于EPO的资源太少了.如可更改入口点不知道如何去编写.

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 198
活跃值: (103)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
同求C++的EPO相关代码! 如有大牛赐教重谢!
2011-11-2 00:02
0
雪    币: 190
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
typedef struct EPO_Info
{
  U32     raw_;
  U32     from;
  U32     to;
} EPO_Info;
U32 SearchForEntry(U8* file_buf, U32 image_base, U32 raw_entry, U32 entry, int code_size, EPO_Info* epo_info)
{
  EPO_Info valid_call[MAX_EPO_CALL] = { { 0 } };
  U32 _eip = entry + image_base;
  int total_instr_len = 0, cur_instr_len, i = 0;
  char code_text[1000] = { 0 };

  __try {
    file_buf += raw_entry;
    while (total_instr_len < code_size) {
      cur_instr_len = Disasm(file_buf, code_text);
      if (cur_instr_len <= 0) {
        break;
      }
      if (file_buf[0] == 0xE8 && cur_instr_len == 5) {
        valid_call[i].raw_ = (U32)file_buf;
        valid_call[i].from = _eip;
        valid_call[i].to = (_eip + *(U32*)(file_buf + 1) + 5);
        // We have find enough valid call
        if (++i >= MAX_EPO_CALL) {
          break;
        }
      }
      file_buf += cur_instr_len, total_instr_len += cur_instr_len, _eip += (U32)cur_instr_len;
    }
  } __except (1) {
    return 0;
  }

  if (i == 0) {
    return 0;
  }
  srand(GetTickCount());

  // Do not modify the first call if possible
  i = (i == 1) ? 0 : (1 + rand() % (i - 1));
  *epo_info = valid_call[i];
  return 1;
}
2011-11-2 09:18
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上能否给个注释,代码好像不全.看不明白.
2011-11-2 13:00
0
雪    币: 612
活跃值: (961)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
http://www.80dfj.org/showthread.php?t=19
2011-11-3 14:43
0
游客
登录 | 注册 方可回帖
返回
//