目录修整
目前的系列目录(后面会根据实际情况变动):
-
在windows11上编译python -
将python注入到其他进程并运行 -
注入Python并使用ctypes主动调用进程内的函数和读取内存结构体 -
调用汇编引擎实战发送文本和图片消息(同时支持32位和64位微信) -
允许Python加载运行py脚本且支持热加载 -
利用汇编(keystone)和反汇编引擎(beaengine)写一个x86任意地址hook -
封装Detour写一个x64函数 hook -
实战32位和64位接收消息和消息防撤回 -
实战读取内存链表结构体(好友列表) -
根据bug反馈和建议进行细节上的优化 -
做一个僵尸粉检测工具 -
其他功能慢慢加
简单说一下目录变动的细节,具体实现下一篇来说:
-
为什么要引入反汇编引擎
刚接触Windows hook时,学的最简单的hook,就是自己处理修改的机器码。但是它不便于引入Python,而且比较繁琐,需要自己用内联汇编补上被修改的指令。
加入反汇编引擎后,不需要关心被hook地址的汇编指令是什么,让引擎来获取被修改的汇编指令。
这样实现的hook还有一个好处:你不止可以在Python获取到该地址所有寄存器的值,你还能在Python里修改这些寄存器,当然能修改esp和eax的话也就能修改函数参数和返回值。
-
为什么要引入汇编引擎
自己解析汇编的话需要处理相对地址的偏移,引入汇编引擎后方便了很多
-
为什么不用Python写一个纯hook库
keystone和beaengine都有Python接口,是可以实现Python来写这个hook,但是我懒不想写了。直接用C++编译成dll什么语言都能用
使用教程
本篇文章做的改动:
-
injectpy以导出函数的形式来初始化Python -
可以选择注入Python后是打开控制台还是执行Python代码 -
执行的Python代码实时修改实时生效
下载代码
启动微信后,执行main.py
,它就会将Python注入到微信并在微信里也加载这个main.py
,接下来你只需要修改robot.py
保存后消息就会发送出去。
from module.sendmsg import SendMsg
st = SendMsg()
st.send_text("filehelper", "测试消息!")
当你想再发送消息,你也是修改这个脚本后保存。请禁用编辑器的自动保存,不然你还没写完代码,微信就已经加载你的脚本。定时发消息用threading.Timer
。
要导入什么库跟平时一样安装导入即可,使用上没有什么区别。
另外,该目录下的任意一个脚本被修改都会重新加载并执行。所以你也可以再添加一个脚本(需遵循Python模块命令规范),在里面写一个新的逻辑。如果是阻塞的代码,请使用多线程来执行
下面为技术知识点,如果你不感兴趣,直接拉到最后面看github地址。
涉及知识点
远程函数执行
injectpy之前是在dll的入口函数创建个线程来加载Python,现在因为需要指定要执行的脚本绝对路径,所以该方法行不通了。
我就在injectpy导出了四个函数,用于设置Python的路径和执行脚本的路径
extern "C" __declspec(dllexport) void SetPythonPath(wchar_t* path);
extern "C" __declspec(dllexport) void SetOpenConsole(bool isOpen);
extern "C" __declspec(dllexport) void RunPythonConsole();
extern "C" __declspec(dllexport) void RunPythonFile(wchar_t* pyCodePath);
然后在Python里获取到这些导出函数的偏移,在加上dll的基址就是函数的内存地址,接着使用CreateRemoteThread
来调用这些函数,就能在微信里初始化Python
调用CreateRemoteThread
有个注意的地方,执行后最好等待(sleep)片刻再执行其他的代码。不然可能线程还没执行完,你就已经开始其他操作了
我就封装了一个DelayCreateRemoteThread
方便调用
def DelayCreateRemoteThread(*args):
CreateRemoteThread(*args)
time.sleep(0.05)

模块热加载
篇幅较长,而且是个新功能,就在另一篇文章来说明。另外,该功能已经封装成库并且发布到pypi,可以pip安装,
请看同一天发布的第二篇文章:Python实现模块热加载
源代码
https://github.com/kanadeblisst00/PyRobot-part5
如果github访问较慢,可以试试我自建的仓库
http://www.pygrower.cn:21180/kanadeblisst/PyRobot-part5
原文始发于微信公众号(Python成长路):【Python微信机器人】第五篇: 注入Python加载运行py脚本且支持热加载
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/196023.html