06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx

上传人:b****6 文档编号:7692685 上传时间:2023-05-11 格式:DOCX 页数:9 大小:335.50KB
下载 相关 举报
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第1页
第1页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第2页
第2页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第3页
第3页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第4页
第4页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第5页
第5页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第6页
第6页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第7页
第7页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第8页
第8页 / 共9页
06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx

《06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx》由会员分享,可在线阅读,更多相关《06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx(9页珍藏版)》请在冰点文库上搜索。

06授人以鱼不如授人以渔CALL的调用 找CALL篇四.docx

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的错误.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2