求嗨推学习平台邀请码一个,感谢!

嗨推培训心得_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
嗨推培训心得
上传于||文档简介
&&嗨​推​培​训​心​得
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
你可能喜欢【原创】一个Cracker代码分析及注册机编写,可以申请邀请码吗? - 看雪安全论坛
『软件调试逆向』 [综合性论坛]本版讨论的主题包括:调试逆向、系统底层、商业保护、虚拟机保护、.NET平台等安全相关的话题。
该主题: "【原创】一个Cracker代码分析及注册机编写,可以申请邀请码吗?" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
本站声明:看雪论坛文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者信息及本声明!
注册日期: Jul 2013
现金: 100 Kx
致谢数: 12
获感谢文章数:3获会员感谢数:3
【原创】一个Cracker代码分析及注册机编写,可以申请邀请码吗?
标 题: 【原创】一个Cracker代码分析及注册机编写,可以申请邀请码吗? 作 者: obabydbg
时 间: ,15:44:03 链 接: /showthread.php?t=175863
作者:obabydbg
这个crack早在几年前就被CCDebuger的一篇文章提到过,不过他只是讲解了一些爆破的方法。今天刚好有空,捡起来分析了一下。如果有什么分析不对的地方还请大家指出。第一次发贴,希望可以起来抛砖引玉的效果。还请个位高手多多指点。先谢谢了!!
工具:OD+editplus+UltraEdit
1.&&程序运行界面
2.用OD载入程序
&3.程序是用汇编语言编写的,无壳。查壳的过程就省略了。查看当前模块中的名称后,可以在bp&GetDlgItemTextA下断
4.F9运行程序,输入用户名和注册码后断下
断下后,注意右下角。Call&&GetDlgItemTextA到这一行,按回车键到反汇编窗口。到反汇编窗口后,往上翻,0040109C&&/$&&C705&&mov&dword&ptr&ds:[0xxFEDCBA98
在这一行下断,ctrl+F2重新运行程序。记住这个参数,程序中的算法要用到这个参数的。
5.重新运行程序,输入用户名注册码后在上面我们下断的地方断下
看到这里大家应该很熟悉了,读出用户名和注册码返回字节数。按F8单步运行程序,注册堆栈窗口,找到用户名和注册码在内存中的位置。
可以很清楚的在内存区看到输入的注册码和用户名了,0x402182就是上面提到的那个数据,往下看,一会就会用到了。
&&|.&&0BC0&&&&&&&&&&or&eax,eax&&&&&;输入的用户名不能为空
&&|.&&74&49&&&&&&&&&je&short&cycle.0040111F
&&|.&&B9&&&&mov&ecx,0x10
004010DB&&|.&&2BC8&&&&&&&&&&sub&ecx,eax
004010DD&&|.&&BE&&&&mov&esi,cycle.&&&&&&&&&&&&&&&&&&&;&&ASCII&&obaby&
&&|.&&8BFE&&&&&&&&&&mov&edi,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
&&|.&&03F8&&&&&&&&&&add&edi,eax
&&|.&&FC&&&&&&&&&&&&cld
&&|.&&F3:A4&&&&&&&&&rep&movs&byte&ptr&es:[edi],byte&ptr&ds:[&
这几句其实就是把我们输入的用户名填充成一个16字节的用户名,如:我输入的是obaby,填充成16字节的用户名后为obabyobabyobabyo,就是用我们输入的用户名来填充空的字节,要求用户名为16位,这个跟后面算法有关系的,一会就可以看到了。
&&|.&&33C9&&&&&&&&&&xor&ecx,ecx
004010EB&&|.&&BE&&&&mov&esi,cycle.&&&&&&&&&&&&&&&&&&&;&&ASCII&&0000&
&&|&&&41&&&&&&&&&&&&/inc&ecx
&&|.&&AC&&&&&&&&&&&&|lods&byte&ptr&ds:[esi]
&&|.&&0AC0&&&&&&&&&&|or&al,al
&&|.&&74&0A&&&&&&&&&|je&short&cycle.
&&|.&&3C&7E&&&&&&&&&|cmp&al,0x7E
&&|.&&7F&06&&&&&&&&&|jg&short&cycle.
004010FA&&|.&&3C&30&&&&&&&&&|cmp&al,0x30
004010FC&&|.&&72&02&&&&&&&&&|jb&short&cycle.
004010FE&&|.^&EB&F0&&&&&&&&&\jmp&short&cycle.
&&|&&&83F9&11&&&&&&&cmp&ecx,0x11&&&&&&&;必须要为16个字节
&&|.&&75&1A&&&&&&&&&jnz&short&cycle.0040111F
接下来这几个是来检测注册码了,输入的字符秘须大于0x30小于0x7E,并且注册码要为16个字节,要不然直接跳到retn了。
6.接下来就是算法了,这个算法其实不难,但是挺麻烦的,如果不细心看的话,一会就转晕了。
&&|.&&E8&E7000000&&&call&cycle.&&&&;第一个call运算
0040110A&&|.&&B9&01FF0000&&&mov&ecx,0xFF01
0040110F&&|.&&51&&&&&&&&&&&&push&ecx
&&|.&&E8&7B000000&&&call&cycle.&&&&&;第二个call运算
&&|.&&83F9&01&&&&&&&cmp&ecx,0x1&&&&&&&&&&&;经过上面的运行到这里ecx必须要等于1,如果不等于1就跳向注册失败了。
&&|.&&74&06&&&&&&&&&je&short&cycle.
0040111A&&|&&&E8&&&&call&cycle.
0040111F&&|&&&C3&&&&&&&&&&&&retn
这里只是一半,后面还有一半。这个算法其实就是把16位的用户名和16位的注册码分成二部分,每部分分别为8位,这二个call运行只用到了前8位,也就是说用户名的前8位和注册码的前8位经过上面运行后ecx必须要为1才行。
我们分别看这二个call.
&&/$&&A1&&&&mov&eax,dword&ptr&ds:[0x402160]&;用户名的前四位
&&|.&&8B1D&&mov&ebx,dword&ptr&ds:[0x402164]&;4-7位
004011FC&&|.&&0&xor&eax,dword&ptr&ds:[0x402171]&&;注册码的前四位
&&|.&&331D&&xor&ebx,dword&ptr&ds:[0x402175]&&;4-7位
&&|.&&25&0F1F3F7F&&&and&eax,0x7F3F1F0F
0040120D&&|.&&81E3&&and&ebx,0x7030100
这是第一个call传进来的数据,下面的运算都是围绕前8位的数据来打操作的。
接下来我们看看第二个call
004011DE&&|.&&FF05&&|inc&dword&ptr&ds:[0x402182]
注意这句,这里指向的数据就是0xFEDCBA98,开始我们说到的,这个数据是会变的,运算中会自加。这就是前8位运算的二个call了。不是很难,但是看着挺烦人的。
这二个call运算完了以后,ecx一定要等于1哦。
7.ecx==1后跳到下面运算,不是只用到了前8位嘛,现在开始运算后8位了。
&&|&&\A1&&&&mov&eax,dword&ptr&ds:[0x402168]
&&|.&&8B1D&6C214000&mov&ebx,dword&ptr&ds:[0x40216C]
0040112B&&|.&&33C3&&&&&&&&&&xor&eax,ebx
0040112D&&|.&&0&xor&eax,dword&ptr&ds:[0x402182]&;前面提到的那个数据,前面会自加,在这里会进行异或运算
&&|.&&0D&&&&or&eax,0x
&&|.&&25&&&&and&eax,0x
0040113D&&|.&&0&xor&eax,dword&ptr&ds:[0x402179]
&&|.&&000&xor&eax,dword&ptr&ds:[0x40217D]
&&|.^&75&CF&&&&&&&&&jnz&short&cycle.0040111A
0040114B&&|.&&E8&2B000000&&&call&cycle.0040117B
&&\.&&C3&&&&&&&&&&&&retn
如果ecx=1就跳到这了,看内存这里用到的就是用户名和注册码的后8位了。运算结束后ZF必须要为1,要不然就跳到注册错误了。
可以看到,ZF=1跳向正确,否则跳向错误。
下面是编写的注册机:
.model&flat,stdcall
option&casemap:none
include&windows.inc
include&kernel32.inc
include&user32.inc
include&masm32.inc
includelib&kernel32.lib
includelib&user32.lib
includelib&masm32.lib
crackcallA&proto
crackcallB&proto
crackcallC&proto
crackcallD&proto
value&&&&&dword&0fedcba98h
printname&db&'input&name:&',0
printpawd&db&'input&password:&',0
szFmt&&db&'Done!!!',0
username&&db&17&dup&(0)
password&db&17&dup&(0)
&&invoke&StdOut,addr&printname
&&invoke&StdIn,addr&username,lengthof&username
&&invoke&StdOut,addr&printpawd
&&invoke&StdIn,addr&password,lengthof&password
&&xor&ecx,ecx
&&lea&esi,username
&&lea&edi,username
usernameloop:
&&mov&al,byte&ptr&[esi]
&&or&al,al
&&jz&usernamelab
&&jmp&usernameloop
usernamelab:
&&mov&eax,10h
&&mov&edx,ecx
&&sub&eax,ecx
&&xchg&eax,ecx
&&mov&esi,edi
&&add&edi,edx
&&rep&movs&byte&ptr&es:[edi],byte&ptr&[esi]
&&xor&ecx,ecx
&&lea&esi,password
passwordloop:
&&mov&al,byte&ptr&[esi]
&&or&al,al
&&je&passwordcount
&&jmp&passwordloop
passwordcount:
&&cmp&ecx,011h
&&jnz&over
&&call&crackcallA
&&mov&ecx,0ff01h
&&push&ecx
&&call&crackcallB
&&cmp&ecx,1
&&call&crackcallC&
&&mov&eax,dword&ptr&[username+8]
&&mov&ebx,dword&ptr&[username+12]
&&xor&eax,ebx
&&xor&eax,dword&ptr&[value]
&&or&&eax,h
&&and&eax,h
&&xor&eax,dword&ptr&[password+8]
&&xor&eax,dword&ptr&[password+12]
&&call&crackcallD
&&invoke&StdOut,addr&szFmt
&&invoke&ExitProcess,0
crackcallA&proc
&&mov&eax,dword&ptr&[username]
&&mov&ebx,dword&ptr&[username+4]
&&xor&eax,dword&ptr&[password]
&&xor&ebx,dword&ptr&[password+4]
&&and&eax,07f3f1f0fh
&&and&ebx,h
&&xor&ecx,ecx
&&mov&&&&&esi,&eax
&&mov&&&&&edi,&ebx
&&shl&&&&&esi,&cl
&&shl&&&&&edi,&cl
&&and&&&&&esi,&h
&&and&&&&&edi,&h
&&mov&&&&&edx,&esi
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shr&&&&&dx,&1
&&mov&&&&&esi,&edx
&&mov&&&&&edx,&edi
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shr&&&&&dx,&5
&&mov&&&&&edi,&edx
&&xor&&&&&edi,&esi
&&mov&&&&&edx,&edi
&&and&&&&&edx,&0FFh&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&push&&&&ecx
&&push&&&&edx
&&mov&&&&&edx,&8
&&xchg&&&&eax,&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&cmp&&&&&eax,&3
&&jg&&&&&&lab1
&&mul&&&&&dl
&&pop&&&&&edx
&&add&&&&&eax,&8
&&xchg&&&&eax,&ecx
&&rol&&&&&eax,&cl&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&xor&&&&&eax,&edx
&&ror&&&&&eax,&cl&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&jmp&&&&&lab2
&&sub&&&&&eax,&3
&&mul&&&&&dl
&&pop&&&&&edx
&&xchg&&&&eax,&ecx
&&rol&&&&&ebx,&cl
&&xor&&&&&ebx,&edx
&&ror&&&&&ebx,&cl
&&pop&&&&&ecx
&&inc&&&&&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&cmp&&&&&ecx,&8
&&jnz&&&&&begin
crackcallA&endp
crackcallB&proc
&&pop&&&&&edi
&&pop&&&&&ecx
&&push&&&&edi
&&cmp&&&&&ecx,&080h
&&jle&&&&&done1
&&push&&&&ecx
&&mov&&&&&esi,&ecx
&&and&&&&&ecx,&0FFh
&&mov&&&&&edi,&eax
&&cmp&&&&&ecx,&8
&&jle&&&&&lab1
&&mov&&&&&edi,&ebx
&&shr&&&&&ecx,&4
&&rol&&&&&edi,&8
&&shr&&&&&ecx,&1
&&jnz&&&&&lab1
&&shr&&&&&esi,&8
&&and&&&&&edi,&esi
&&and&&&&&edi,&0FFh
&&pop&&&&&ecx
&&mov&&&&&esi,&080h
&&test&&&&esi,&edi
&&je&&&&&&lab2
&&xor&&&&&edi,&esi
&&push&&&&edi
&&and&&&&&ecx,&0FF00h
&&xchg&&&&esi,&ecx
&&xor&&&&&ch,&cl
&&xor&&&&&esi,&ecx
&&xchg&&&&ecx,&esi
&&push&&&&ecx
&&inc&&&&&dword&ptr&[value]
&&call&&&&crackcallB
&&pop&&&&&edi
&&jmp&&&&&lab3
&&shr&&&&&esi,&1
&&jnz&&&&&lab4
crackcallB&endp
crackcallC&proc
&&xor&ecx,ecx
&&lea&edi,password
&&mov&al,byte&ptr&[edi]
&&mov&byte&ptr&[edi],al
&&call&crackcallA
&&mov&ecx,0ff01h
&&push&ecx
&&call&crackcallB
&&;add&esp,4
&&cmp&ecx,1
&&je&retncall
&&lea&edi,password
&&mov&al,byte&ptr&[edi]
&&;mov&byte&ptr&[edi],al
&&;mov&al,byte&ptr&[edi]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi],'0'
&&lea&edi,password
&&mov&al,&byte&ptr&[edi+1]
&&mov&byte&ptr&[edi+1],al
&&mov&al,byte&ptr&[edi+1]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+1],'0'
&&lea&edi,password
&&mov&al,&byte&ptr&[edi+2]
&&mov&byte&ptr&[edi+2],al
&&mov&al,byte&ptr&[edi+2]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+2],'0'
&&lea&edi,password
&&mov&al,byte&ptr&&[edi+3]
&&mov&byte&ptr&[edi+3],al
&&mov&al,byte&ptr&[edi+3]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+3],'0'
&&lea&edi,password
&&mov&al,byte&ptr&&[edi+4]
&&mov&byte&ptr&[edi+4],al
&&mov&al,byte&ptr&[edi+4]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+4],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+5]
&&mov&byte&ptr&[edi+5],al
&&mov&al,byte&ptr&[edi+5]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+5],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+6]
&&mov&byte&ptr&[edi+6],al
&&mov&al,byte&ptr&[edi+6]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+6],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+7]
&&mov&byte&ptr&[edi+7],al
&&mov&al,byte&ptr&[edi+7]
&&cmp&al,07eh
&&jle&tap0
crackcallC&endp
crackcallD&proc
&&lea&edi,password
&&mov&al,byte&ptr&[edi+8]
&&mov&byte&ptr&[edi+8],al
&&mov&eax,dword&ptr&[username+8]
&&mov&ebx,dword&ptr&[username+12]
&&xor&eax,ebx
&&xor&eax,dword&ptr&[value]
&&or&&eax,h
&&and&eax,h
&&xor&eax,dword&ptr&[password+8]
&&xor&eax,dword&ptr&[password+12]
&&jz&retncall
&&lea&edi,password
&&mov&al,byte&ptr&[edi+8]
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+8],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+9]
&&mov&byte&ptr&[edi+9],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+9],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0ah]
&&mov&byte&ptr&[edi+0ah],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0ah],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0bh]
&&mov&byte&ptr&[edi+0bh],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0bh],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0ch]
&&mov&byte&ptr&[edi+0ch],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0ch],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0dh]
&&mov&byte&ptr&[edi+0dh],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0dh],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0eh]
&&mov&byte&ptr&[edi+0eh],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0eh],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0fh]
&&mov&byte&ptr&[edi+0fh],al
&&cmp&al,07eh
&&jle&tap0
crackcallD&endp
注册机中有些算法是自已抄的原程序的,所以会看到很多眼熟的地方哦。
这是二组计算出来后正确的用户名和注册码:
;7422222VSpA3222
我在word上面排版好了的,怎么上来就这样了,大家将就看看吧。图片不知道怎么没有了,我把图片打包上传附件了*转载请注明来自看雪论坛@
上传的缩略图
上传的附件
(1.8 KB, 21 次下载)
被 obabydbg 最后编辑
原因: 上传图片
感谢 obabydbg 此篇文章之用户:
注册日期: Jul 2013
现金: 100 Kx
致谢数: 12
获感谢文章数:3获会员感谢数:3
, 15:08:42
由于是第一次发贴,图片不怎么如何上传,就不附图了,直接上代码。希望这次可以看得比较清楚
【软件名称】cycle.EXE
【应用平台】Win9x/NT/2000/XP
【软件大小】8K
【破解声明】破解只是感兴趣,无其它目的。失误之处敬请诸位大侠赐教!
【破解工具】PEiD,OD,&UE&
========================================================================================
【分析过程】
1.&&查壳后,无壳。程序是用汇编写的
2.&&用OD载入程序,停在这里
&&/$&&6A&00&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/pModule&=&NULL
&&|.&&E8&A4020000&&&call&&jmp.&KERNEL32.GetModuleHandleA&&&&&;&\GetModuleHandleA
&&|.&&A3&&&&mov&dword&ptr&ds:[0x402194],eax
0040100C&&|.&&6A&00&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/lParam&=&NULL
0040100E&&|.&&68&&&&push&cycle.&&&&&&&&&&&&&&&&&&&&&&;&|DlgProc&=&cycle.
&&|.&&6A&00&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hOwner&=&NULL
&&|.&&6A&68&&&&&&&&&push&0x68&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|pTemplate&=&0x68
&&|.&&FF35&&push&dword&ptr&ds:[0x402194]&&&&&&&&&&&&&;&|hInst&=&NULL
0040101D&&|.&&E8&8F020000&&&call&&jmp.&USER32.DialogBoxParamA&&&&&&&&;&\DialogBoxParamA
&&|.&&6A&00&&&&&&&&&push&0x0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/ExitCode&=&0x0
&&\.&&E8&7C020000&&&call&&jmp.&KERNEL32.ExitProcess&&&&&&&&&&;&\ExitProcess
3.&&右键&查找-&当前模块名称,找到GetDlgItemTextA函数,从文本中读取字符串,就在这个函数下断,bp&GetDlgItemTextA
4.&&F9先让程序跑起来,程序跑起来以后在Name和Serial分别输入obaby和1111,程序要求注册码为16位,稍后会分析到的。这里先输入16个1。
单击check,程序断下了。注意右下角:
0012FAE8&&&004010BA&&/CALL&到&GetDlgItemTextA&来自&cycle.
在这句单击右键,选择反汇编窗口跑随,这样就来到程序领空了。
0040109C&&/$&&C705&&mov&dword&ptr&ds:[0xxFEDCBA98
&&|.&&6A&11&&&&&&&&&push&0x11&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/Count&=&11&(17.)
&&|.&&68&&&&push&cycle.&&&&&&&&&&&&&&&&&&&&&&;&|Buffer&=&cycle.
004010AD&&|.&&68&E9030000&&&push&0x3E9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|ControlID&=&3E9&(1001.)
&&|.&&FF75&08&&&&&&&push&[arg.1]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hWnd&=&001F06A8&('CycleCrackme',class='#32770')
&&|.&&E8&0F020000&&&call&&jmp.&USER32.GetDlgItemTextA&&&&&&&&;&\GetDlgItemTextA
004010BA&&|.&&0BC0&&&&&&&&&&or&eax,eax
004010BC&&|.&&74&61&&&&&&&&&je&short&cycle.0040111F
004010BE&&|.&&6A&11&&&&&&&&&push&0x11&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&/Count&=&11&(17.)
&&|.&&68&&&&push&cycle.&&&&&&&&&&&&&&&&&&&&&&;&|Buffer&=&cycle.
&&|.&&68&E8030000&&&push&0x3E8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|ControlID&=&3E8&(1000.)
004010CA&&|.&&FF75&08&&&&&&&push&[arg.1]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&|hWnd&=&001F06A8&('CycleCrackme',class='#32770')
004010CD&&|.&&E8&F7010000&&&call&&jmp.&USER32.GetDlgItemTextA&&&&&&&&;&\GetDlgItemTextA
&&|.&&0BC0&&&&&&&&&&or&eax,eax
&&|.&&74&49&&&&&&&&&je&short&cycle.0040111F
&&|.&&B9&&&&mov&ecx,0x10
004010DB&&|.&&2BC8&&&&&&&&&&sub&ecx,eax
004010DD&&|.&&BE&&&&mov&esi,cycle.
&&|.&&8BFE&&&&&&&&&&mov&edi,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
向上翻,在0040109C&&/$&&C705&&mov&dword&ptr&ds:[0xxFEDCBA98
这句下断,重新开始。F9运行程序,输入Name和Serial,程序断下了。上面这二个函数大家应该很熟悉,就是我们第一次下断的地方。从文本中读取数据。
5.&&F8一路往下走,一直到这里。
&&|.&&0BC0&&&&&&&&&&or&eax,eax
&&|.&&74&49&&&&&&&&&je&short&cycle.0040111F
&&|.&&B9&&&&mov&ecx,0x10
004010DB&&|.&&2BC8&&&&&&&&&&sub&ecx,eax
004010DD&&|.&&BE&&&&mov&esi,cycle.
&&|.&&8BFE&&&&&&&&&&mov&edi,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
&&|.&&03F8&&&&&&&&&&add&edi,eax
&&|.&&FC&&&&&&&&&&&&cld
&&|.&&F3:A4&&&&&&&&&rep&movs&byte&ptr&es:[edi],byte&ptr&ds:[&
这里会先判断用户名是否为空,程序在这里会把用户名也变成16个字节的数据。例如我输入的用户名是obaby,经过上面的运算后用户名会变成obabyobabyobabyo,会用输入的用户名来填充其它为0的字节,一直到把16个字节填充完成。
6.&&F8往下走,到这里
&&|.&&33C9&&&&&&&&&&xor&ecx,ecx&&&&&//首先把ecx清空
004010EB&&|.&&BE&&&&mov&esi,cycle.&&&//这里指向注册码
&&|&&&41&&&&&&&&&&&&/inc&ecx&&&//这里先加了,如果输入的注册码为16个字节,那么ecx会等于17(0x11)
&&|.&&AC&&&&&&&&&&&&|lods&byte&ptr&ds:[esi]
&&|.&&0AC0&&&&&&&&&&|or&al,al
&&|.&&74&0A&&&&&&&&&|je&short&cycle.
&&|.&&3C&7E&&&&&&&&&|cmp&al,0x7E
&&|.&&7F&06&&&&&&&&&|jg&short&cycle.
004010FA&&|.&&3C&30&&&&&&&&&|cmp&al,0x30
004010FC&&|.&&72&02&&&&&&&&&|jb&short&cycle.
004010FE&&|.^&EB&F0&&&&&&&&&\jmp&short&cycle.
&&|&&&83F9&11&&&&&&&cmp&ecx,0x11
&&|.&&75&1A&&&&&&&&&jnz&short&cycle.0040111F&&&&&//这里不能跳,跳就死
这里实际上就是对输入的注册码进行计数,注册码必须为16个字节。输入的字节不能大于0x7E(~),也不能小于0x30(‘0’)。
7.&&对用户名和注册码处理结束后,就是作者写的算法了。算法实际上分为二部分,我们一步步看。
&&|.&&E8&E7000000&&&call&cycle.&&&&//第一个call,F7进入
0040110A&&|.&&B9&01FF0000&&&mov&ecx,0xFF01
0040110F&&|.&&51&&&&&&&&&&&&push&ecx
&&|.&&E8&7B000000&&&call&cycle.&&//第二个call,F7进入
&&|.&&83F9&01&&&&&&&cmp&ecx,0x1&&&&&&
&&|.&&74&06&&&&&&&&&je&short&cycle.&//必须跳,不跳就死
上面二个call运算完成后,ecx必须要为1。要不然就注册错误了。
&&/$&&A1&&&&mov&eax,dword&ptr&ds:[0x402160]&
&&|.&&8B1D&&mov&ebx,dword&ptr&ds:[0x402164]&//用户名前8个字节
004011FC&&|.&&0&xor&eax,dword&ptr&ds:[0x402171]
&&|.&&331D&&xor&ebx,dword&ptr&ds:[0x402175]&//注册码的前8个字节异或
&&|.&&25&0F1F3F7F&&&and&eax,0x7F3F1F0F
0040120D&&|.&&81E3&&and&ebx,0x7030100
&&|.&&33C9&&&&&&&&&&xor&ecx,ecx
&&|&&&8BF0&&&&&&&&&&/mov&esi,eax
&&|.&&8BFB&&&&&&&&&&|mov&edi,ebx
&&|.&&D3E6&&&&&&&&&&|shl&esi,cl
0040121B&&|.&&D3E7&&&&&&&&&&|shl&edi,cl
0040121D&&|.&&81E6&&|and&esi,0x
&&|.&&81E7&&|and&edi,0x
&&|.&&8BD6&&&&&&&&&&|mov&edx,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
0040122B&&|.&&C0EE&07&&&&&&&|shr&dh,0x7
0040122E&&|.&&66:C1E2&07&&&&|shl&dx,0x7
&&|.&&C1EA&08&&&&&&&|shr&edx,0x8
&&|.&&C0EE&07&&&&&&&|shr&dh,0x7
&&|.&&66:C1E2&07&&&&|shl&dx,0x7
0040123C&&|.&&C1EA&08&&&&&&&|shr&edx,0x8
0040123F&&|.&&C0EE&07&&&&&&&|shr&dh,0x7
&&|.&&66:D1EA&&&&&&&|shr&dx,1
&&|.&&8BF2&&&&&&&&&&|mov&esi,edx
&&|.&&8BD7&&&&&&&&&&|mov&edx,edi
&&|.&&C0EE&07&&&&&&&|shr&dh,0x7
0040124C&&|.&&66:C1E2&07&&&&|shl&dx,0x7
&&|.&&C1EA&08&&&&&&&|shr&edx,0x8
&&|.&&C0EE&07&&&&&&&|shr&dh,0x7
&&|.&&66:C1E2&07&&&&|shl&dx,0x7
0040125A&&|.&&C1EA&08&&&&&&&|shr&edx,0x8
0040125D&&|.&&C0EE&07&&&&&&&|shr&dh,0x7
&&|.&&66:C1EA&05&&&&|shr&dx,0x5
&&|.&&8BFA&&&&&&&&&&|mov&edi,edx
&&|.&&33FE&&&&&&&&&&|xor&edi,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
&&|.&&8BD7&&&&&&&&&&|mov&edx,edi
0040126A&&|.&&81E2&FF000000&|and&edx,0xFF
&&|.&&51&&&&&&&&&&&&|push&ecx
&&|.&&52&&&&&&&&&&&&|push&edx
&&|.&&BA&&&&|mov&edx,0x8
&&|.&&91&&&&&&&&&&&&|xchg&eax,ecx
&&|.&&83F8&03&&&&&&&|cmp&eax,0x3
0040127B&&|.&&7F&0F&&&&&&&&&|jg&short&cycle.0040128C
0040127D&&|.&&F6E2&&&&&&&&&&|mul&dl
0040127F&&|.&&5A&&&&&&&&&&&&|pop&edx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.004010BA
&&|.&&83C0&08&&&&&&&|add&eax,0x8
&&|.&&91&&&&&&&&&&&&|xchg&eax,ecx
&&|.&&D3C0&&&&&&&&&&|rol&eax,cl
&&|.&&33C2&&&&&&&&&&|xor&eax,edx
&&|.&&D3C8&&&&&&&&&&|ror&eax,cl
0040128A&&|.&&EB&0D&&&&&&&&&|jmp&short&cycle.
0040128C&&|&&&83E8&03&&&&&&&|sub&eax,0x3
0040128F&&|.&&F6E2&&&&&&&&&&|mul&dl
&&|.&&5A&&&&&&&&&&&&|pop&edx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.004010BA
&&|.&&91&&&&&&&&&&&&|xchg&eax,ecx
&&|.&&D3C3&&&&&&&&&&|rol&ebx,cl
&&|.&&33DA&&&&&&&&&&|xor&ebx,edx
&&|.&&D3CB&&&&&&&&&&|ror&ebx,cl
&&|&&&59&&&&&&&&&&&&|pop&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.004010BA
0040129A&&|.&&41&&&&&&&&&&&&|inc&ecx
0040129B&&|.&&83F9&08&&&&&&&|cmp&ecx,0x8
0040129E&&|.^&0F85&71FFFFFF&\jnz&cycle.
&&\.&&C3&&&&&&&&&&&&retn
第二个call
&&/$&&5F&&&&&&&&&&&&pop&edi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.004010BA
&&|.&&59&&&&&&&&&&&&pop&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.004010BA
&&|.&&57&&&&&&&&&&&&push&edi
&&|.&&81F9&&cmp&ecx,0x80
&&|.&&7E&55&&&&&&&&&jle&short&cycle.
0040119B&&|.&&51&&&&&&&&&&&&push&ecx
0040119C&&|.&&8BF1&&&&&&&&&&mov&esi,ecx
0040119E&&|.&&81E1&FF000000&and&ecx,0xFF
&&|.&&8BF8&&&&&&&&&&mov&edi,eax
&&|.&&83F9&08&&&&&&&cmp&ecx,0x8
&&|.&&7E&05&&&&&&&&&jle&short&cycle.
004011AB&&|.&&8BFB&&&&&&&&&&mov&edi,ebx
004011AD&&|.&&C1E9&04&&&&&&&shr&ecx,0x4
&&|&&&C1C7&08&&&&&&&/rol&edi,0x8
&&|.&&D1E9&&&&&&&&&&|shr&ecx,1
&&|.^&75&F9&&&&&&&&&\jnz&short&cycle.
&&|.&&C1EE&08&&&&&&&shr&esi,0x8
004011BA&&|.&&23FE&&&&&&&&&&and&edi,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
004011BC&&|.&&81E7&FF000000&and&edi,0xFF
&&|.&&59&&&&&&&&&&&&pop&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.004010BA
&&|&&&BE&&&&mov&esi,0x80
&&|&&&85FE&&&&&&&&&&/test&esi,edi
004011CA&&|.&&74&20&&&&&&&&&|je&short&cycle.004011EC
004011CC&&|.&&33FE&&&&&&&&&&|xor&edi,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
004011CE&&|.&&57&&&&&&&&&&&&|push&edi
004011CF&&|.&&81E1&00FF0000&|and&ecx,0xFF00
&&|.&&87CE&&&&&&&&&&|xchg&esi,ecx
&&|.&&32E9&&&&&&&&&&|xor&ch,cl
&&|.&&33F1&&&&&&&&&&|xor&esi,ecx
004011DB&&|.&&87F1&&&&&&&&&&|xchg&ecx,esi&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.
004011DD&&|.&&51&&&&&&&&&&&&|push&ecx
004011DE&&|.&&FF05&&|inc&dword&ptr&ds:[0x402182]&&//这里很重要
&&|.&&E8&A7FFFFFF&&&|call&cycle.
&&|.&&5F&&&&&&&&&&&&|pop&edi&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;&&cycle.004010BA
004011EA&&|.^&EB&D7&&&&&&&&&|jmp&short&cycle.
004011EC&&|&&&D1EE&&&&&&&&&&|shr&esi,1
004011EE&&|.^&75&D8&&&&&&&&&\jnz&short&cycle.
&&\&&&C3&&&&&&&&&&&&retn
这里用到的数据实际上是第一个call里面对用户名和注册码进行运算后的数据。
inc&dword&ptr&ds:[0x402182]这里自加的数据,实际上是
0040109C&&/$&&C705&&mov&dword&ptr&ds:[0xxFEDCBA98
第二次下断的第一句。这个数据开始作者就定义了,只是会根据实际输入的用户名和注册码运算后,再次改变这个数据。
上面这二个call对输入的用户名和注册码进行运算后,ecx必须要为1。要不然就跳向结束了。当ecx=1后,跳到后半部分的算法运算了,到这里程序还只用到了前8位数据,后8后数据还没有用到。
&&|&&\A1&&&&mov&eax,dword&ptr&ds:[0x402168]&
&&|.&&8B1D&6C214000&mov&ebx,dword&ptr&ds:[0x40216C]&//用户名的后8位数据
0040112B&&|.&&33C3&&&&&&&&&&xor&eax,ebx
0040112D&&|.&&0&xor&eax,dword&ptr&ds:[0x402182]&//就是刚刚提到的那个比较重要的数据
&&|.&&0D&&&&or&eax,0x
&&|.&&25&&&&and&eax,0x
0040113D&&|.&&0&xor&eax,dword&ptr&ds:[0x402179]
&&|.&&000&xor&eax,dword&ptr&ds:[0x40217D]//对注册码的后8位进行异或
&&|.^&75&CF&&&&&&&&&jnz&short&cycle.0040111A&//ZF必须要为1,不死就死了
0040114B&&|.&&E8&2B000000&&&call&cycle.0040117B
程序的算法一共分为二处,第一处运算完成为ecx=1,第二处运算完成后ZF=1。知道这个条件后,就可以自已动手写一个注册机了。下面是用masm32写的一个注册机。
.model&flat,stdcall
option&casemap:none
include&windows.inc
include&kernel32.inc
include&user32.inc
include&masm32.inc
includelib&kernel32.lib
includelib&user32.lib
includelib&masm32.lib
crackcallA&proto
crackcallB&proto
crackcallC&proto
crackcallD&proto
value&&&&&dword&0fedcba98h
printname&db&'input&name:&',0
printpawd&db&'input&password:&',0
szFmt&&db&'done!!!!',0
username&&db&17&dup&(0)
password&db&17&dup&(0)
&&invoke&StdOut,addr&printname
&&invoke&StdIn,addr&username,lengthof&username
&&invoke&StdOut,addr&printpawd
&&invoke&StdIn,addr&password,lengthof&password
&&xor&ecx,ecx
&&lea&esi,username
&&lea&edi,username
usernameloop:
&&mov&al,byte&ptr&[esi]
&&or&al,al
&&jz&usernamelab
&&jmp&usernameloop
usernamelab:
&&mov&eax,10h
&&mov&edx,ecx
&&sub&eax,ecx
&&xchg&eax,ecx
&&mov&esi,edi
&&add&edi,edx
&&rep&movs&byte&ptr&es:[edi],byte&ptr&[esi]
&&xor&ecx,ecx
&&lea&esi,password
passwordloop:
&&mov&al,byte&ptr&[esi]
&&or&al,al
&&je&passwordcount
&&jmp&passwordloop
passwordcount:
&&cmp&ecx,011h
&&jnz&over
&&call&crackcallA
&&mov&ecx,0ff01h
&&push&ecx
&&call&crackcallB
&&cmp&ecx,1
&&call&crackcallC&
&&mov&eax,dword&ptr&[username+8]
&&mov&ebx,dword&ptr&[username+12]
&&xor&eax,ebx
&&xor&eax,dword&ptr&[value]
&&or&&eax,h
&&and&eax,h
&&xor&eax,dword&ptr&[password+8]
&&xor&eax,dword&ptr&[password+12]
&&call&crackcallD
&&invoke&StdOut,addr&szFmt
&&invoke&ExitProcess,0
crackcallA&proc
&&mov&eax,dword&ptr&[username]
&&mov&ebx,dword&ptr&[username+4]
&&xor&eax,dword&ptr&[password]
&&xor&ebx,dword&ptr&[password+4]
&&and&eax,07f3f1f0fh
&&and&ebx,h
&&xor&ecx,ecx
&&mov&&&&&esi,&eax
&&mov&&&&&edi,&ebx
&&shl&&&&&esi,&cl
&&shl&&&&&edi,&cl
&&and&&&&&esi,&h
&&and&&&&&edi,&h
&&mov&&&&&edx,&esi
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shr&&&&&dx,&1
&&mov&&&&&esi,&edx
&&mov&&&&&edx,&edi
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shl&&&&&dx,&7
&&shr&&&&&edx,&8
&&shr&&&&&dh,&7
&&shr&&&&&dx,&5
&&mov&&&&&edi,&edx
&&xor&&&&&edi,&esi
&&mov&&&&&edx,&edi
&&and&&&&&edx,&0FFh&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&push&&&&ecx
&&push&&&&edx
&&mov&&&&&edx,&8
&&xchg&&&&eax,&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&cmp&&&&&eax,&3
&&jg&&&&&&lab1
&&mul&&&&&dl
&&pop&&&&&edx
&&add&&&&&eax,&8
&&xchg&&&&eax,&ecx
&&rol&&&&&eax,&cl&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&xor&&&&&eax,&edx
&&ror&&&&&eax,&cl&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&jmp&&&&&lab2
&&sub&&&&&eax,&3
&&mul&&&&&dl
&&pop&&&&&edx
&&xchg&&&&eax,&ecx
&&rol&&&&&ebx,&cl
&&xor&&&&&ebx,&edx
&&ror&&&&&ebx,&cl
&&pop&&&&&ecx
&&inc&&&&&ecx&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&cmp&&&&&ecx,&8
&&jnz&&&&&begin
crackcallA&endp
crackcallB&proc
&&pop&&&&&edi
&&pop&&&&&ecx
&&push&&&&edi
&&cmp&&&&&ecx,&080h
&&jle&&&&&done1
&&push&&&&ecx
&&mov&&&&&esi,&ecx
&&and&&&&&ecx,&0FFh
&&mov&&&&&edi,&eax
&&cmp&&&&&ecx,&8
&&jle&&&&&lab1
&&mov&&&&&edi,&ebx
&&shr&&&&&ecx,&4
&&rol&&&&&edi,&8
&&shr&&&&&ecx,&1
&&jnz&&&&&lab1
&&shr&&&&&esi,&8
&&and&&&&&edi,&esi
&&and&&&&&edi,&0FFh
&&pop&&&&&ecx
&&mov&&&&&esi,&080h
&&test&&&&esi,&edi
&&je&&&&&&lab2
&&xor&&&&&edi,&esi
&&push&&&&edi
&&and&&&&&ecx,&0FF00h
&&xchg&&&&esi,&ecx
&&xor&&&&&ch,&cl
&&xor&&&&&esi,&ecx
&&xchg&&&&ecx,&esi
&&push&&&&ecx
&&inc&&&&&dword&ptr&[value]
&&call&&&&crackcallB
&&pop&&&&&edi
&&jmp&&&&&lab3
&&shr&&&&&esi,&1
&&jnz&&&&&lab4
crackcallB&endp
crackcallC&proc
&&xor&ecx,ecx
&&lea&edi,password
&&mov&al,byte&ptr&[edi]
&&mov&byte&ptr&[edi],al
&&call&crackcallA
&&mov&ecx,0ff01h
&&push&ecx
&&call&crackcallB
&&;add&esp,4
&&cmp&ecx,1
&&je&retncall
&&lea&edi,password
&&mov&al,byte&ptr&[edi]
&&;mov&byte&ptr&[edi],al
&&;mov&al,byte&ptr&[edi]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi],'0'
&&lea&edi,password
&&mov&al,&byte&ptr&[edi+1]
&&mov&byte&ptr&[edi+1],al
&&mov&al,byte&ptr&[edi+1]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+1],'0'
&&lea&edi,password
&&mov&al,&byte&ptr&[edi+2]
&&mov&byte&ptr&[edi+2],al
&&mov&al,byte&ptr&[edi+2]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+2],'0'
&&lea&edi,password
&&mov&al,byte&ptr&&[edi+3]
&&mov&byte&ptr&[edi+3],al
&&mov&al,byte&ptr&[edi+3]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+3],'0'
&&lea&edi,password
&&mov&al,byte&ptr&&[edi+4]
&&mov&byte&ptr&[edi+4],al
&&mov&al,byte&ptr&[edi+4]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+4],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+5]
&&mov&byte&ptr&[edi+5],al
&&mov&al,byte&ptr&[edi+5]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+5],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+6]
&&mov&byte&ptr&[edi+6],al
&&mov&al,byte&ptr&[edi+6]
&&cmp&al,07eh
&&jle&tap0
&&lea&edi,password
&&mov&byte&ptr&[edi+6],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+7]
&&mov&byte&ptr&[edi+7],al
&&mov&al,byte&ptr&[edi+7]
&&cmp&al,07eh
&&jle&tap0
crackcallC&endp
crackcallD&proc
&&lea&edi,password
&&mov&al,byte&ptr&[edi+8]
&&mov&byte&ptr&[edi+8],al
&&mov&eax,dword&ptr&[username+8]
&&mov&ebx,dword&ptr&[username+12]
&&xor&eax,ebx
&&xor&eax,dword&ptr&[value]
&&or&&eax,h
&&and&eax,h
&&xor&eax,dword&ptr&[password+8]
&&xor&eax,dword&ptr&[password+12]
&&jz&retncall
&&lea&edi,password
&&mov&al,byte&ptr&[edi+8]
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+8],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+9]
&&mov&byte&ptr&[edi+9],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+9],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0ah]
&&mov&byte&ptr&[edi+0ah],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0ah],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0bh]
&&mov&byte&ptr&[edi+0bh],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0bh],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0ch]
&&mov&byte&ptr&[edi+0ch],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0ch],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0dh]
&&mov&byte&ptr&[edi+0dh],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0dh],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0eh]
&&mov&byte&ptr&[edi+0eh],al
&&cmp&al,07eh
&&jle&tap0
&&mov&byte&ptr&[edi+0eh],'0'
&&lea&edi,password
&&mov&al,byte&ptr&[edi+0fh]
&&mov&byte&ptr&[edi+0fh],al
&&cmp&al,07eh
&&jle&tap0
crackcallD&endp
测试成功,附上二种计算正确的注册码:
;7422222VSpA3222
【分析总结】
其实编写注册机,注册机里面的算法可以照抄程序本身的,只是加了一些测试环节。我们只需要满足二个条件就可以了。Ecx=1和zf=1。如果满足这二个条件,那么注册码就是正解的。每个用户名可以生成多个注册码。所以用户名和注册码并不是唯一的。
注册日期: Apr 2004
现金: 3940 Kx
致谢数: 39
获感谢文章数:64获会员感谢数:449
, 20:35:03
最初由 obabydbg发布
作者:obabydbg
这个crack早在几年前就被CCDebuger的一篇文章提到过,不过他只是讲解了一些爆破的方法。今天刚好有空,捡起来分析了一下。如果有什么分析不对的地方还请大家指出。第一次发贴,希望可以起来抛砖引玉的效果。还请个位高手多多指点。先谢谢了!!
工具:OD+editplu...
图片见:/showpost.php?postid=292659
邀请码己发你短信了。
注册日期: Apr 2011
现金: 118 Kx
致谢数: 47
获感谢文章数:3获会员感谢数:3
, 20:14:08
最初由 obabydbg发布
由于是第一次发贴,图片不怎么如何上传,就不附图了,直接上代码。希望这次可以看得比较清楚
【软件名称】cycle.EXE
【应用平台】Win9x/NT/2000/XP
【软件大小】8K
【破解声明】破解只是感兴趣,无其它目的。失误之处敬请诸位大侠赐教!
【破解工具】PEiD,OD,&UE...
楼主,关键是CM啊。麻烦传个附件,或加个传送门啊
<img src="images/bar/stars09.gif" border="0" alt="『资源下载』版主论坛督察官核心管理团常务">
『资源下载』版主论坛督察官核心管理团常务
注册日期: May 2004
现金: 7415 Kx
致谢数: 16
获感谢文章数:292获会员感谢数:389
, 09:48:47
注册日期: May 2012
现金: 20 Kx
致谢数: 304
获感谢文章数:13获会员感谢数:44
, 10:51:11
我记得我曾经看过一个视频《练习从OD中提取代码写注册机》&就是直接拿出算法部分代码写成个小程序做注册机。
注册日期: Nov 2012
现金: 99 Kx
致谢数: 10
获感谢文章数:0获会员感谢数:0
, 14:02:55
最初由 地狱怪客发布
我记得我曾经看过一个视频《练习从OD中提取代码写注册机》&就是直接拿出算法部分代码写成个小程序做注册机。
直接扣出来用内联汇编?
注册日期: Apr 2012
现金: 12 Kx
获感谢文章数:0获会员感谢数:0
, 15:10:13
写的很详细啊
注册日期: May 2012
现金: 20 Kx
致谢数: 304
获感谢文章数:13获会员感谢数:44
, 15:22:39
最初由 a糊涂虫发布
直接扣出来用内联汇编?
en&百度下就看到了
注册日期: Nov 2012
现金: 99 Kx
致谢数: 10
获感谢文章数:0获会员感谢数:0
, 15:50:29
最初由 地狱怪客发布
en&百度下就看到了
偷懒只能搬起石头砸自己的脚
注册日期: Jul 2013
现金: 100 Kx
致谢数: 12
获感谢文章数:3获会员感谢数:3
, 17:00:51
有些代码是扣出来的,后续研究后再更新
注册日期: Jul 2013
现金: 380 Kx
获感谢文章数:0获会员感谢数:0
, 09:07:12
写的还是很详细的,学习啦
注册日期: Jun 2013
现金: 611 Kx
获感谢文章数:0获会员感谢数:0
, 11:31:55
太长了,看得两眼发昏。。。不过还是忍着看了个大概
注册日期: Apr 2013
现金: 416 Kx
获感谢文章数:3获会员感谢数:4
, 15:59:08
注册日期: Aug 2012
现金: 80 Kx
获感谢文章数:0获会员感谢数:0
, 22:52:07
该主题: "【原创】一个Cracker代码分析及注册机编写,可以申请邀请码吗?" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
您不可以发表主题
您不可以回复帖子
您不可以上传附件
您不可以编辑自己的帖子
论坛论坛启用
用户控制面板
会员在线状态
『看雪众测/众包』
『Android 安全』
『Android 开发』
『iOS安全』
『求助问答』
『经典问答』
『资料导航』
『软件调试逆向』
『密码学』
『编程技术』
『C32Asm』
『MDebug』
『安全工具开发』
『加壳与脱壳』
『CrackMe&ReverseMe』
『资源下载』
『WEB安全』
『漏洞分析』
『外文翻译』
『招聘专区』
『职业生涯』
『15PB培训』
『麦洛克菲培训』
『茶余饭后』
『安全资讯』
『论坛活动』
6)PEDIY Crackme竞赛2009
7)看雪十周年专版
8)腾讯公司2010软件安全竞赛
9)2011 Exploit Me竞赛
『图书项目版』
《加密与解密(第三版)》
《C++反汇编与逆向分析技术揭秘》
《Android软件安全与逆向分析》
『论坛版务』
所有时间均为北京时间, 现在的时间是 .
&&& 看雪学院()
| 提供带宽资源
|&微信公众帐号:}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信