首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 破解技术 >> 破解实例 >> 正文
修理外挂克星主程序
时间:2005-9-30 9:13:29 出处:看雪论坛 作者:佚名 编辑:mervin 点击数:

五   修正jmp走的IAT操作
可以关掉程序了
---------------------------第二个程序---------------------------------
#include <Windows.h>
#include <stdio.h>

void main(void)
{

  FILE *fp = fopen("e:\\1_.exe", "rb");
  char *mapoffile = new char[0x42000];      //文件大小0x42000
  fread(mapoffile, 0x42000, 1, fp);         //文件内容全读进来
  fclose(fp);

  fp = fopen("e:\\api.bin", "rb");

  char apibuf[16];

  DWORD dwPrevApiAddr = 0;
  DWORD dwApiAddr = 0;
  DWORD dwIatAddr = 0x400000 + 0x40000;
  DWORD dwRCall;


  int r = fread(apibuf, 16, 1, fp);
  dwPrevApiAddr = *(LPDWORD)apibuf;
  while (r !=EOF && r != 0)
  {
    // 得到IAT的位置
    dwApiAddr = *(LPDWORD)apibuf;
    if (dwPrevApiAddr != dwApiAddr)
      dwIatAddr += 4;
    if (*(LPDWORD)(dwIatAddr-0x400000+mapoffile) == 0)
      dwIatAddr += 4;

    dwPrevApiAddr = dwApiAddr;

    // 找偷掉API操作的字节长度
    // 比如 CALL [0x00CD****]  是6个字节
    // MOV  EAX, [0x00CD****]  是5个字节
    for (int i=4; i<16; i++)
    {
      if (*(LPWORD)&apibuf[i] == 0x00CD)
        break;
    }

    //通过跳回去的地址算出跳进来的地址
    dwRCall = *(LPDWORD)&apibuf[i-2] + 4 + 5 + *(LPDWORD)&apibuf[i+3];
   
    //把 jmp CD**** 改回 CALL [IAT]. MOV EDI, [IAT] 等等
    memcpy((LPVOID)(dwRCall-0x400000+mapoffile), &apibuf[4], i-2-4);
    memcpy((LPVOID)(dwRCall-0x400000+mapoffile+i-2-4), &dwIatAddr, 4);

    r = fread(apibuf, 16, 1, fp);
  }

  fclose(fp);

  // 2.exe是最终文件
  fp = fopen("e:\\2.exe", "wb");
  fwrite(mapoffile, 0x42000, 1, fp);
  fclose(fp);

  delete[] mapoffile;
}

上一页  [1] [2] [3] 

-
相关文章
没有相关文章


精彩推荐
今天你泄露了吗 网络个
黑反归来,重要通知!
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
BMP文件格式分析
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
报障QQ:281873518,479748258 EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号