前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LOL换肤 学习交流

LOL换肤 学习交流

原创
作者头像
宗亲立牧
修改2019-09-09 12:12:18
1.4K0
修改2019-09-09 12:12:18
举报
文章被收录于专栏:宗亲立牧
TIM 截图 20190903174800.png
TIM 截图 20190903174800.png
TIM 截图 20190903174815.png
TIM 截图 20190903174815.png
TIM 截图 20190903174842.png
TIM 截图 20190903174842.png
代码语言:javascript
复制
.版本 2

.子程序 注入DLL, 整数型, 公开, 成功返回DLL的模块句柄,失败或已注入返回0。
.参数 进程句柄, 整数型, , 句柄必须拥有对被注入进程的完全操作权限。注入后如果没有其他用处可以关闭该句柄。
.参数 DLL数据, 字节集

.如果真 (是否已注入 () 或 DLL数据 = {  } 或 进程句柄 = 0)
    返回 (0)
.如果真结束
' 将内存中的DLL写到目标进程
DataAddr = 写入内存数据_ (进程句柄, DLL数据)
.如果真 (DataAddr = 0)
    返回 (0)
.如果真结束
' 把加载函数写到目标进程
LoadAddr = 写入内存数据_ (进程句柄, #load_code + #getaddr_code + #free_code)
.如果真 (LoadAddr = 0)
    释放内存_ (进程句柄, DataAddr)
    重载变量 ()
    返回 (0)
.如果真结束
GetAddr = LoadAddr + 2143  ' 2143 = 取字节集长度(#load_code)
FreeAddr = GetAddr + 277  ' 277 = 取字节集长度(#getaddr_code)
hModule = 启动线程_Ret (进程句柄, LoadAddr, DataAddr)
.如果真 (hModule = 0)
    释放内存_ (进程句柄, LoadAddr)
    释放内存_ (进程句柄, DataAddr)
    重载变量 ()
    ' 本源码来自易语言资源网(www.5A5X.com)
    返回 (0)
.如果真结束
DuplicateHandle (-1, 进程句柄, -1, hProcess, 0, 0, 2)  ' 复制句柄
返回 (hModule)

.子程序 取DLL函数地址, 整数型, , 返回已经注入到指定进程内的DLL的函数地址。失败返回0。
.参数 DLL函数名, 文本型, , 区分大小写。
.局部变量 地址, 整数型
.局部变量 指针, 整数型

.如果真 (是否已注入 () = 假 或 DLL函数名 = “”)
    返回 (0)
.如果真结束
地址 = 写入内存数据_ (hProcess, 到字节集 (DLL函数名))
.如果真 (地址 = 0)
    返回 (0)
.如果真结束
指针 = 启动线程_多参_Ret (hProcess, , GetAddr, hModule, 地址)
释放内存_ (hProcess, 地址)
返回 (指针)

.子程序 执行DLL函数, 整数型, 公开, 执行已经注入到指定进程内的DLL的函数,成功返回所执行的函数的地址,失败返回0。
.参数 DLL函数名, 文本型, , 区分大小写。
.参数 等待函数执行完毕, 逻辑型, 可空, 默认为假,为真则函数执行完毕后本函数才返回。
.参数 返回值, , 参考 可空, 如果上一个参数为真,则可提供一个变量保存被执行的DLL函数的返回值。
.参数 线程句柄, , 参考 可空, 可提供变量保存函数执行线程的句柄,不需要请留空.接收了句柄记得不用时要关闭.
.参数 参数1, , 可空, 可提供给被执行函数最多10个参数(理论上支持无限个,自己看着改吧)不需要的请留空。
.参数 参数2, , 可空, 非整数型参数需传递变量的内存数据指针,该指针必须是在目标进程内的。
.参数 参数3, , 可空, 提供的参数请与所执行的函数的参数个数一致,否则被注入的进程绝对会崩溃!
.参数 参数4, , 可空
.参数 参数5, , 可空
.参数 参数6, , 可空
.参数 参数7, , 可空
.参数 参数8, , 可空
.参数 参数9, , 可空
.参数 参数10, , 可空
.局部变量 计次, 整数型
.局部变量 数值, 字节集
.局部变量 参数, 整数型, , "0"
.局部变量 指针, 整数型
.局部变量 地址, 整数型

连续赋值 (0, 返回值, 线程句柄)
指针 = 取DLL函数地址 (DLL函数名)
.如果真 (指针 = 0)
    返回 (0)
.如果真结束
数值 = 指针到字节集 (_取整数型数据地址 (参数1), 80)
.变量循环首 (1, 73, 8, 计次)
    .如果真 (数值 [计次 + 4] = 1)
        加入成员 (参数, 字节集_到整数 (数值, 计次))
        到循环尾 ()
    .如果真结束
    跳出循环 ()
.变量循环尾 ()
地址 = 写入内存数据_ (hProcess, MakeCallCode (指针, 参数))
.如果真 (地址 = 0)
    返回 (0)
.如果真结束
线程句柄 = CreateRemoteThread (hProcess, 0, 0, 地址, 0, 0, 0)
.如果 (等待函数执行完毕 或 线程句柄 = 0)
    .如果真 (线程句柄 ≠ 0)
        WaitForSingleObject (线程句柄, -1)
        GetExitCodeThread (线程句柄, 返回值)
    .如果真结束
    .如果真 (是否为空 (线程句柄) 且 线程句柄 ≠ 0)
        CloseHandle (线程句柄)
    .如果真结束
    释放内存_ (hProcess, 地址)
.否则
    ' 启动专门关句柄和释放目标进程内存的子程序:
    CloseHandle (启动线程_hThread (-1, _取子程序地址 (&释放进程内存), 写入内存数据_ (-1, 到字节集 (hProcess) + 到字节集 (线程句柄) + 到字节集 (地址) + 选择 (是否为空 (线程句柄), { 1, 0, 0, 0 }, { 0, 0, 0, 0 }))))
.如果结束
返回 (指针)

.子程序 卸载DLL, 逻辑型, , 卸载已经注入的内存中的DLL,成功返回真,失败返回假.(最好不要卸载,卸载的话被注入的进程很容易崩溃)

.如果真 (hModule = 0)
    返回 (假)
.如果真结束
启动线程_Ret (hProcess, FreeAddr, hModule)
释放内存_ (hProcess, LoadAddr)
释放内存_ (hProcess, DataAddr)
CloseHandle (hProcess)
重载变量 ()
返回 (真)

.子程序 是否已注入, 逻辑型, , 已注入返回真,未注入返回假。
.局部变量 句柄, 整数型

.如果真 (只运行一次)
    返回 (真)
.如果真结束
.如果真 (hProcess = 0)
    只运行一次 = 真
    返回 (假)
.如果真结束
句柄 = CreateRemoteThread (hProcess, 0, 0, 2088802608, 0, 0, 0)  ' 这里“lpStartAddress”用到绝对地址,可能不通用。
.如果真 (句柄 = 0)
    卸载DLL ()
    ' 本源码来自易语言资源网(www.5A5X.com)
    返回 (假)
.如果真结束
CloseHandle (句柄)
只运行一次 = 真
返回 (真)

.子程序 重载变量, , 公开

连续赋值 (0, hProcess, DataAddr, hModule, LoadAddr, GetAddr, FreeAddr)

本文链接:https://www.death-note.cn/notes-41.html 首发于阿信冲鸭,转载复制片段望签名。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档