160 - 13 badboy

偷懒了很久也是时候要继续开始学习了。

环境:

windows xp sp3

工具:

VB Decompiler v8.3


这次是个vb文件,所以尝试一下用这个的感觉。

打开文件之后发现有两个CrackMe选择,分别是1.0版本和2.0版本。



打开vb decompiler,载入badboy,

在Forms的Form1里头,几乎有所有的控件的属性,找到Caption为“try”的commandbutton,然后记下它的标号,分别是2,4

然后跑到code,在form1里面找到command2和command4的click事件。

因为1.0版本的CrackMe只有一个输入框,那就可以猜测Command4是1.0的try,因为已经有代码了,照着看就好了。

发现要和Label3的caption相同才行,那么Label3的caption是如何来的呢?

把From1里头的事件都找一遍,最后在Combol的click中找到了Label3,然后上面有一长串的计算公式,就不难猜测上面公式的计算结果就是Label3的capton内容了。

公式内容是:

CStr((((CLng(Day(Now) * Day(23) + Month(Now) * Month(2) + Year(Now) * Year(3)) + CLng((((Day(Now) * Day(23)) + (Month(Now) * Month(2))) + (Year(Now) * Year(3)))))

 + CLng((Day(14) * Year(2020)))) + CLng((Day(14) * Year(2020)))))

根据这串公式就可以得出CrackMe 1,0的输入内容了。

Day(Now)是指今天的号数,Month(Now)是今天的月份,Year(Now)则是今年的年份了

Day(23) 则是 22, Moth(3)则是1,Year(3)是1900,Day(14)是13,Year(2020)是1905

然后就可以写出CrackMe1.0注册机了。


现在来看看CrackMe 2.0的command2的click事件。

首先看到的是一个长度判断,输入的Name长度不能小于5


然后有一个很长的字符串:

var_94 = "0110617121214051216101106141404110614140411091211100810101608040610121608100416"

var_98 = Text1.text 这个就是保存输入的name


紧接着就是2个for循环,其中:

Mid()函数在我理解中是:Mid(char * s, int begin,int length),即从s[begin-1]的位置开始,数到s[begin-1+length],将这个范围里的数字转为数字。

如:Mid(var_94,CLng(var_A8*3),3),假设var_A8 = 4吧,然后找到var_94[11]的位置,然后数3个数字,所以函数返回结果是:1405

val()函数就是将string类型转为double型

Asc()函数则是计算字母的ascii值


最后面是一个比较,比较的内容是输入的serial 和两个for得出的结果的对比,相同则显示成功。


在写注册机的时候需要注意的是,有些变量是突然间跑出来的,可以假设它之前为0,还有个问题是var_A8有一个var_A8+1判断是否大于等于39,但是显然找不到改变var_A8的值的地方,或许是工具反编译的时候有问题,但是仍然可以猜想var_A8的改变情况,拿第一个for循环来讲:或许是var_A8++,也可能是var_A8 *= 3,那么当它大于等于39的时候,它就会变成0,然后它将会一直为0,可以两种方法都测试一下,会发现都得不到正确serial,那么就有可能是在 if(var_A8+1)>=39 then 这里的判断多了,把“+1”去掉,在这个判断前面加上var_A8++,就能得到正确的serial







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值