crackme-系列之-crackme3

admin 2022年1月6日01:09:02安全博客评论16 views1332字阅读4分26秒阅读模式

首先打开程序进行查看

image-20201228160158599

发现存在一个neg窗口

去除neg窗口

方法一

使用VBExploere把timer改为1 破解neg

根据提示框下断点进行分析

方法二

首先将内存定位到程序开始处0x401000

image-20201228160748180

搜索Timer,Timer是VB程序默认的定时器变量

image-20201228160816008

我们找到Timer之后 在上面的位置可以看到一个0x1B58,这个是计时器的秒数。也就是十进制的7000,7000毫秒就 是7秒。所以第一种去Neg的方法就是将0x1B58改为0x0001 但是此种方法也有一定的局限性,如果程序的作者将计时器的默认名称改掉之后 根本无法在内存中搜索到Timer关键 字 也就无法下手。下面介绍一种通用的解决方法

方法三

Virtual Basic可执行程序结构研究 对于Visual Basic5/6编译生成的程序,不管自然编译还是伪编译,其程序入口点处的结构都是一样的。来到OEP处:

image-20201228161030007

指针0x4067D4指向的结构就是Virtual Basic程序的VBHeader结构,由此伸展开,整个VB程序的框架就在这了。 Virtual Basic程序框架结构

可能的Virtual Basic程序框架结构如图

image-20201228161100147

TVBHeader结构定义

image-20201228161129407

image-20201228161203921

AGUTTable(4C的位置)结构定义

以AfkayAs.2.exe为例说明:

image-20201228161225305

其对应每个字节的含义如下表

image-20201228161314880

4C法实战

在程序载入到入口点之后的第一个push也就是VBHeader的位置,数据窗口跟随。

image-20201228161416594

然后在数据窗口输入刚才的地址+4C,找到form GUI描述表的指针

image-20201228161433897

数据窗口跟随DWORD

image-20201228161501143

00 01 指的是窗体的序号 10则为第一个窗体的启动标志

所以 我们只要把第一个窗体数据块的00改成10 然后把第二个窗体的数据块的10改成00,或者将窗体的序号调换。即 可去除neg。

image-20201228161703623

image-20201228161721626

算法分析

第一步

image-20201228161902354

和002一样获取哟弄个户名长度然后根据得到的结果算出来一个值 我这里这个值为355601

第二步

image-20201228161949962

首先将刚才计算的结果转为浮点数 放入到FPU栈 然后将结果加上2.0 得到355603。逆向这个程序你并不需要 看懂每一条浮点指令,只需要单步跟踪 然后时时观察FPU栈的情况。

第三步

image-20201228162027293

还是将刚才的结果转为浮点数并入栈 然后将355603乘以一个值再减去一个值 最后得到结果ST0=1066807.0000

第四步

image-20201228162141525

将刚才那个值 -(-15) 到此验证结束

1066822

结果

image-20201228162235299

编写注册机

image-20201228162444993

image-20201228162502213

脚本编写

1
print(((ord(s[0])+len(s)*(0x15b38))+2)*3-2+15)

image-20201228162854781

1
2
3
4
5
6
7
8
9
10
11
print("please input your username :")
s = input()
# 获取用户名长度*0x15b38 + 用户名首位
print(ord(s[0])+len(s)*(0x15b38))
# 变成浮点数然后数值加2
print((ord(s[0])+len(s)*(0x15b38))+2)
# 相应的浮点数 * 3 - 2
print(((ord(s[0])+len(s)*(0x15b38))+2)*3-2)
print("your password is:")
# 让相应的值- (-15) 相当于+15
print(((ord(s[0])+len(s)*(0x15b38))+2)*3-2+15)

FROM :ol4three.com | Author:ol4three

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月6日01:09:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  crackme-系列之-crackme3 http://cn-sec.com/archives/721159.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: