《黑客免杀攻防》 软件逆向工程1-3

1程序从哪里开始运行?寻找main

显著特征:有3个参数,后两个参数都是指针(4字节),在退出代码附近。


A字符串搜索法

搜索Helloworld 哈

然后逐步上翻


B栈回溯法

观察栈中的“返回到”


C逐步分析法

从代码开始分层次寻找。


2简单的例子

ESP是栈指针,[ESP+4]的意思是在当前堆栈+4的地方取其内容。


3函数识别初探

A主程序在调用函数时:

a保存返回地址并传递给函数

b参数传入与栈平衡


B函数调用约定

调用约定关键字参数入栈顺序回收堆栈
C规范_cdecl从右到左调用者负责
Pascal规范pascal从左到右被调用者负责
快速调用规范_fastcall从右到左,使用寄存器传参被调用者负责
标准调用规范_stdcall从右到左被调用者负责
注:Pascal规范在VC++ 5.X后不再被支持。据说很少接触。

采用快速调用的函数参数是由ecx与edx这两个寄存器完成的,而超出部分的参数则依然要使用传统的压栈方式传递。


总结:

a几乎全部函数调用方式都会用栈来传递参数,只有使用快速调用约定后且参数少于等于2时才会全部采用寄存器传参。

b函数起始部分:以push ebp和mov ebp,esp汇编指令开始

c每个函数由call指令调用,且以retn指令结尾。

d裸函数来进行内联汇编可以改变以上的某些规律。

注:裸函数是指编译器生成汇编代码时不添加任何额外的指令,包括retn。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值