首页
社区
课程
招聘
使用
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2010-5-8 22:02
0
[更新完成]调试器的实现<控制台版>(26楼已发布源代码) 更新完毕!
是5期的童鞋啊,太猛了。。。先下载下来,慢慢拜读。。。。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2010-1-17 13:15
0
StrongOD.v0.2.9.561.By.海风月影[CUG][2010.01.10]
非常感谢,已经下载。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-11-17 13:14
0
[madaxian]如何替OD下硬件断点?
OD自己有记录硬件断点的,当他发现这个硬件断点不是自己下的,会把这个异常交给被调试程序处理,另外,你在程序中下的硬件断点,是线程相关的。并不是所有线程都能触发这个异常。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-7-16 12:59
0
[原创]跨进程内存读取, 附源码
很不错。。。我先膜拜,再学习
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-7-14 17:16
0
[翻译]OllyDbg插件开发手册全部翻译件
楼主辛苦啦。先顶再下。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-7-11 22:19
0
[求助]如何申请 0x400000 地址
刚看了白家拳的代码,思路很新颖,学习了。。。收藏
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-7-11 17:54
0
[求助]如何申请 0x400000 地址
我们课堂上讲过LOADEXE的,下边是C的代码,你看下,是不是你需要的。

用VC实现这个功能的最大麻烦是,如何让程序运行起来的0X401000—0X0404000这段内存空出,用来放被加载程序的各个区段。。
首先在编译器LINK选项中设置BASEADDR的地址。我先把这个地址设置的高点。默认应该是0X400000。我把这个地址设为0X500000,然后用VirautlAlloc函数申请0X401000开头的0X3000大小的内存。。。现在的问题是:无论我怎么设置BASEADDR,0X401000这段内存都会被系统资源占用。。。。,VirautlAlloc失败。。郁闷。
只好定义了一个大的数组,作为全局变量。然后慢慢调整BASEADDR,使得程序执行的时候,
这个数组可以包含0X401000这段内存。。下面给出程序实现。

