06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx
- 文档编号:11627055
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:9
- 大小:335.50KB
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx
《06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx》由会员分享,可在线阅读,更多相关《06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx(9页珍藏版)》请在冰豆网上搜索。
06授人以鱼不如授人以渔CALL的调用找CALL篇四
06授人以鱼不如授人以渔●(CALL的调用找CALL篇四)
目标:
还是那个模拟器
今天我加了封包加密,如图下.看看代码有什么变化,并且调用加密和发送CALL
老套路,用OD加载模拟器,返回6层到发送封包
我们对比上次找的 发现多了一个CALL 这个应该就是封包加密()了
我们直接到那个CALL看看
将上面那个CALL所得到的完整封包从出栈到EAX
将封包指针地址存放到[ebp-4] 也就是说第二个堆栈地址(12F5B8)
*这里[EBP-4]为什么会等于堆栈地址12F5B8呢?
因为这里在一开始就给 EBP赋值了ESP堆栈指针 所以说给EBP赋值也就是给堆栈赋值.
将[EBP-4]的指针地址压入堆栈
压入堆栈后堆栈的变化如上
加密CALL后返回加密后的封包数据 并把封包数据的指针放在EAX里
我们查看下EAX的值跟封包助手截包的封包内容
在下面那个就是客户.发送数据()了
====================汇编分析=======
00404916 58 pop eax
00404917 8945FC mov dwordptr[ebp-4],eax
0040491A 8D45FC lea eax,dwordptr[ebp-4]
0040491D 50 push eax
0040491E E85E000000 call 00404981 00404923 8945F8 mov dwordptr[ebp-8],eax
====================粗略分析=======
第一行弹出的是组合后的封包数据."jx50"
第二行把封包压入第二个堆栈地址
第三行把地址放入EAX里
第四行压入堆栈
第五行CALL
第六行把加密后的封包放入第二个堆栈里
====================详细分析========
pop eax
在这里我们直接把封包 写入内存然后赋值给EAX
所以我们打开CE 找到一个空白内存把类型改成文本 值为jx50
moveax,地址
mov dwordptr[ebp-4],eax
这里的EBP 等于ESP(为什么等于ESP因为在子程序头部,程序把ESP值赋给了EBP)所以我们必须
也这样写上.
movebp,esp
*如果程序还需要原有的EBP值那么就要把EBP压入堆栈,保存原有的EBP值然后在还原
*这里因为不需要所以我们没写如果想写也不会有问题不过记得最后POP出来
*这里有些朋友可能会好奇,为什么不给ESP赋值?
*因为ESP永远指向堆栈栈顶,如果一改的话,堆栈就不会平衡,程序就会出错.
mov dwordptr[ebp-4],eax
这里因为我们已经赋值了EBP的值所以可以直接写
mov[ebp-4],eax
lea eax,dwordptr[ebp-4]
这里也一样 lea作用跟MOV差不多不过MOV不能用减号
leaeax,[ebp-4]
push eax
这里EAX的值已经有了所以直接
PUSHeax
然后
call 00404981
最后我们要把EAX的值保存到另外一个空白的地方
用CE找一个空白的地方
movebx,地址
mov[ebx],eax
这样就取出来了
最后做堆栈平衡
我们压入了一个堆栈
那么
addesp,4
===========================CALL的结果=======
CE里第一个是封包的内容
第二个是加密后返回的封包内容指针地址
第三个是指针地址里封包的数据.用字节集查看
在这里我们发现出来的加密封包跟我们之前的封包不一样看来是哪里弄错了.先不管他
我们继续把 发送数据的封包也写出来
=========================汇编分析========
00404923 8945F8 mov dwordptr[ebp-8],eax
00404926 6804000080 push 80000004
0040492B 6A00 push 0
0040492D 8B45F8 mov eax,dwordptr[ebp-8]
00404930 85C0 test eax,eax
00404932 7505 jnz short00404939
00404934 B8D8314000 mov eax,004031D8
00404939 50 push eax ;要发送的数据
0040493A 6825000100 push 10025
0040493F 6808000116 push 16010008
00404944 6801000152 push 52010001
00404949 6802000000 push 2
0040494E BBE0060000 mov ebx,6E0
00404953 E87C1E0000 call 004067D4 ;客户1.发送数据()
00404958 83C41C add esp,1C
======================================
第一行把加密后的封包指针地址放入堆栈里
第二行push 80000004
第三行 push 0
第四行mov eax,dwordptr[ebp-8] 把堆栈的指针地址放到EAX里(真会折腾~)
然后对比跳转
push eax //要发送的数据
push 10025
push 16010008
push 52010001
push 2上面的就不分析了全是压入堆栈
movebx,6e0
call4067d4
然后就是堆栈平衡
addesp,1c
这里为什么要把ESP加上1C呢?
压入一个堆栈需要4个字节
而上面压入了7个所以是7*4=28=1c
所以要加上1C来平衡堆栈
好了我们来整理下
在OD里下bpsend
然后CALL这段汇编
好了到这里我们已经成功的调用了加密封包子程序和客户.发送数据()
当然了前面还是有点问题,加密出来的东西不是我们想要的.这里的错误就当成作业了.
作业:
跟踪并修改第一个CALL的错误.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 06授人以鱼不如授人以渔CALL的调用 找CALL篇四 06 不如 CALL 调用