精易论坛

标题: 【蠢新学汇编】截取 子程序代码 字节集片段 [打印本页]

作者: 笨来无一悟    时间: 2024-8-13 18:32
标题: 【蠢新学汇编】截取 子程序代码 字节集片段
本帖最后由 笨来无一悟 于 2024-8-13 19:58 编辑

调试输出(截取代码 (到整数 (&子程序1)))

为什么用到整数?
因为参数是字节集或者自定义类型的时候需要一些骚操作才能取出指针 通常是整数 然后 子程序指针到整数 比 整数到子程序指针 顺手

具体有什么用?


我是拿来看看怎么样用自己手写的汇编结合易语言生成的汇编 优化运行效率 或者解决一些正常途径不好解决的问题
  
子程序名返回值类型公开备 注
截取代码字节集 
参数名类 型参考可空数组备 注
截取地址整数型
变量名类 型静态数组备 注
截取长度整数型 
包装函数逻辑型 
截取长度 = 0
包装函数 = 假
置入代码 ({ 81, 82, 83 })
置入代码 ({ 49, 192, 185, 85, 0, 0, 0, 139, 69, 8, 138, 0, 15, 182, 192, 41, 193, 137, 77, 248 })
如果真 (包装函数)
置入代码 ({ 139, 77, 8, 65, 138, 1, 60, 232, 117, 249, 139, 65, 1, 141, 92, 1, 5, 137, 93, 8 })
置入代码 ({ 139, 77, 8, 65, 128, 57, 139, 117, 250, 128, 121, 1, 229, 117, 244, 128, 121, 2, 93, 117, 238, 128, 121, 3, 194, 117, 232, 49, 210, 49, 192, 138, 65, 4, 187, 4, 0, 0, 0, 247, 243, 131, 250, 0, 117, 213 })
置入代码 ({ 43, 77, 8, 131, 193, 6, 137, 77, 252 })
置入代码 ({ 91, 90, 89 })
返回 (指针到字节集 (截取地址, 截取长度))
不兼容 无参数 RET 不兼容 LEAVE 易语言自动生成的格式为 MOV ESP,EBP ; POP EBP
需要全兼容的可以自行扩充判断分支 寻找 {201} 紧跟 {194} 再后面的字节转整数可以被4整除 leave方便 代价是特征码更容易被误判
  
子程序名返回值类型公开备 注
截取代码字节集 
参数名类 型参考可空数组备 注
截取地址整数型
变量名类 型静态数组备 注
截取长度整数型 
包装函数逻辑型 
截取长度 = 0
包装函数 = 假
置入代码 ({ 81, 82, 83 })
' PUSH ECX
' PUSH EDX
' PUSH EBX
置入代码 ({ 49, 192, 185, 85, 0, 0, 0, 139, 69, 8, 138, 0, 15, 182, 192, 41, 193, 137, 77, 248 })
' XOR EAX,EAX
' MOV ECX,85
' MOV EAX ,DWORD [EBP+8]
' MOV AL ,BYTE [EAX]
' MOVZX EAX, AL
' SUB ECX,EAX
' MOV DWORD [EBP-8],ECX
如果真 (包装函数)
置入代码 ({ 139, 77, 8, 65, 138, 1, 60, 232, 117, 249, 139, 65, 1, 141, 92, 1, 5, 137, 93, 8 })
' MOV ECX,DWORD [EBP+8]
' 入口:
' INC ECX
' MOV AL,BYTE [ECX]
' CMP AL,232
' JNE 入口
' MOV EAX,DWORD [ECX+1]
' LEA EBX,DWORD [ECX+EAX+5]
' MOV DWORD [EBP+8],EBX
置入代码 ({ 139, 77, 8, 65, 128, 57, 139, 117, 250, 128, 121, 1, 229, 117, 244, 128, 121, 2, 93, 117, 238, 128, 121, 3, 194, 117, 232, 49, 210, 49, 192, 138, 65, 4, 187, 4, 0, 0, 0, 247, 243, 131, 250, 0, 117, 213 })
' MOV ECX,DWORD [EBP+8]
' 出口:
' INC ECX
' CMP BYTE [ECX],139
' JNE 出口
' CMP BYTE [ECX+1],229
' JNE 出口
' CMP BYTE [ECX+2],93
' JNE 出口
' CMP BYTE [ECX+3],194
' JNE 出口
' XOR EDX,EDX
' XOR EAX,EAX
' MOV AL,BYTE [ECX+4]
' MOV EBX,4
' DIV EBX
' CMP EDX,0
' JNE 出口
置入代码 ({ 43, 77, 8, 131, 193, 6, 137, 77, 252 })
' SUB ECX,DWORD [EBP+8]
' ADD ECX,6
' MOV DWORD [EBP-4],ECX
置入代码 ({ 91, 90, 89 })
' POP EBX
' POP EDX
' POP ECX
返回 (指针到字节集 (截取地址, 截取长度))








作者: 龙傲天f    时间: 2024-8-13 19:03
火钳刘明
作者: 神一样的人猫腻    时间: 2024-8-13 20:37
火钳刘明
作者: 7ian    时间: 2024-8-13 20:48
既然这样,把整数型改成 通用型,这样无论哪种子程序都可以用
作者: myxy1022    时间: 2024-8-13 20:49
感谢分享,这个啥作用,什么用处没看懂
作者: ttggnn    时间: 2024-8-13 21:14