BYTE g_bImageBsae[0xe000];
void CLoadExeDlg::OnButton1()
{
  // TODO: Add your control notification handler code here
  UpdateData();
  void *pFileAddr;//文件隐射基地址
  IMAGE_DOS_HEADER *pDosHead;
  IMAGE_OPTIONAL_HEADER *pOPHead;
  IMAGE_FILE_HEADER  *pFileHead;
  DWORD dwSecNum;
  IMAGE_SECTION_HEADER *pSecInfo;
  IMAGE_IMPORT_DESCRIPTOR *pIID;
  LPTHREAD_START_ROUTINE OEP;
  void *pImageBase = (void*)0x400000;
  HANDLE hFile = ::CreateFile(m_strFileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
  if (hFile==INVALID_HANDLE_VALUE)
  {
    AfxMessageBox("Can't open file");
    return;
  }
  HANDLE hMaping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
  pFileAddr = MapViewOfFile(hMaping,FILE_MAP_READ,0,0,0);  
  pDosHead = (IMAGE_DOS_HEADER*)pFileAddr;
  pFileHead = (IMAGE_FILE_HEADER*)(pDosHead->e_lfanew+4 +(DWORD)pFileAddr);
  
  pOPHead = (IMAGE_OPTIONAL_HEADER*)((DWORD)pFileHead +
           sizeof(_IMAGE_FILE_HEADER));
  OEP = (LPTHREAD_START_ROUTINE)(pOPHead->AddressOfEntryPoint + (DWORD)pImageBase);
  dwSecNum = pFileHead->NumberOfSections;

  pSecInfo = new IMAGE_SECTION_HEADER[dwSecNum];
  //描述表首地址
  DWORD SecInfoStart;
  SecInfoStart = (DWORD)pOPHead + pFileHead->SizeOfOptionalHeader ;
  //获取区信息表
  memcpy((void*)pSecInfo, (void*)SecInfoStart,
    sizeof(IMAGE_SECTION_HEADER)*dwSecNum);
  //把区搬到0X400000为基地址的地方。
  for (DWORD i = 0; i < dwSecNum; i++)
  {
    DWORD dwSecImageAddr = pSecInfo[i].VirtualAddress+(DWORD)pImageBase;
    DWORD dwSecFileAddr  = pSecInfo[i].PointerToRawData + (DWORD)pFileAddr;
    memcpy((void*)dwSecImageAddr,(void*)dwSecFileAddr,pSecInfo[i].Misc.VirtualSize);
  }
  
  pIID = (IMAGE_IMPORT_DESCRIPTOR*)((pOPHead->DataDirectory[1].VirtualAddress) + (DWORD)pImageBase);
  //解析INT表并填入IAT。

  while (pIID->Name != 0)
  {
    char *pDllName;
    char *pFacName;

    HMODULE hDll;
      IMAGE_THUNK_DATA32 *pIDT,*pIAT;
    PIMAGE_IMPORT_BY_NAME *pImByName;
    pDllName = (char*)((DWORD)(pIID->Name) + (DWORD)pImageBase);
    hDll = LoadLibrary((LPCSTR)pDllName);
    pIDT = (IMAGE_THUNK_DATA32*)(pIID->OriginalFirstThunk + (DWORD)pImageBase);
    pIAT = (IMAGE_THUNK_DATA32*)(pIID->FirstThunk + (DWORD)pImageBase);

    while (*(DWORD*)pIDT != 0)
    {
      pImByName = (PIMAGE_IMPORT_BY_NAME*)((DWORD)(pIDT->u1.AddressOfData)+ (DWORD)pImageBase);
      pFacName =(char*)pImByName+2;
      pIAT->u1.Function = (PDWORD)GetProcAddress(hDll,pFacName);
      pIDT++ ;
    }
    pIID++;

   
  }
  DWORD dwThreadID;
  HANDLE hThread = ::CreateThread(NULL,NULL,OEP,NULL,NULL,&dwThreadID);
  ::WaitForSingleObject(hThread,INFINITE);
  delete []pSecInfo;
}

上边代码在VC6.0下编译通过。编译器警告:在95系统中无法运行。
代码写的比较粗糙。。。。纯粹是一个实验品。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-6-29 17:02
0
[原创]MFC框架学习笔记本(1)——类工厂
写的不错。。。期待你的全集
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-6-29 16:42
0
[推荐]Windows 内核情景分析--采用开源代码ReactOS
刚买了一本,书还未到。。。很期待。。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-6-12 22:13
0
[原创]LoadLibrary C版本
,楼上的楼上的意思,是把QQ打包,然后作为2进制放入资源中,他的程序运行的时候,先把资源释放到临时文件中,然后CREATEPROCESS。。。。。不知道我猜对了否。。。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-6-11 23:24
0
[原创]初入Pediy
楼上的是来T场子的。。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-6-8 18:58
0
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-6-8 18:23
0
[原创]AsPack2.12分析及静态脱壳机的编写
我要CODE,。。。。。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-6-8 17:51
0
[原创]Win32汇编阶段调试器项目
强大。。。膜拜下。。。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-4-28 22:15
0
[求助] 怎么得到 [esp+4]的值.
打补丁可以得到。或者注射一个DLL进去,安装异常,然后0058A1C0 这里写入CC。处理这里的异常即可
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-4-7 19:11
0
[原创]LoadLibrary C版本
.....那就要改成递归了啊。。。其实这个代码还有好多问题。。。没考虑序号导入的方式,没有HOOK GetProcAddress,另外修正重定位部分也有点问题,我用MFC DLL测试,总是有部分没有修正,奇怪。。。也懒的修改了。。
雪    币: 86
活跃值: (34)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
方圆科技 3 2009-3-8 18:22
0
[原创]getprocaddress asm版本
哈希方式调用,不懂。。。BAIDU去。。。。。
精华数
RANk
86
雪币
34
活跃值
关注数
粉丝数
0
课程经验
0
学习收益
0
学习时长
基本信息
  能力排名: No.5327
  等    级: LV2
活跃值  活跃值:活跃值
  在线值:
  浏览人数:216
  最近活跃:2019-3-1 14:30
  注册时间:2004-11-23
勋章
能力值

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册