逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

时间:2023-12-09 20:57:19

上一篇:逆向---02.je & jmp & jnz 、OD调试

基础知识:(栗子中也会说的)栗子:链接: https://pan.baidu.com/s/1qZbbTvQ 密码: ifup

1.寄存器的知识:(C里面的一些基础,一般用32位的比较多)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

2.关于运行后搜索中文字符串的说明:没壳怎么都行,有时候有壳不一定要脱壳再OD调试,直接带壳破解也是可以的(下节课说下带壳用中文搜索)

3.快速找跳转的技巧,右击来自xxx的跳转,转到xxx

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

4.寄存器窗口看不见了,点击寄存器窗口的内容部分(不松手),右拉

5.关于程序不知道执行到哪或者调试过程中误操作的说明双击EIP回到当前执行到的代码处

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

6.汇编中比较命令cmp&test:cmp属于加减运算的范畴,而test属于逻辑运算的范畴

7.调试快捷键扩充:F2下断点,F7进Call,F8单步,F9运行,Shift+F9 忽略异常运行(后面有案例),ALT+F9 从系统领空返回到程序领空(后面会说)

8.关键跳说明:跳过了成功到达了失败,反之亦可

9.关键Call举例说明:Call类似于方法,比如这个地方,直接该je跳转了,那么这个条件判断算pass了,但可能还有千千万万的判断,如果改了关键call就一劳永逸了

(举个栗子:登录验证,有些页面必须登录才能进入,你只改那个页面的判断,那么那个页面可以进了,其他页面呢?要是直接pass掉登录验证,那什么页面不能进?)

之前说过了nop,je,jnz,jmp之类的,这次说下mov 赋值指令,这几个基本上是最常见的指令了。下篇文章起就有点难度了,这次栗子就详细演示一下,也算是对前2课来个复习

OD载入程序(发送到OD,直接拖到OD窗口都可以),F9运行

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

1.自己摸索摸索软件,发现了有个提示,我们就以 “注册” 当做关键词,来中文搜索一下

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

2.右击反汇编窗口,中文搜索

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

3.搜索一下,Ctrl+F

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

搜注册的时候发现了这个

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

4.关键跳出现了,F2下个断(下面我们来用之前讲的方法来爆破这个程序)【关键跳:跳过了成功或者失败的跳】

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

4.快速找跳转的技巧,右击来自xxx的跳转,转到xxx

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

5.我们继续点注册的时候发现~~断下来了

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

6.你决定怎么跳转,之前讲过je,jnz,jmp,nop和Z标志位

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧(还是复习一下抽象图吧)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

这边是调试,我们就先该Z标志位(至少得知道结果是不是才去修改啊,不然改一大堆不是白改了?说不定还把程序搞塌了)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

7.F8单步跟踪看看,发现的确是我们想要的(重启验证之类的回头再详细说)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

8.重复上面步骤,到断点处,修改下指令,nop也行,我这边就用jnz了(推荐新手用Nop

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

好处不多说,编过程序的应该知道,乱nop会引发一下不必要的异常(当然了,一般情况下没问题的)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧(比如这个,瞎Nop可能就让程序业务逻辑乱套了,出现异常也就很正常了)

9.任意选定一些行数,包含你修改的行就行,复制到可执行程序,选择(所以修改也行,毕竟我们也没修改其他东西)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

10.到了一个其他窗口,不用管它,右击保存文件

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

12.运行破解版程序

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

13.按照以往情况肯定已经破解了,但是这个程序不行,我们继续来一遍,点<<重新载入

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

运行》中文搜索关键词“注册”》关键Call处下断(一般都是关键跳的上面一个Call),点注册按钮

Call类似于方法,比如这个地方,直接该je跳转了,那么这个条件判断算pass了,但可能还有千千万万的判断,如果改了关键call就一劳永逸了

(举个栗子:登录验证,有些页面必须登录才能进入,你只改那个页面的判断,那么那个页面可以进了,其他页面呢?要是直接pass掉登录验证,那什么页面不能进?)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

test al,al 比较上面Call的返回值,je根据上面比较的返回值来决定跳与不跳,来一个Gif的演示(注意,修改寄存器窗口的值不能保存,这边只是用来调试用的)

AL是EAX的低位(看GIF的时候,可以直接看看Z标志位,1则红箭头,je跳,EAX这时候是0,Z为0,EAX这时候是1)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

知道了关键,下面我们来修改汇编代码,进Call按F7或者逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

点注册,在Call断下的时候我们F7进Call,修改一下Call的内容:mov al,1 (手动给al赋值)retn 返回 

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

15.保存一下所有修改

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

打开Crack文件,发现不弹框了==》重启验证被灭了

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

看看注册内容,我们啥也没写,一样注册成功(以后要是写注册码之类的,可以写诸如11111111,2222222等等,调试的时候方便看见)

逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