![]() |
|
![]() 初级会员
|
【文章标题】: echap511破文 【文章作者】: xitian 【作者邮箱】: luotuo512@163.com 【作者主页】: hi.baidu.com\luotuo512 【作者QQ号】: 253269872 【软件名称】: echap511 【软件大小】: 4k 【下载地址】: 自己搜索下载 【加壳方式】: 无 【保护方式】: 序列号 【编写语言】: masm 【使用工具】: OD 计算器 【操作平台】: winxp sp2 【软件介绍】: 《加密解密》后附带的习题 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 【详细过程】 找到关键子函数如下 004010C9 /$ 56 PUSH ESI ; echap511.00401041 004010CA |. 57 PUSH EDI 004010CB |. 51 PUSH ECX 004010CC |. 33F6 XOR ESI,ESI 004010CE |. 33FF XOR EDI,EDI 004010D0 |. B9 08000000 MOV ECX,8 004010D5 |. BE 44304000 MOV ESI,echap511.00403044 ; ASCII "123456" 004010DA |> 8036 32 /XOR BYTE PTR DS:[ESI],32 004010DD |. 46 |INC ESI 004010DE |.^ E2 FA \LOOPD SHORT echap511.004010DA 004010E0 |. BE 44304000 MOV ESI,echap511.00403044 ; ASCII "123456" 004010E5 |. B9 04000000 MOV ECX,4 004010EA |> 8A06 /MOV AL,BYTE PTR DS:[ESI] 004010EC |. 8A5E 01 |MOV BL,BYTE PTR DS:[ESI+1] 004010EF |. 32C3 |XOR AL,BL 004010F1 |. 8887 4C304000 |MOV BYTE PTR DS:[EDI+40304C],AL 004010F7 |. 83C6 02 |ADD ESI,2 004010FA |. 47 |INC EDI 004010FB |.^ E2 ED \LOOPD SHORT echap511.004010EA 004010FD |. BE 4C304000 MOV ESI,echap511.0040304C 00401102 |. 8A06 MOV AL,BYTE PTR DS:[ESI] 00401104 |. 8A5E 01 MOV BL,BYTE PTR DS:[ESI+1] 00401107 |. 32C3 XOR AL,BL 00401109 |. 8A5E 02 MOV BL,BYTE PTR DS:[ESI+2] 0040110C |. 8A4E 03 MOV CL,BYTE PTR DS:[ESI+3] 0040110F |. 32D9 XOR BL,CL 00401111 |. 32C3 XOR AL,BL 00401113 |. B9 08000000 MOV ECX,8 00401118 |. BE 44304000 MOV ESI,echap511.00403044 ; ASCII "123456" 0040111D |> 3006 /XOR BYTE PTR DS:[ESI],AL 0040111F |. 46 |INC ESI 00401120 |.^ E2 FB \LOOPD SHORT echap511.0040111D 00401122 |. B9 08000000 MOV ECX,8 00401127 |. BE 44304000 MOV ESI,echap511.00403044 ; ASCII "123456" 0040112C |. BF 08304000 MOV EDI,echap511.00403008 00401131 |> 8A06 /MOV AL,BYTE PTR DS:[ESI] 00401133 |. 3A07 |CMP AL,BYTE PTR DS:[EDI] 00401135 |. 75 1D |JNZ SHORT echap511.00401154 00401137 |. 46 |INC ESI 00401138 |. 47 |INC EDI 00401139 |.^ E2 F6 \LOOPD SHORT echap511.00401131 0040113B |. 6A 40 PUSH 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL 0040113D |. 68 35304000 PUSH echap511.00403035 ; |Title = "Crackme 1.0" 00401142 |. 68 10304000 PUSH echap511.00403010 ; |Text = "Good Work Cracker" 00401147 |. FF35 54304000 PUSH DWORD PTR DS:[403054] ; |hOwner = 00010430 ('Pusillus Crackme 1.0',class='#32770') 0040114D |. E8 3C000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA 00401152 |. EB 17 JMP SHORT echap511.0040116B 00401154 |> 6A 30 PUSH 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL 00401156 |. 68 35304000 PUSH echap511.00403035 ; |Title = "Crackme 1.0" 0040115B |. 68 22304000 PUSH echap511.00403022 ; |Text = "Bad Serial, Sorry!" 00401160 |. FF35 54304000 PUSH DWORD PTR DS:[403054] ; |hOwner = 00010430 ('Pusillus Crackme 1.0',class='#32770') 00401166 |. E8 23000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA 0040116B |> 5F POP EDI 0040116C |. 5E POP ESI 0040116D |. 59 POP ECX 0040116E \. C3 RETN 观察可以发现,输入的最好是8个字符,虽然输入少于8个多于8个都不会报错,多于8个时缓冲区里只能存9个字符。所以这个crackme有多个序列号。只要前八个正确即可。 计算过程: 输入12345678即 31 32 33 34 35 36 37 38 字符串1 每个字符与32异或得到03 00 01 06 07 04 05 0A 字符串2 这八个字符按顺序两两异或得到03 07 03 0F 字符串3 这四个字符两两异或得到04 0c分别放入al和bl中。 al和bl异或得到08放入al中 al与字符串2中的每个字符异或得到0B 08 09 0E 0F 0C 0D 02 字符串4 程序中有静态字符串 71 18 59 1B 79 42 45 4C 字符串5 字符串4与字符串5比较,不等,失败。 写注册机过程: 我还真是不会写,我在网上找了一下,找到了这个。 #include void main() { char middle_1[4]; char middle_2[2]; char b[8]={0x71,0x18,0x59,0x1B,0x79,0x42,0x45,0x4C} ; middle_1[0]=b[0]^b[1]; middle_1[1]=b[2]^b[3]; middle_1[2]=b[4]^b[5]; middle_1[3]=b[6]^b[7]; cout<<middle_1[0]<<middle_1[1]<<middle_1[2]<<middle_1[3]<<endl; middle_2[0]=middle_1[0]^middle_1[1]; middle_2[1]=middle_1[2]^middle_1[3]; char al=middle_2[0]^middle_2[1]; cout<<al<<endl; for(int i=0;i<=8;i++) { b[i]=b[i]^al; b[i]=b[i]^0x32; cout<<b[i]<<' '; } } 可是我怎么都看不懂,怎么办,加密过程我已经分析出来了,解密不就是加密的逆过程吗,能难倒我吗? 一步一步来吧。设正确序列号为a1a2……a8.数据块中的静态字符串为c1c2……c8,al即计算过程中al的字符。 字符串c已知,求字符串a。这不就解方程吗。九个方程,九个未知数,可解。 解法: 首先要了解异或算符的特点。 任何数与其自身异或:结果为0; 任何数与 1 异或:求反; 任何数与 0 异或:保持不变。 异或运算可以将指定位求反而不影响其它位。 异或运算可用于判断两个操作数是否相等 异或运算可用于将数据清零。 字符1与字符2异或,然后再与字符2异或,可以还原成字符1. 异或符合分配律,交换律,结合律。 根据以上性质,第九个方程中32为8个,所以 式1 1.JPG下载此附件需要消耗2Kx,下载中会自动扣除。 方程1可以写为: 式2 代入上一个方程为: 式4 字符串c为71 18 59 1B 79 42 45 4C 所以al=19. 代入前八个方程得字符串a为:5A 33 72 30 52 69 6E 67 以上是字符串的asc码,还原为字符即:式3 Z3r0Ring 验证正确。 现在搞清楚了原理,我可以开始写注册机了。 把上面那个程序改进了一下。 #include <stdio.h> #include <conio.h> void main() { int i; char c[8]={0x71,0x18,0x59,0x1B,0x79,0x42,0x45,0x4C}; char a[8]; char b=0; for(i=0;i<8;i++) b^=c[i]; for(i=0;i<8;i++) { a[i]=c[i]^b^0x32; printf("%c",a[i]); } getch(); } 写的过程中犯了一个错误,a[i]=c[i]^b^0x32;,我写成了a[i]=c[i]^b^32,debug了好几遍才发现这个错误,真是惭愧惭愧。 -------------------------------------------------------------------------------- 【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢! 2008年06月08日 0:43:53
|
||
|
![]() |
| 书签 |
![]() |
该主题: "【原创】echap511的破文" 因在一年内没有任何回复而自动关闭。 如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。 |
| 主题工具 | |
| 显示模式 | |
|
|
|||||
相似的主题
|
||||
| 主题 | 主题作者 | 版面 | 回复 | 最后发表 |
| 【求助】菜鸟恳求此股票软件的破文,条件您提 | 我行我色 | 『求助问答区』 | 0 | 2008-03-23 16:45:42 |
| 【原创】特意为新手准备的破文 王牌拍拍信息提取器V1.0分析破解 | 不死神鸟 | 『求助问答区』 | 138 | 2008-01-06 13:19:32 |
| 【分享】各类算法学习(windrand各类应用密码学CrackMe的破文) | 天高飞扬 | 『CrackMe◇ReverseMe』 | 6 | 2007-11-15 08:08:15 |
| 【分享】<<发两个简简单单的CrackMe,大家玩玩?>> 的破文 | 个人兴趣 | 『CrackMe◇ReverseMe』 | 6 | 2007-09-23 09:30:15 |
| 关于第二版习题echap511的疑问? | kuangtudazuo | 『经典问答』 | 2 | 2004-05-25 10:12:19 |