stroePath=GetRealFlag(storeCode,"ui_cegui.dll",9,&lpStoreRet,ui_cegui); 
if(stroePath==0) 
return ; 
stroePath=stroePath+0x43; 
lpStoreRet=(void*)((DWORD)lpStoreRet+0x43); 
DWORD jmpAddress=(DWORD)GetStore-(stroePath+5); 
*(DWORD*)(&storeJmpCode[1])=jmpAddress; 
memcpy(oldStoreCode,(BYTE*)stroePath,6);MEMORY_BASIC_INFORMATION mbi; 
VirtualProtect((void*)stroePath,7,PAGE_READWRITE,(DWORD*)&mbi); 
memcpy((void*)stroePath,storeJmpCode,6); 
VirtualProtect((void*)stroePath,7,mbi.Protect,0); 
return;
这个是完整版帖子地址http://www.hacker.com.cn/article/view_14638.html这个是我问网上找的一篇网游DLL木马的代码
有几个问题不是很明白他这个里面的他这个里面的获取
截取了用户名,密码,等级,仓库密码 的代码都差不多!他是怎么获取到的呢?
这个很郁闷!不知道谁能帮忙说一下下!!
另外就是他的ui_cegui.dll 和下面的这些二进制东西怎么得到的?
BYTE userCode[7]={0x8B,0x45,0x0C,0x50,0x8D,0x4B,0x5C}; 
BYTE userJmpCode[6]={0xe9,0x00,0x00,0x00,0x00,0x90}; BYTE gradeCode[6]={0x89,0x9F,0xFC,0x00,0x00,0x00}; 
BYTE gradeJmpCode[6]={0xe9,0x00,0x00,0x00,0x00,0x90}; BYTE storeCode[9]={0x8B,0x4E,0x04,0x33,0xC5,0x57,0x8B,0x7D,0x08}; 
BYTE oldStoreCode[6]={0}; 
BYTE storeJmpCode[6]={0xe9,0x00,0x00,0x00,0x00,0x90}; 
谢谢晚上看来帖,若有哪位大牛讲解第详细点儿,立马结贴

解决方案 »

  1.   

    BYTE userCode[7]={0x8B,0x45,0x0C,0x50,0x8D,0x4B,0x5C}; 
    BYTE userJmpCode[6]={0xe9,0x00,0x00,0x00,0x00,0x90}; BYTE gradeCode[6]={0x89,0x9F,0xFC,0x00,0x00,0x00}; 
    BYTE gradeJmpCode[6]={0xe9,0x00,0x00,0x00,0x00,0x90}; BYTE storeCode[9]={0x8B,0x4E,0x04,0x33,0xC5,0x57,0x8B,0x7D,0x08}; 
    BYTE oldStoreCode[6]={0}; 
    BYTE storeJmpCode[6]={0xe9,0x00,0x00,0x00,0x00,0x90}; 
    这些事 机器指令.在跟踪的时候可能某个地方会出现会出现游戏信息如账号角色,这时可能还没来得及加密.
    然后下钩子,替换掉原来的指令,Jmp到Dll函数的地址,然后再Jmp回来.oldStoreCode[6]={0};应该是它用来保存 被修改的指令,以后要还原回来.
    作者在逆向的时候就找到了 特征码.
    特征码+偏移  为要hook的地址(这样非API非导出函数 或则说几乎任何地方都能hook到)
    替换原来的机器指令,写入跳转指令,跳转我Dll函数,DLL函数完了,再执行原来的指令,再跳回来.
    LZ想学做外挂吧?看源代码没用的.关键是分析.... 不然遇见这种 机器指令 你就看不懂.
    你把游戏分析清楚 随便1个程序员都能写出外挂....关键是逆向分析