首页
社区
课程
招聘
[求助][求助] 第四章 代码植入的一个疑问
发表于: 2011-5-19 16:13 5010

[求助][求助] 第四章 代码植入的一个疑问

2011-5-19 16:13
5010
 我是个菜鸟,这个问题弄了一天也没搞明白,希望知道的耽误2分钟帮我看一下,谢谢了。

问题是在书上4.4节的代码植入,通过覆盖返回值,弹出一个MessageBox.

环境 WIN7旗舰版 + VC6.0 默认编译 DEBUG

里面的插入代码 
改了2处,  一处我改成本机的MessageBox内存入口地址 AE FE CB 7D
还有一处 就是最后的覆盖返回地址  返回到数组的起始位置 B8 FA 18 00 .

传不了图,但是我在OLLDBG里面调试的时候,EIP 确实跳到了 0018FAB8 执行了的,每句代码都执行完成.
CPU Disasm
Address   Hex dump              Command                                  Comments
0018FAB8    33DB                  XOR EBX,EBX
0018FABA    53                      PUSH EBX
0018FABB    68 77657374     PUSH 74736577
0018FAC0    68 6661696C     PUSH 6C696166
0018FAC5    8BC4                  MOV EAX,ESP
0018FAC7    53                      PUSH EBX
0018FAC8    50                      PUSH EAX
0018FAC9    50                      PUSH EAX
0018FACA    53                      PUSH EBX
0018FACB    B8 AEFECB7D     MOV EAX,7DCBFEAE
0018FAD0    FFD0                  CALL EAX
0018FAD2    90                       NOP

但是它就是不给跳出一个MessageBox.

虚拟机(WINXP SP2 VC6.0)测试就更奇怪了 ,我把本机的password.txt复制进去,运行,崩溃(应该覆盖了返回地址),然后改前面说的2处地方, 改掉之后,我去OLLDBG看,他就把前面19个字节保存进去了,也就是  B8 AE FE CB 7D FF D0 前面的那些...............根本就没有覆盖到返回地址..我如果又新建一个文本,例如输入0000000000000000000000000000000000000000000000000000000 他又是会崩溃的...我感觉我晕了......

字比较多,说得也比较乱,大家见谅,有知道的一定跟我说下。

还是把C++代码贴上:
#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
#include <conio.h>
#include <windows.h>
#define  PASSWORD "1234567"
int verify_password(char *password)
{
  int temp;
               char buffer[44];  
  temp=strcmp(password,PASSWORD);
  strcpy(buffer,password); // 覆盖掉他
  return temp;
}
int main()
{
  int flag=0;
  char password[1024];
  FILE *fp;
  LoadLibrary("user32.dll");
  if (!(fp=fopen("password.txt","rw+")))
  {
    printf("open file error");
    exit(0);
  }
  fscanf(fp,"%s",password);
  flag=verify_password(password);
    if (flag)
    {
         printf("%s is error\n",password);  
    }
  else
    {
    printf("%s is  OK\n",password);
  //    MessageBoxA(NULL,"A","B",NULL);
  }
  fclose(fp);
                getch();
  return 0;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我虚拟机解决了. 原来的代码被截取了.那个MESSAGE的内存地址 0BD5057D ,最前面的那个0导致的,没搞懂什么原因被截取了,但是结果就是如此.
今天 我换了个MESSAGEBOXEXA(),然后改掉了代码......果然成功了.
可惜本机不知道是不是64位系统的原因,始终无法成功调用函数...
2011-5-20 11:53
0
游客
登录 | 注册 方可回帖
返回
//