【逆向入门】 CrackMe160-003 分析思路

本文详细解析了CrackMe160-003的爆破思路,重点介绍了浮点数序列的生成过程,包括汇编指令如fld、fdiv在浮点数运算中的应用。同时,讲解了去除NAG的方法,通过改变程序入口点附近的字节顺序来调整程序执行顺序,从而消除启动时的NAG窗口。整个过程结合实例进行说明,帮助读者理解逆向工程的基本技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CrackMe160-003

爆破思路

输入字符会报错哦,并不是电脑环境的问题

同001、002,这里不做介绍

序列生成

因为是第一次遇到浮点数相关的,以前对这些知识的了解比较少,所以在流程中会夹杂一些基础知识

img

基本思路002也讲过了,都是首先找到输入的Name产生的最终Serial,然后一步步分析是怎么产生的就可以了

这里我输入的是1111,而最终产生的可以通过一步步执行得到是1066822,下面介绍是如何得到的

img

这里还是和002一样,首先获取长度,然后长度*15B38,再加上首字母的ANSI值,最后转换成十进制355601

然后这里就涉及到浮点了,首先有个概念,在汇编指令中和浮点有关的指令基本上都是f开头,像这里fld、fdiv之类的

img

最基本的几个浮点指令fld(入栈)、fstp(出栈),类似于push、pop

不过呢,这个入的栈可不是ss

img

入的是右边的st(x)

这个st就是一个专门给浮点数(float)用的栈,其他的和正常的栈一样,都是从上往下压栈,右边显示的是十进制

img

这里fdiv就是浮点数除法,我们可以查看这个dword(双字32位)的值是多少,鼠标右键浮点->浮点(32位)

img

这里显示的都是有符号的十进制数

所以4082FE这条指令的意思是st(0)/5,可以看到st(0)是10,所以就是10/5,结果为2,存入目的操作数,也就是st(0),所以st(0)就变成2了

img

后面陆续还有几个操作,这里只放图不说明了

img

img

img

最后这个就可以得到1066822

img

搞定!

去除NAG

NAG是烦人的意思,这里指一些因为未付费或者未破解的一些弹窗或者开屏广告之类的

关于这个NAG的去除,我查看了一些师傅的介绍,并没有一个容易弄明白的原理性的教程,只是晕晕乎乎学了一个4C法则,因为只学到了皮毛所以这里也只好总结个皮毛

首先来到程序入口点(注意是程序领空不是系统领空,x64bug模块名应该要是主程序的名字)

以下是师傅的原文:(师傅使用的是ollydbg,所以会显示的有些不同)

VB程序有个特点:入口点处都是一个PUSH指令,然后一个CALL指令,看JMP 后面跟的MSVBVM50,应该是VB5.0编写的。(如果不是这种情况的话,那么该程序可能被加过壳), PUSH将要压入堆栈的是004067D4,现在我们在数据窗口中定位到这个地址。显示上图:

img

现在就要用至4C了,也就是从当前定位的地址往后偏移4C,数据窗口CRTL+G(你也可以用鼠标点),输入4067d4+4c,显示如下:

img

数据窗口继续跟踪:00406820处的DWORD值,00406868,内容如下:

选中这个dword,右键跟随

img

img

这里我们可以看到两块类似的数据,每块50(十六进制)个字节的长度,每块数据的第24(十六进制)个字节处都有一个标志(第一个是01,第二个是00)。该标志指定了每块代码(也就是程序启动后要加载的窗体)出现的顺序,先加载00,也就是我们要去的NAG窗口,再加载01,是主窗口。所以这里我们将各两个标志的值颠倒一下,01改00,00改01,二进制修改,保存文件,运行测试,NAG窗口去除了。

不知为何,我这里的顺序和师傅是反过来的,不过颠倒一下也可以了

这个00和01是执行顺序,只要颠倒了开头的NAG就到程序执行完之后去了,但是程序执行完是在我们点叉叉的时候,所以这个NAG就不会显示啦

可以保存试试看(x64选择补丁文件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值