由于本人对易语言刚入门,这是第一个易语言程序,请大家不要见笑!
本实例只完成 HTTP调试 微信启动与注入 获取即时消息这几个功能,其它更多功能请自行开发,效果如图:
一、启动微信:
.版本 2
.支持库 const
.子程序 _按钮_启动微信_被单击
.局部变量 微信登录窗口句柄, 整数型
.局部变量 微信启动文件, 文本型
.局部变量 进程启动信息, STARTUPINFO, , , 进程启动信息结构体
.局部变量 进程标识, PROCESS_INFORMATION, , , 进程标识结构体
.局部变量 创建进程返回, 整数型
' 通过注册表获取微信启动目录
微信启动文件 = 取注册表值 (#HKEY_CURRENT_USER, “Software\Tencent\WeChat”, “InstallPath”)
.如果真 (微信启动文件 = “”)
微信启动文件 = “C:\Program Files (x86)\Tencent\WeChat”
.如果真结束
微信启动文件 = 微信启动文件 + “\WeChat.exe”
' 检查是否有微信登录
.如果真 (查找微信进程 () = 真)
信息框 (“已有微信登陆,请退出所有微信再启动!”, 0, , )
返回 ()
.如果真结束
' 创建微信启动里程
创建进程返回 = CreateProcessA (0, 微信启动文件, 0, 0, 假, 0, 0, 0, 进程启动信息, 进程标识)
.如果真 (创建进程返回 = 0)
信息框 (“启动微信失败”, 0, , )
返回 ()
.如果真结束
微信进程ID = 进程标识.dwProcessId
.子程序 查找微信进程, 逻辑型, 公开, 查找是否有微信运行
.局部变量 快照句柄, 整数型
.局部变量 进程信息, PROCESSENTRY32
.局部变量 下一个, 逻辑型
进程信息.dwSize = 1024
快照句柄 = CreateToolhelp32Snapshot (2, 0)
下一个 = Process32First (快照句柄, 进程信息)
.循环判断首 ()
.如果真 (到文本 (进程信息.szExeFile) = “WeChat.exe”)
返回 (真)
.如果真结束
下一个 = Process32Next (快照句柄, 进程信息)
.循环判断尾 (下一个 = 真)
返回 (假)
二、微信DLL注入
.版本 2
.支持库 const
.子程序 _按钮_注入微信_被单击, , , 注入微信DLL
.局部变量 进程ID, 整数型
.局部变量 窗口句柄, 整数型
.局部变量 DLL文件, 文本型
DLL文件 = 取当前目录 () + “\WeChatDlls\” + #DLL名称
.如果真 (文件是否存在 (DLL文件) = 假)
信息框 (“未找到DLL文件:” + DLL文件, 0, , )
返回 ()
.如果真结束
' 查找微信登录窗口句柄
窗口句柄 = API_寻找顶级窗口 (“WeChatLoginWndForPC”, 0)
.如果真 (窗口句柄 = 0)
信息框 (“未找到微信登陆窗口”, 0, , )
返回 ()
.如果真结束
' 通过句柄获取进程ID
API_GetWindowThreadProcessId (窗口句柄, 进程ID)
' 远程注入DLL
注入目标进程 (进程ID, DLL文件)
.子程序 注入目标进程, , , 远程注入DLL
.参数 进程ID, 整数型
.参数 DLL文件路径, 文本型
.局部变量 申请内存, 整数型
.局部变量 注入地址, 整数型
.局部变量 是否注入, 整数型
.局部变量 是否写入, 整数型
.局部变量 模块地址, 整数型
.如果真 (检查能否注入 (进程ID) = 假)
信息框 (“dll已经注入,请退出所有微信重新注入!”, 0, , )
返回 ()
.如果真结束
.如果真 (编辑框_端口.内容 = “”)
信息框 (“请输入端口”, 0, , )
返回 ()
.如果真结束
写配置项 (取运行目录 () + “\config.ini”, “Setting”, “port”, 编辑框_端口.内容)
' 打开进程
模块地址 = OpenProcess (#PROCESS_ALL_ACCESS, 假, 进程ID)
.如果真 (模块地址 = 0)
信息框 (“进程打开失败”, 0, , )
CloseHandle (模块地址)
返回 ()
.如果真结束
' 在微信进程中申请内存
申请内存 = VirtualAllocEx (模块地址, 0, 取文本长度 (DLL文件路径) + 1, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
.如果真 (申请内存 = 0)
信息框 (“申请内存失败”, 0, , )
返回 ()
.如果真结束
' 写入dll到微信进程
是否写入 = WriteProcessMemory (模块地址, 申请内存, DLL文件路径, 取文本长度 (DLL文件路径) + 1, 0)
.如果真 (是否写入 = 0)
信息框 (“写入dll到微信进程失败”, 0, , )
返回 ()
.如果真结束
' 获取LoadLibraryA函数地址
注入地址 = API_GetProcAddress (API_GetModuleHandle (“kernel32.dll”), “LoadLibraryA”)
.如果真 (注入地址 = 0)
信息框 (“获取LoadLibraryA函数地址失败”, 0, , )
返回 ()
.如果真结束
' 远程线程注入dll
是否注入 = CreateRemoteThread (模块地址, 0, 0, 注入地址, 申请内存, 0, 0)
.如果真 (是否注入 = 0)
信息框 (“远程线程注入dll失败”, 0, , )
返回 ()
.如果真结束
' API_WaitForSingleObject (hThread, 10 × 1000)
VirtualFreeEx (模块地址, 申请内存, 取文本长度 (DLL文件路径) + 1, 32768)
CloseHandle (是否注入)
.如果真 (检查能否注入 (进程ID) = 假)
时钟_检查登录.时钟周期 = 1000
.如果真结束
.如果真 (检查能否注入 (进程ID) = 真)
信息框 (“注入失败”, 0, , )
.如果真结束
CloseHandle (模块地址)
三、HTTP请求
.版本 2
.子程序 HTTP请求_GET, 文本型, , 本命令由【精易网页调试助手】生成,请配合精易模块使用。
.参数 请求地址, 文本型, , HTTP请求地址
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型
局_结果 = 到字节集 (网页_访问_对象 (请求地址, 0, ))
局_返回 = 编码_utf8到gb2312 (到文本 (局_结果))
返回 (局_返回)
.子程序 HTTP请求_POST, 文本型, , 本命令由【精易网页调试助手】生成,请配合精易模块使用。
.参数 请求地址, 文本型, , HTTP请求地址
.参数 请求数据, 文本型, , 请求数据为JSON
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型
局_结果 = 到字节集 (网页_访问_对象 (请求地址, 1, 请求数据))
局_返回 = 编码_utf8到gb2312 (到文本 (局_结果))
返回 (局_返回)
四、获取即时消息
通过易语言中的 时钟 每3秒刷新一次最新消息!
.版本 2
.支持库 spec
.子程序 _时钟_检查登录_周期事件
.局部变量 网页文本, 文本型
网页文本 = HTTP请求_GET (“http://127.0.0.1:” + 编辑框_端口.内容 + “/?cmdid=1”)
.如果真 (网页文本 = “1”)
时钟_检查登录.时钟周期 = 0
调试输出 (“登录成功”)
时钟_获取即时消息.时钟周期 = 3000
.如果真结束
.子程序 _时钟_获取即时消息_周期事件
.局部变量 网页文本, 文本型
.局部变量 json, 类_json
.局部变量 聊天内容, 文本型
.局部变量 聊天记录, 类_json
.局部变量 n, 整数型
.局部变量 Data数组, 类_json
网页文本 = HTTP请求_GET (“http://127.0.0.1:” + 编辑框_端口.内容 + “/?cmdid=7”)
' 编辑框_聊天记录.内容 = 网页文本
json.解析 (网页文本)
Data数组 = json.取属性 (“data”)
.计次循环首 (Data数组.成员数 (), n)
聊天记录 = Data数组.取成员 (n - 1)
编辑框_聊天记录.加入文本 (聊天记录.取通用属性 (“StrContent”) + #换行符 + #换行符)
.计次循环尾 ()
聊天消息的JSON结构为:
{
"cmdid": 7,
"maxid": 5,
"count": 75,
"status": "ok",
"qq": "2376140244",
"data": [
{
"localId": 42,
"MsgSvrID": "2062239765205091112",
"StrTalker": "[email protected]",
"StrContent": "<?xml version=\"1.0\"?>\n<msg>\n\t<img aeskey=\"611118464e36d48e86c891c79e25b07c\" encryver=\"1\" cdnthumbaeskey=\"611118464e36d48e86c891c79e25b07c\" cdnthumburl=\"3058020100044c304a0201000204be9026a302032f5d0302045938f0b702045fefffb90425617570696d675f383038376264343062646134646465335f31363039353634303839373537020401090a020201000405004c56fb00\" cdnthumblength=\"4043\" cdnthumbheight=\"140\" cdnthumbwidth=\"56\" cdnmidheight=\"0\" cdnmidwidth=\"0\" cdnhdheight=\"0\" cdnhdwidth=\"0\" cdnmidimgurl=\"3058020100044c304a0201000204be9026a302032f5d0302045938f0b702045fefffb90425617570696d675f383038376264343062646134646465335f31363039353634303839373537020401090a020201000405004c56fb00\" length=\"24332\" md5=\"692efd877bce4ad7dc41becca0d2278d\" hevc_mid_size=\"24332\" />\n</msg>\n",
"CreateTime": 1609564091,
"IsSender": 0,
"type": 3,
"SubType": 0,
"CompressContent": "",
"BytesExtra": {
"wxid": "wxid_y7hw81zn588b12",
"thumb": "keepmoving8\\FileStorage\\Image\\Thumb\\2021-01\\e03c67108d6c39c020c48696dbd36916_t.dat",
"image": "keepmoving8\\FileStorage\\Image\\2021-01\\4953c7f182c4741eec97c9ab6bfe1eb4.dat",
"video": ""
}
},
{
"localId": 43,
"MsgSvrID": "3036343329427015238",
"StrTalker": "[email protected]",
"StrContent": "收满不收弹头40",
"CreateTime": 1609564122,
"IsSender": 0,
"type": 1,
"SubType": 0,
"CompressContent": "",
"BytesExtra": {
"wxid": "wxid_87rw855vmv4h22",
"thumb": "",
"image": "",
"video": ""
}
},
{
"localId": 44,
"MsgSvrID": "6558585969683208319",
"StrTalker": "JI282940039",
"StrContent": "要的滴滴我",
"CreateTime": 1609564128,
"IsSender": 0,
"type": 1,
"SubType": 0,
"CompressContent": "",
"BytesExtra": {
"wxid": "",
"thumb": "",
"image": "",
"video": ""
}
}
]
}
这样,简单的易语言实例就介绍完了!详细请下载源码!
下载地址:https://tshelper.lanzous.com/i7V8llim3sh https://download.csdn.net/download/keepmoving0407/15158700
交流群:1005923608 561112477