首页
社区
课程
招聘
[求助]一个简单的逆向:eek:
发表于: 2008-11-16 18:22 3961

[求助]一个简单的逆向:eek:

2008-11-16 18:22
3961
其他的都还好,就是原题里面
初始化的时候sub esp,0e8h
我的是0040D533 sub         esp,50h,相差152个数呢。
就算把Int全部搞成长整形也没有这个数啊。
0040D53C   mov         ecx,14h
而原题里面的是mov ecx,3ah
怎么都不一样啊,难道是编译器不一样的原因?
敬待高手解惑。



我逆向的代码是楚狂人的《天书夜读》上的一个思考与练习
int myfunction(int a, int b) {
   int d= a + b;
   int i=1;
   int c=0;
   while (c<100) c=c+i;
   switch (c)
   {
   case 0 :
           {
                   d=1;
           }
   case 1 :
           {
                   d=c;break;
           }
   default : d=0;
   }
return d;
}

void main() {
        int a,b;
        a=b=0x8899;
    a=myfunction(a,b);

}

编译过来的汇编的代码
1:    int myfunction(int a, int b) {
0040D530   push        ebp
0040D531   mov         ebp,esp
0040D533   sub         esp,50h
0040D536   push        ebx
0040D537   push        esi
0040D538   push        edi
0040D539   lea         edi,[ebp-50h]
0040D53C   mov         ecx,14h
0040D541   mov         eax,0CCCCCCCCh
0040D546   rep stos    dword ptr [edi]
2:       int d= a + b;
0040D548   mov         eax,dword ptr [ebp+8]
0040D54B   add         eax,dword ptr [ebp+0Ch]
0040D54E   mov         dword ptr [ebp-4],eax
3:       int i=1;
0040D551   mov         dword ptr [ebp-8],1
4:       int c=0;
0040D558   mov         dword ptr [ebp-0Ch],0
5:       while (c<100) c=c+i;
0040D55F   cmp         dword ptr [ebp-0Ch],64h
0040D563   jge         myfunction+40h (0040d570)
0040D565   mov         ecx,dword ptr [ebp-0Ch]
0040D568   add         ecx,dword ptr [ebp-8]
0040D56B   mov         dword ptr [ebp-0Ch],ecx
0040D56E   jmp         myfunction+2Fh (0040d55f)
6:       switch (c)
7:       {
0040D570   mov         edx,dword ptr [ebp-0Ch]
0040D573   mov         dword ptr [ebp-10h],edx
0040D576   cmp         dword ptr [ebp-10h],0
0040D57A   je          myfunction+54h (0040d584)
0040D57C   cmp         dword ptr [ebp-10h],1
0040D580   je          myfunction+5Bh (0040d58b)
0040D582   jmp         myfunction+63h (0040d593)
8:       case 0 :
9:           {
10:              d=1;
0040D584   mov         dword ptr [ebp-4],1
11:          }
12:      case 1 :
13:          {
14:              d=c;break;
0040D58B   mov         eax,dword ptr [ebp-0Ch]
0040D58E   mov         dword ptr [ebp-4],eax
0040D591   jmp         myfunction+6Ah (0040d59a)
15:          }
16:      default : d=0;
0040D593   mov         dword ptr [ebp-4],0
17:      }
18:   return d;
0040D59A   mov         eax,dword ptr [ebp-4]
19:   }
0040D59D   pop         edi
0040D59E   pop         esi
0040D59F   pop         ebx
0040D5A0   mov         esp,ebp
0040D5A2   pop         ebp
0040D5A3   ret

其他的都还好,就是原题里面
初始化的时候sub esp,0e8h
我的是0040D533 sub         esp,50h,相差152个数呢。
就算把Int全部搞成长整形也没有这个数啊。
0040D53C   mov         ecx,14h
而原题里面的是mov ecx,3ah
怎么都不一样啊,难道是编译器不一样的原因?
敬待高手解惑。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶一下。高手轻轻地看一眼吧。
2008-11-17 10:03
0
雪    币: 85
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好像是程序预留的一段空间分配给变量
跟具体代码的关系不是很大,我也不太懂
2008-11-17 11:09
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
4
大致是编译器的缘故,验证这些例题的时候尽量选择相同的编译环境。
vc.net以后面版本的cl.exe 带有security cookie这个功能,就所谓的/GS选项。   
会出现sub esp,n 这个与你的变量大小不同。

估计你的程序就是这出了点小问题。
2008-11-17 23:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢狐狸大大~!
2008-11-18 11:58
0
游客
登录 | 注册 方可回帖
返回
//