160个crackme之003

还是下定决心好好做一波crackme

逆向的新手,写个博客记录一下自己的学习经历

---------------------------------------------------华丽丽的分割线-------------------------------------------------

0X00 首先拿到了这个程序,打开,经过大概5秒钟的等待之后就进入了主界面

传统的name/serial类型的程序,随便输入一点东西发现弹窗。

这时候放到OD当中,我使用的是吾爱破解版的OD

首先想法就是找到关键跳转,这里有两种方法

一是在弹窗后f12暂停,然后alt+k查看栈情况,这时会有

查看调用来自应用程序的rtcMsgBox跟进就找到了。

二是直接右键查找字符串。也能很容易的发现关键语句。

0X01 接下来就要做一些坏坏的事情了,首先尝试爆破

在关键跳转位置下断、然后执行到此处时将标志寄存器反转


接着爆破就完成了,很轻松


0X02 接下来分析算法,写出注册机

首先查看关键跳转附近的关键寄存器

这是附近的代码

00408605   .  E8 888AFFFF   call <jmp.&MSVBVM50._adj_fdivr_m64>
0040860A   >  DFE0          fstsw ax
0040860C   .  A8 0D         test al,0xD
0040860E   .  0F85 AB010000 jnz AfKayAs_.004087BF
00408614   .  FF15 34B14000 call dword ptr ds:[<&MSVBVM50.__vbaFpR8>>;  msvbvm50.__vbaFpR8
0040861A   .  DC1D 28104000 fcomp qword ptr ds:[0x401028]
00408620   .  DFE0          fstsw ax
00408622   .  F6C4 40       test ah,0x40
00408625   .  74 07         je short AfKayAs_.0040862E
00408627   .  BE 01000000   mov esi,0x1
0040862C   .  EB 02         jmp short AfKayAs_.00408630
0040862E   >  33F6          xor esi,esi
00408630   >  8D55 E4       lea edx,dword ptr ss:[ebp-0x1C]
00408633   .  8D45 E8       lea eax,dword ptr ss:[ebp-0x18]
00408636   .  52            push edx
00408637   .  50            push eax
00408638   .  6A 02         push 0x2
0040863A   .  FF15 80B14000 call dword ptr ds:[<&MSVBVM50.__vbaFreeS>;  msvbvm50.__vbaFreeStrList
00408640   .  83C4 0C       add esp,0xC
00408643   .  8D4D D8       lea ecx,dword ptr ss:[ebp-0x28]
00408646   .  8D55 DC       lea edx,dword ptr ss:[ebp-0x24]
00408649   .  51            push ecx
0040864A   .  52            push edx
0040864B   .  6A 02         push 0x2
0040864D   .  FF15 08B14000 call dword ptr ds:[<&MSVBVM50.__vbaFreeO>;  msvbvm50.__vbaFreeObjList
00408653   .  F7DE          neg esi
00408655   .  83C4 0C       add esp,0xC
00408658   .  B9 04000280   mov ecx,0x80020004
0040865D   .  B8 0A000000   mov eax,0xA
00408662   .  894D 9C       mov dword ptr ss:[ebp-0x64],ecx
00408665   .  66:85F6       test si,si
00408668   .  8945 94       mov dword ptr ss:[ebp-0x6C],eax
0040866B   .  894D AC       mov dword ptr ss:[ebp-0x54],ecx
0040866E   .  8945 A4       mov dword ptr ss:[ebp-0x5C],eax
00408671   .  894D BC       mov dword ptr ss:[ebp-0x44],ecx
00408674   .  8945 B4       mov dword ptr ss:[ebp-0x4C],eax
00408677      74 62         je short AfKayAs_.004086DB
00408679   .  8B35 14B14000 mov esi,dword ptr ds:[<&MSVBVM50.__vbaSt>;  msvbvm50.__vbaStrCat
0040867F   .  68 C06F4000   push AfKayAs_.00406FC0                   ;  You Get It
00408684   .  68 DC6F4000   push AfKayAs_.00406FDC                   ; /\r\n
00408689   .  FFD6          call esi                                 ; \__vbaStrCat
0040868B   .  8BD0          mov edx,eax

说明和si有关
往上找有关si的处理
发现与eax有关,再往上就找到了关键的函数逻辑


首先在这里,取出输入的name值,然后计算字符串长度,将得到的长度乘0X15B38

接着取第一个字符的Ascii码,与之前结果相加

之后,转为整数,进行浮点数加减法,这里经过浮点数计算之后将之前的结果+2


下一步对结果*3后-2


最后+15

得到最终的serial。

其实这种验证方式通用的弊端都在于,计算后正确的结果会在内存中出现,所以仔细观察内存会发现小惊喜。

验证结果正确


最后回顾整个算法过程写出注册机

关键算法流程:serial=(strlen*0X15B38+ord(name[0])+2)*3-2+15

附python脚本



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值