160个crackme之003
来源:互联网 发布:淘宝一元拍卖骗局 编辑:程序博客网 时间:2024/05/16 13:03
还是下定决心好好做一波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 ax0040860C . A8 0D test al,0xD0040860E . 0F85 AB010000 jnz AfKayAs_.004087BF00408614 . FF15 34B14000 call dword ptr ds:[<&MSVBVM50.__vbaFpR8>>; msvbvm50.__vbaFpR80040861A . DC1D 28104000 fcomp qword ptr ds:[0x401028]00408620 . DFE0 fstsw ax00408622 . F6C4 40 test ah,0x4000408625 . 74 07 je short AfKayAs_.0040862E00408627 . BE 01000000 mov esi,0x10040862C . EB 02 jmp short AfKayAs_.004086300040862E > 33F6 xor esi,esi00408630 > 8D55 E4 lea edx,dword ptr ss:[ebp-0x1C]00408633 . 8D45 E8 lea eax,dword ptr ss:[ebp-0x18]00408636 . 52 push edx00408637 . 50 push eax00408638 . 6A 02 push 0x20040863A . FF15 80B14000 call dword ptr ds:[<&MSVBVM50.__vbaFreeS>; msvbvm50.__vbaFreeStrList00408640 . 83C4 0C add esp,0xC00408643 . 8D4D D8 lea ecx,dword ptr ss:[ebp-0x28]00408646 . 8D55 DC lea edx,dword ptr ss:[ebp-0x24]00408649 . 51 push ecx0040864A . 52 push edx0040864B . 6A 02 push 0x20040864D . FF15 08B14000 call dword ptr ds:[<&MSVBVM50.__vbaFreeO>; msvbvm50.__vbaFreeObjList00408653 . F7DE neg esi00408655 . 83C4 0C add esp,0xC00408658 . B9 04000280 mov ecx,0x800200040040865D . B8 0A000000 mov eax,0xA00408662 . 894D 9C mov dword ptr ss:[ebp-0x64],ecx00408665 . 66:85F6 test si,si00408668 . 8945 94 mov dword ptr ss:[ebp-0x6C],eax0040866B . 894D AC mov dword ptr ss:[ebp-0x54],ecx0040866E . 8945 A4 mov dword ptr ss:[ebp-0x5C],eax00408671 . 894D BC mov dword ptr ss:[ebp-0x44],ecx00408674 . 8945 B4 mov dword ptr ss:[ebp-0x4C],eax00408677 74 62 je short AfKayAs_.004086DB00408679 . 8B35 14B14000 mov esi,dword ptr ds:[<&MSVBVM50.__vbaSt>; msvbvm50.__vbaStrCat0040867F . 68 C06F4000 push AfKayAs_.00406FC0 ; You Get It00408684 . 68 DC6F4000 push AfKayAs_.00406FDC ; /\r\n00408689 . FFD6 call esi ; \__vbaStrCat0040868B . 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脚本
- 160个crackme之003
- 160个CrackMe之001
- 160个crackme之004
- 160个crackme之008
- 160个crackme之009
- 160个crackme之010
- 160个crackme之011
- 160个CrackMe之11
- 160个CrackMe之91
- 160个CrackMe之123
- 160个CrackMe之51
- 160个CrackMe之41
- 160个CrackMe之34
- 160个练手CrackMe-003
- 吾爱破解160个crackme之003
- 160个破解练习之CrackMe 003 Afkayas.2
- 160个破解练习之CrackMe 006
- 160个破解练习之CrackMe 007
- CentOS使用EPEL YUM源
- LintCode python 小白-简单题-445余弦相识度
- 矢量图
- caioj1031·递归1(全排列,搜索入门)
- Log4j使用
- 160个crackme之003
- 闭包思维自动生成unittest 接口测试用例脚本
- 2017 Multi-University Training Contest 3 1003/hdu6058
- gulp、requirejs、webpack之间是什么关系
- java程序员的python之路(mongodb)
- Linux
- 博弈
- 课程 | 让机器“看见”——计算机视觉原理及实战
- UVA101 The Blocks Problem(模拟)