易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 1808|回复: 0

一个关于Call的问题,DLL注入的方法。

[复制链接]

11

主题

3

回帖

565

积分

编程入门

Rank: 1

魔鬼币
565
发表于 2017-5-29 20:45:52 | 显示全部楼层 |阅读模式

    大家都知道如果我们知道了一个游戏中的某一个函数,如选怪函数,我们只需要调用该函数就可以实现选怪这个操作了,而不需要通过传递按键的方式。这里我们不讨论如何去找这个函数,我只想说说怎么通过自己的进程去调用其他进程中的函数的方法。
   
    其实这个有3中方法:   
  (1)Windows 钩子,把你的代码放到一个DLL中;然后用 windows 钩子把它映射到远程进程。   
  (2)CreateRemoteThread 和LoadLibrary 技术,把你的代码放到一个DLL中;然后用 CreateRemoteThread 和 LoadLibrary 把它映射到远程进程。   
  (3)CreateRemoteThread 和 WriteProcessmemory 技术,不用DLL,直接复制你的代码到远程进程(使用WriteProcessMemory)并且用CreateRemoteThread执行之。   

    我先说说第二个方法。   
    ※CreateRemoteThread 和LoadLibrary 技术。   
    首先,我们做一个试验。我们先创建一个窗体项目(VC或者VB都可以)Project1,窗体上面放2个textbox(文本输入框),一个为普通类型 text1,另一个为password类型text2。我们再创建一个项目(可执行就行)Project2。在Project2中写入如下代码:  
    char szText[256];  
    WPARAM wParam = sizeof(szText);  
    LPARAM lParam = (LPARAM)szText;  
    memset (szText, 0, sizeof(szText));  
    HWND handle2 = (HWND)0x40FAA;//注1  
    SendMessage(handle2, WM_GETTEXT, wParam, lParam);//获得句柄是handle2的控件的文本值  
    cout<<szText;  
    注1:这里为Project1中textbox的句柄,可以通过SPY++或者自己遍历子窗体的方式获得,这里不详细说明。  

    我们首先将text1(普通类型的textbox)的句柄赋给handle2,运行Project1,在text1上输入:123456;运行Project2,我们可以获得结果123456。关闭Project1和Project2。  
    我们再将text2(password类型的textbox)的句柄赋给handle2,运行Project1,在text2上输入:123456,运行Project2,我们得到的结果是空。  
    通过这个试验,我们可以发现,外部进程使用sendmessage的gettext不能获取密码框中的文本。msdn中说,只有本进程才可以通过sendmessage的gettext方式获取本进程的密码框内容。  
    因此,这里我将介绍使用CreateRemoteThread 和LoadLibrary 技术将sendmessage这个方法注入到目标进程Project1中获取text2密码框中的内容。  
    首先建立一个mfc dll文件,"testDLL.dll".在dllmain函数中写入如下代码:  
    char szText[256];  
    WPARAM wParam = sizeof(szText);  
    LPARAM lParam = (LPARAM)szText;  
    memset (szText, 0, sizeof(szText));  
    HWND handle2 = (HWND)0x40FAA;//这里handle2为text2的句柄  
    SendMessage(handle2, WM_GETTEXT, wParam, lParam);  
    MessageBox(0,szText,"",0);  

将编译生成的testDLL.dll文件放到C盘根目录下。  

    然后随便创建一个可执行项目,这里是个控制台项目:  
#include <windows.h>  
#include <winbase.h>  
#include <iostream.h>  
void main()  
{  
    HANDLE hThread;  
    char    szLibPath[]= "c:\\testDLL.dll"; //自己写的dll的绝对路径   
    void*  pLibRemote;   
    DWORD  hLibModule;     
    HMODULE hKernel32 = ::GetModuleHandle("Kernel32");  
    HWND mhwnd = (HWND)0x70Fc6;  
    HANDLE hProcess;  
    DWORD threadid;  
    GetWindowThreadProcessId(mhwnd,&threadid);  
    hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,threadid);  
    //在远程进程中为szLibPath分配内存  
    pLibRemote = ::VirtualAllocEx( hProcess, NULL, sizeof(szLibPath),  
                                  MEM_COMMIT,PAGE_READWRITE );  
    //写szLibPath到分配的内存  
    ::WriteProcessMemory( hProcess, pLibRemote, (void*)szLibPath,  
        sizeof(szLibPath), NULL );  
    //加载"textDLL.dll"到远程进程(CreateRemoteThread 和LoadLibrary 技术)  
    hThread = ::CreateRemoteThread( hProcess, NULL, 0,  
        (LPTHREAD_START_ROUTINE) ::GetProcAddress( hKernel32,"LoadLibraryA" ),  
        pLibRemote, 0, NULL );  
    ::WaitForSingleObject( hThread, INFINITE );  
    //取得DLL的基址  
    ::GetExitCodeThread( hThread, &hLibModule );  
    //关闭线程和释放内存  
    ::CloseHandle( hThread );  
    ::VirtualFreeEx( hProcess, pLibRemote, sizeof(szLibPath), MEM_RELEASE );  
    //建立远程线程卸载DLL  
    hThread = ::CreateRemoteThread( hProcess, NULL, 0,  
        (LPTHREAD_START_ROUTINE) ::GetProcAddress( hKernel32, "FreeLibrary" ),(void*)hLibModule, 0, NULL );  
    //关闭线程和释放内存  
    ::WaitForSingleObject( hThread, INFINITE );  
    ::CloseHandle( hThread );  
}   
    运行Project1,在text2中输入123456,运行上面的代码,弹出对话框,显示123456。
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表