首页
社区
课程
招聘
[旧帖] [讨论]有段代码没有明白为什么要那么奇怪 0.00雪花
发表于: 2011-1-27 22:54 1124

[旧帖] [讨论]有段代码没有明白为什么要那么奇怪 0.00雪花

2011-1-27 22:54
1124
0055DBD5    68 FFDB5500     PUSH 0055DBFF                ;压入RET返回地址,让下面的RETN作JMP用
0055DBDA    8D45 D4         LEA EAX,DWORD PTR SS:[EBP-2C]
0055DBDD    BA 05000000     MOV EDX,5
0055DBE2    E8 9D6AEAFF     CALL 00404684
0055DBE7    8D45 F4         LEA EAX,DWORD PTR SS:[EBP-C]
0055DBEA    E8 716AEAFF     CALL 00404660
0055DBEF    8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
0055DBF2    E8 696AEAFF     CALL 00404660
0055DBF7    C3              RETN                        ;RET 作JMP
///// 跳过下面段
/////在前面的出现过压栈指令 PUSH 0055DBF8
                0055DBF8  ^ E9 C763EAFF     JMP 00403FC4
                0055DBFD  ^ EB DB           JMP SHORT 0055DBDA
/////////从这里继续
0055DBFF    5F              POP EDI
0055DC00    5E              POP ESI
0055DC01    5B              POP EBX
0055DC02    8BE5            MOV ESP,EBP
0055DC04    5D              POP EBP
0055DC05    C3              RETN

用OD跟踪游戏的一个CALL,上面这段代码片断,
代码中间夹着数据,
数据区的首址在前面被压入栈,调用了几个CALL,
然后执行到第一个RETN不直接返调用处的下一句
而是JMP数据区执行一小段代码才返回
为什么要这么编写,不明白

该游戏原程序是用Delphi编写的,上述情况是编译器就是这样编译的,还是作者有意防静态分析而故意这么写的,程序中有非常多的地方是类似的代码,
程序加有壳UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
能脱壳,但脱壳后就不能连接服务器,调试是在带壳情况下进行的
刚开始玩,什么经验都没有,请高手指点下

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Delphi源代码
procedure TForm1.Button1Click(Sender: TObject);
var
  s1:string;
  s2:string;
  s3:string;
begin
   s1:='1234';
   s2:='5678';
   s3:=s1+s2;
end;

反汇编代码
0044D944  /.  55            PUSH EBP                                 ;  =0012F76C
0044D945  |.  8BEC          MOV EBP,ESP                              ;  =0012F62C

; s1:string;
0044D947  |.  6A 00         PUSH 0                                   ;  变量S1
; s2:string;
0044D949  |.  6A 00         PUSH 0                                   ;  变量S2
; s3:string;
0044D94B  |.  6A 00         PUSH 0                                   ;  变量S3
*************编译器加的代码***************************************************************
*        0044D94D  |.  33C0          XOR EAX,EAX
*        0044D94F  |.  55            PUSH EBP                                 ;  =0012F62C
*        0044D950  |.  68 9ED94400   PUSH Project1.0044D99E                   ;  =44D99E
*        0044D955  |.  64:FF30       PUSH DWORD PTR FS:[EAX]                  ;  =12F95C
*        0044D958  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
******************************************************************************************
0044D95B  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]             ;  0012F628
0044D95E  |.  BA B4D94400   MOV EDX,Project1.0044D9B4                ;  0044D9B4=ASCII "1234"
;s1:='1234';
0044D963  |.  E8 4065FBFF   CALL Project1.00403EA8                   ;  [12F628]=44D9B4 字串指针
0044D968  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]             ;  0012F624
;s2:='5678';
0044D96B  |.  BA C4D94400   MOV EDX,Project1.0044D9C4                ;  ASCII "5678"
0044D970  |.  E8 3365FBFF   CALL Project1.00403EA8
;s3:=s1+s2;
0044D975  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
0044D978  |.  8B4D F8       MOV ECX,DWORD PTR SS:[EBP-8]
0044D97B  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
0044D97E  |.  E8 9967FBFF   CALL Project1.0040411C                   ;  S3=S1+S2
*************编译器加的代码***************************************************************
*        0044D983  |.  33C0          XOR EAX,EAX
*        0044D985  |.  5A            POP EDX                                  ;  0012F95C
*        0044D986  |.  59            POP ECX                                  ;  44D99E
*        0044D987  |.  59            POP ECX                                  ;  12F62C
*        0044D988  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX               ;  0012F95C
*        0044D98B  |.  68 A5D94400   PUSH Project1.0044D9A5                   ;  44D9A5
*        0044D990  |>  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]             ;  0012F620
*        0044D993  |.  BA 03000000   MOV EDX,3
*        0044D998  |.  E8 9764FBFF   CALL Project1.00403E34                   ;  堆栈S1,S2,S2清0
*        0044D99D  \.  C3            RETN
*        0044D99E   .^ E9 715EFBFF   JMP Project1.00403814
*        0044D9A3   .^ EB EB         JMP SHORT Project1.0044D990
******************************************************************************************
0044D9A5   .  8BE5          MOV ESP,EBP
0044D9A7   .  5D            POP EBP                                  ;  =0012F76C
0044D9A8   .  C3            RETN
2011-1-29 22:33
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
网上找到了答案
但还是没搞清原理
2011-1-31 22:54
0
游客
登录 | 注册 方可回帖
返回
//