精易论坛

标题: 取子程序地址 支持有字节集,自定义数据类型参数,API [打印本页]

作者: 福仔    时间: 2018-7-10 16:13
标题: 取子程序地址 支持有字节集,自定义数据类型参数,API
本帖最后由 福仔 于 2018-7-10 16:17 编辑

总所周知,E在取子程序地址的时候,如果参数中有非基础数据类型,编译时不能通过语法检测
现在弄的这个支持语法检测,因为都是正规的

先说说思路

调用子程序的时候会把返回地址传递到子程序中,[ebp+4] 存放的就是执行完这个子程序后跳转的地址
先执行个子程序,取到返回地址,相当于取到了EIP执行的下一条指令,玩汇编的都知道,EIP存放的总是下一个指令的地址


执行完子程序,取到了EIP的地址,然后就从当前的EIP逐字节遍历,遇到call (字节"E8") 的时候就是调用子程序了
E在编译后,返回() 后面的代码一样会编译出去,其他语言不知道,没看过
然后利用返回,不执行子程序,并且还能计算子程序地址


计算子程序地址大概是这么实现

把EIP存放到EAX里,EIP不能直接访问,只能执行一个子程序后取[EBP+4]
EAX自增1,逐字节遍历
把[EAX] 存放到ECX
如果ECX的低8位,CL = E8 就是走到call的位置了
此时,EAX存放的就是调用这个子程序的指令地址,对应的指令应该是   CALL XXXX
call占一个字节,后面跟着偏移
把[EAX+1] 存到ECX,此时ECX记录的是偏移
在计算一下子程序的实际地址 LEA EAX, [EAX+ECX+5] EAX是 call XXXX 指令的位置 call XXX 占5个字节,计算出偏移后取他的地址
取到的地址就是子程序的实际地址
语言表达能力不足,懂的还是看汇编代码吧


mov eax,[ebp+4]
loop1:
inc eax
mov ecx,dword ptr ds:[eax]
cmp cl,0E8h
jnz loop1


mov ecx,dword ptr ds:[eax+1]
lea ebx,dword ptr ds:[eax+ecx+5]
mov eax,ebx
leave
ret 4








取带字节集参数的子程序地址,带自定义数据类型的地址,这些都没问题,也都能正常调用
现在还不支持数组参数,有空在去看看吧

取子程序地址.e (8.14 KB, 下载次数: 222)



作者: DDSGXQ    时间: 2018-7-10 16:43
不错不错,可能要加精了
作者: duxiu    时间: 2018-7-10 18:38
看看     学习
作者: xml696900    时间: 2018-7-10 21:10
mark 楼主是否在搞一个取子程序汇编代码长度 或者提供一下思路
作者: 福仔    时间: 2018-7-10 21:39
xml696900 发表于 2018-7-10 21:10
mark 楼主是否在搞一个取子程序汇编代码长度 或者提供一下思路

不搞,搞这个没人看的,搞这些越是深入,越是没人看,因为都看不懂
思路的话,大概就是取到子程序的真实地址
然后寻找
mov esp,ebp
pop ebp
retn

寻找这几个,这几个一般都在子程序的最后找到这几个位置减去子程序开始位置,就是子程序的长度了
不过子程序里调用 其他子程序的话,就深入去查找 call 吧
总之就是  子程序的结尾 - 子程序的开始
作者: 呵呵仙    时间: 2018-7-11 00:13
谢谢福仔大神分享!睡了,晚安!!
作者: LBrowser    时间: 2018-7-13 20:59
支持楼主支持             
作者: 红桃软件定制    时间: 2018-7-20 18:12
感谢发布原创作品,精易因你更精彩!
作者: 安静?高冷?    时间: 2018-11-13 04:38
路过路过,感谢分享
作者: qmdqaq    时间: 2018-11-18 11:10
学习了
作者: dljy    时间: 2019-1-10 02:21
学习了:::::
作者: 1515130599    时间: 2019-1-15 22:57
  真厉害  我现在很多汇编语句也整不明白, 但是看到这个 发现自己特别需要这个 很棒 这个应该拿去参加开源大赛的
作者: 网络注册络员    时间: 2019-10-14 15:54
大神

作者: 莫泽才    时间: 2020-5-29 09:40
感谢分享,很给力!~
作者: yiyi111122    时间: 2020-7-12 14:00
感谢分享,很给力!~
作者: 学习中123    时间: 2021-5-11 13:53

感谢分享,很给力!~
作者: 点点丶滴滴    时间: 2021-5-12 05:50
谢谢大佬分享 支持支持
作者: quary888    时间: 2021-9-10 22:58
真的屌炸天了  
作者: futiem    时间: 2025-3-8 18:09
带自定义数据类型的地址,这些都没问题,也都能正常调用




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