PYG 5.4 Cracker 小组 课外练习11
再来个crackme 大家练练手逍遥大哥看了 请置顶啊
要求
1)爆破
2)追码
3)内存注册机
4)算法分析(选做)
练习的目的只在于巩固学习成果.
希望大家积极相互交流相.互讨论. 爆破后追码:victory: 0040110C 0FBE840D 48FFFF>movsx eax,byte ptr ss: //依次取用户名 保存在eax
00401114 41 inc ecx //ecx为计数器
00401115 33C1 xor eax,ecx // eax=eax xor ecx
00401117 03D8 add ebx,eax //结果 累加到在ebx 我这里最后是2A5
00401119 3B4D D8 cmp ecx,dword ptr ss: //比较用户名是否取完
0040111C^ 75 EE jnz short k4n.0040110C
0040111E 6BC0 06 imul eax,eax,6 //最后一次的结果*6 7f*6=2FA
00401121 C1E3 07 shl ebx,7 //2a5左移7位 得 15280
00401124 03C3 add eax,ebx //eax=eax+ebx15280+2fA=1557A
00401126 8945 C8 mov dword ptr ss:,eax
00401129 FF75 C8 push dword ptr ss:
0040112C 68 38B44000 push k4n.0040B438 ; %lx
00401131 8D8D 80FEFFFF lea ecx,dword ptr ss:
00401137 51 push ecx
00401138 E8 873D0000 call k4n.00404EC4 //将计算结果1557A转换位字符串"1557A"
0040113D 83C4 0C add esp,0C
00401140 8D85 80FEFFFF lea eax,dword ptr ss: //取得假码:87654321
00401146 50 push eax //假码入栈
00401147 8D95 E4FEFFFF lea edx,dword ptr ss: //取得刚计算得真码 1557A
0040114D 52 push edx //真码入栈==>>内存注册机
0040114E E8 339C0000 call <jmp.&KERNEL32.lstrcmpA> //关键比较
00401153 85C0 test eax,eax
00401155 75 0D jnz short k4n.00401164 //75==>>74爆破
00401157 68 3CB44000 push k4n.0040B43C ; congratulations! if this number comes *from your* keygen, write a tutorial dude ;).
0040115C 56 push esi
0040115D E8 289B0000 call <jmp.&USER32.SetWindowTextA>
00401162 EB 18 jmp short k4n.0040117C
00401164 68 90B44000 push k4n.0040B490 ; this serial is *not* valid!! try again... : unregistered
00401169 56 push esi
0040116A E8 1B9B0000 call <jmp.&USER32.SetWindowTextA>
0040116F EB 0B jmp short k4n.0040117C
00401171 68 C9B44000 push k4n.0040B4C9 ; name must contain more than 4 chars and less than 50 chars !!
00401176 56 push esi
00401177 E8 0E9B0000 call <jmp.&USER32.SetWindowTextA>
因为用到了左移,而我只会vb(狂汗中.......)
算法总结:
1.依次取用户名的asi码 与它所在的位置的序号做xor 运算,累加.并乘以6.记位A
2.将用户名的最后一个字的asi码 左移7位.记位B
3.注册码= A+B
一组可用注册码:
Name:hczcyy
Code:1557A 原帖由 fantasy 于 2006-5-22 10:06 发表
再来个crackme 大家练练手
逍遥大哥看了 请置顶啊
要求
1)爆破
2)追码
3)内存注册机
4)算法分析(选做)
练习的目的只在于巩固学习成果.
希望大家积极相互交流相.互讨论.
谢谢fantasy!
东东好多。进步多多。
更欢迎大家多多共享一此crackme来玩! 分析的不错 ~~~ 内存注册机见笑了
[ 本帖最后由 vacant 于 2006-5-26 15:07 编辑 ] xhwxhw
15B26 又一个哦~~~ 【文章标题】: 一个适合新手的crackme算法分析
【文章作者】: 网游难民
【作者邮箱】: goqq2008
【软件名称】: k4n
【软件大小】: 60.0
【下载地址】: 本地下载
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: Borland C++
【使用工具】: OD
【操作平台】: winxp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一,用PEID查壳为Borland C++ 无壳。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
二,运行软件,注册窗口进行注册,输入错误的注册信息进行检测!软件有尾巴!
提示说:“This serial is *NOT* Valid!! Try again... : UNREGISTERED”
用OD载入,右键超级字串查找,找到"This serial is *NOT* Valid!! Try again... : UNREGISTERED",双击进入程序代码段,往上查找,在一个合适的地方下断。
然后运行程序,输入注册名和注册码,程序成功被断了下来,断在这里:
00401108|.90 NOP-------------------------------------程序被断在这里。
00401109|.90 NOP
0040110A|.90 NOP
0040110B|.90 NOP
0040110C|>0FBE840D 48FF>/MOVSX EAX,BYTE PTR SS:-----把用户名的第一位ASCII码送入EAX
00401114|.41 |INC ECX--------------------------------ECX加1,初值为0。
00401115|.33C1 |XOR EAX,ECX----------------------------EAX和ECX进行逻辑异或运算。值保存在EAX中。
00401117|.03D8 |ADD EBX,EAX----------------------------EAX和EBX相加,值放在EBX中。
00401119|.3B4D D8 |CMP ECX,DWORD PTR SS:----------SS:里的值和ECX相比较。
0040111C|.^ 75 EE \JNZ SHORT k4n.0040110C-----------------这里是一个循环,求的用户名第一位ASCII码XOR1,第二位用户名ASCII码XOR2~~~~~~~一直到最后一位的和放入EBX,记为A,
0040111E|.6BC0 06 IMUL EAX,EAX,6--------------------------EAX*6,也就是说 最后一位用户名XOR用户名位数 的值乘6,值记为B。
00401121|.C1E3 07 SHL EBX,7-------------------------------EBX左移7位,也就是A左移7位。值放入EBX,值记为C。
00401124|.03C3 ADD EAX,EBX-----------------------------EAX和EBX相加,即A+C,值放入EAX中,记为D。
00401126|.8945 C8 MOV DWORD PTR SS:,EAX
00401129|.FF75 C8 PUSH DWORD PTR SS: ; /Arg3
0040112C|.68 38B44000 PUSH k4n.0040B438 ; |%lx
00401131|.8D8D 80FEFFFF LEA ECX,DWORD PTR SS: ; |
00401137|.51 PUSH ECX ; |Arg1
00401138|.E8 873D0000 CALL k4n.00404EC4 ; \k4n.00404EC4
0040113D|.83C4 0C ADD ESP,0C
00401140|.8D85 80FEFFFF LEA EAX,DWORD PTR SS:
00401146|.50 PUSH EAX ; /String2
00401147|.8D95 E4FEFFFF LEA EDX,DWORD PTR SS:-----------我们的注册码放入EDX
0040114D|.52 PUSH EDX ; |String1
0040114E|.E8 339C0000 CALL <JMP.&KERNEL32.lstrcmpA> -----------关键CALL,我们的注册码和D相比较,相等返回0,不相等返回1,值放入EAX中,即D即为真码。
00401153|.85C0 TEST EAX,EAX
00401155|.75 0D JNZ SHORT k4n.00401164-------------------关键跳转,可以在此爆破。
00401157|.68 3CB44000 PUSH k4n.0040B43C ; /congratulations! if this number comes *from your* keygen, write a tutorial dude ;).
0040115C|.56 PUSH ESI ; |hWnd
0040115D|.E8 289B0000 CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA
00401162|.EB 18 JMP SHORT k4n.0040117C
00401164|>68 90B44000 PUSH k4n.0040B490 ; /this serial is *not* valid!! try again... : unregistered
00401169|.56 PUSH ESI ; |hWnd
0040116A|.E8 1B9B0000 CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA
0040116F|.EB 0B JMP SHORT k4n.0040117C
00401171|>68 C9B44000 PUSH k4n.0040B4C9 ; /name must contain more than 4 chars and less than 50 chars !!
00401176|.56 PUSH ESI ; |hWnd
--------------------------------------------------------------------------------
【经验总结】
它的算法是:
第一位用户名与1异或,第二位用户名与2异或依次类推,把它们的值放入EBX中,记为A。
用户名最后一位与用户名位数异或的值乘以6,值记为B。
A的值左移7位(2进制)。值记为C。
A和C的值相加,记为D。D即为真码。
次crackme比较简单,适合新手学习~~~
[ 本帖最后由 caterpilla 于 2006-7-26 09:57 编辑 ] 呵呵!谢谢fantasy为大家提供这些好的练习机会
页:
[1]
2