反汇编初了解

一个简单的“HELLO WORLD”反汇编代码量仍然是相当惊人的,而且没有必要分析程序的每一个语句,因此应把关注点放在值得关注的地方,例如:分支判断处,所以分析程序第一步是找到关键代码。

常用方法是:

1、对关键的API下断点,一般找到如GetWindowText之类的API就能直接定位到输入key在内存中的位置

2、搜索程序中字符串(提示成功或者失败的字符串),一般会定位到判断key是否正确的条件分支处。

3、在内存中搜索输入的key,用内存断点定位访问key的代码、

接下来对关键代码的分析最困难,只有多练

但是,C语言中的一条语句翻译成反汇编往往是若干条,并且翻译是模块化的,因此反汇编代码中有很多确定的形式。

例如:

push 0

push 1

push 2

call xxx

这是调用函数的语句,这需要了解各种调用约定。

push edp

mov edp, esp

这是用来保护堆栈的,常出现在函数开头,后面也会跟着许多push用来保护寄存器。

label:

cmp ecx, 10

je xxx

inc ecx

jmp label

这是一个经典的循环语句,也会有很多其他形式。

test eax, eax / cmp eax, ecx

je/jz xxx

push xxx

call xxx

判断条件后调用函数,一般属于比较关键的语句。

除上面所说之外,不同的语言,不同的编译器生成的代码风格也不同。

如果代码出现上面提到的

push ebp

push edp, esp

那么这个程序很可能是C语言写的。

对于字符串,若字符串是 db "123", '\0'这种形式,一般是C/C++

而像db 3, "123"这种形式的更可能是Delphi

动态调试一大好处是能开到堆栈中的内容,但也不是必要的

用IDA的话,F5

简单的逆向工程可以使用IDA+Hex-Rays插件,可以之间将汇编还原成C,只是看上去比较怪


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值