支持开源~!感谢分享
作者: 艾玛克138    时间: 2024-8-13 21:25
感谢老大,太好了
作者: 陆小白    时间: 2024-8-13 22:00

感谢分享
作者: xue9528    时间: 2024-8-13 22:06
感谢分享
作者: 书希    时间: 2024-8-13 22:37
感谢分享,很给力!~
作者: xyh3526    时间: 2024-8-13 23:17
感谢老大,太好了
作者: 查过    时间: 2024-8-14 07:48
感谢分享,很给力!~
作者: 豆豆灰常开心    时间: 2024-8-14 07:53
下个学习一下
作者: year1970    时间: 2024-8-14 07:55
感谢分享
作者: kyo9766    时间: 2024-8-14 08:26
直接贴代码,好评的啊,感谢分享
作者: renhe2018    时间: 2024-8-14 08:32
比较厉害的代码段啊。
作者: baitso    时间: 2024-8-14 09:11
支持开源~!感谢分享
作者: 一指温柔    时间: 2024-8-14 09:19
支持开源~!感谢分享
作者: 396384183    时间: 2024-8-14 10:12
感谢分享,很给力!~
作者: 光影魔术    时间: 2024-8-14 13:11
感谢分享源码
作者: jtucar    时间: 2024-8-14 16:29
支持开源~!感谢分享
作者: ctry78985    时间: 2024-8-20 07:34
感谢分享
作者: 熊不熊    时间: 2024-12-4 18:39
感谢分享,很给力!~
作者: 萧楚楠    时间: 2025-2-24 03:11
老师这个截取地址怎么填
作者: 萧楚楠    时间: 2025-2-24 03:41
老师,那这俩个功能一样,用哪个好?
作者: 萧楚楠    时间: 2025-2-24 03:45
哈哈哈,太困了眼花了,谢谢老师
作者: 萧楚楠    时间: 2025-2-24 03:51
太牛*了卧* 这啥原理阿老师,你研究的太透彻了!
作者: 萧楚楠    时间: 2025-2-24 15:42
太高深了,是匹配出入口然后取的吗老师,我根本看不懂一点,到现在还在研究你昨天讲的整数型数组的内存对齐呢
作者: 萧楚楠    时间: 2025-2-24 15:44
太厉害了,老师那子程序指针是什么?是程序的入口地址吗?
作者: 笨来无一悟    时间: 2025-2-24 16:12
萧楚楠 发表于 2025-2-24 15:44
太厉害了,老师那子程序指针是什么?是程序的入口地址吗?

真实地址里面就可以看见 正真的子程序汇编代码了 mov eax, 0x000000A8 把168赋值给eax 对上了

真实地址.png (54.03 KB, 下载次数: 0)

真实地址.png

子程序指针外面套了一层.png (48.38 KB, 下载次数: 0)

子程序指针外面套了一层.png

作者: 萧楚楠    时间: 2025-2-24 16:12
没看懂,我细细理解,谢谢老师
作者: 萧楚楠    时间: 2025-2-24 16:30
我就是纳闷为什么要在地址上+4  那不就从第五个开始读了嘛,前四个字节用来干嘛?
作者: 萧楚楠    时间: 2025-2-24 19:41
明白了恩师,来交个笔记
  
子程序名返回值类型公开备 注
_取数组地址整数型 
参数名类 型参考可空数组备 注
数组整数型
置入代码 ({ 139, 69, 8, 139, 0 })
返回(0)
' __asm{
' ; mov eax, [ebp+8]
' ; mov eax, [eax]
' }
' 当数组为{4,5,6}
'  这个程序得到的地址是A
'  A 到 A+ 12这个内存地址里面的数据是
'  {1,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0}
'  也就是
' {1,0,0,0}表示数组的维度
' {3,0,0,0}表示数组的成员数
' 其余的依次表示数据


作者: 笨来无一悟    时间: 2025-2-24 19:48
本帖最后由 笨来无一悟 于 2025-2-24 19:49 编辑
萧楚楠 发表于 2025-2-24 19:41
明白了恩师,来交个笔记
  
[backcolor=rgb (255, 255, 255)]数组维度这样取的 你取的是指针 还需要指针到整数才是维度[/backcolor]{:6_431:}[/quote]
[e=4].版本 2
子程序名返回值类型公开备 注
数组维度整数型 
参数名类 型参考可空数组备 注
整数数组整数型可以改成通用型
' __asm{
' mov eax,[ebp+8]
' mov eax,[eax]
' mov eax,[eax]
' leave
' ret 4
' }
返回 (0)



作者: 萧楚楠    时间: 2025-2-24 20:16
笨来无一悟 发表于 2025-2-24 19:48
[e=4].版本 2

.子程序 数组维度, 整数型

明白!谢谢恩师!
作者: 笨来无一悟    时间: 2025-4-1 04:58
移步→ 【蠢新学汇编】截取 子程序代码 字节集片段 终版

https://125.confly.eu.org/forum.php?mod=viewthread&tid=14852400








欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4