edit_note帖子
103
stars积分
63,655
event加入
2011-01-14
电脑网络
【韩雅家族】汇编破解教程
schedule发表于 2012-07-28 11:28:00
visibility查看 894
chat_bubble回复 27
#1 楼主
现在给希望成为高手的菜鸟们做些高手基础教程。*br**br*首先就做破解教程吧。*br**br*学会了破解,那些所谓木马免杀就纯粹小菜一碟。*br**br*而且能深刻理解计算机的原理和编程实现。*br**br*废话不说,就拿看雪的一个程序来做例子。。。*br**br*工具准备:*br**br*ollydbg*br**br*和少许的汇编知识*br**br*bad serial,sorry*br**br*现在就查找这个*br**br*查找文本参考*br*00401154 |> \6A 30 PUSH 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL*br*00401156 |. 68 35304000 PUSH crackme.00403035 ; |Title = “Crackme 1.0“*br*0040115B |. 68 22304000 PUSH crackme.00403022 ; |Text = “Bad Serial, Sorry!“*br*00401160 |. FF35 54304000 PUSH DWORD PTR DS:*403054* ; |hOwner = NULL*br*00401166 |. E8 23000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA*br**br*显然这里是错误提示,弹出的对话框。*br**br*由红色的那条线看到,是由00401135 |. /75 1D |JNZ SHORT crackme.00401154*br**br*跳到错误提示的。*br*00401122 |. B9 08000000 MOV ECX,8*br*00401127 |. BE 44304000 MOV ESI,crackme.00403044*br*0040112C |. BF 08304000 MOV EDI,crackme.00403008*br*00401131 |> 8A06 /MOV AL,BYTE PTR DS:*ESI**br*00401133 |. 3A07 |CMP AL,BYTE PTR DS:*EDI**br*00401135 |. 75 1D |JNZ SHORT crackme.00401154*br**br*显然这里是校验注册码。逐位校验,一共8位(MOV ECX,8),若有一位不同就说明注册码不对了。*br**br*现在看看输入的数据保存在哪里?利用getdlgitemtext这个函数做中断*br*00401099 |. 6A 0A PUSH 0A ; /Count = A (10.)*br*0040109B |. 68 44304000 PUSH crackme.00403044 ; |Buffer = crackme.00403044*br*004010A0 |. 68 B80B0000 PUSH 0BB8 ; |ControlID = BB8 (3000.)*br*004010A5 |. FF35 54304000 PUSH DWORD PTR DS:*403054* ; |hWnd = NULL*br*004010AB |. E8 D2000000 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA*br**br*0040109B |. 68 44304000 PUSH crackme.00403044这个是保存数据的参数 地址是:00403044*br**br*004010D0 |. B9 08000000 MOV ECX,8*br*004010D5 |. BE 44304000 MOV ESI,crackme.00403044*br*004010DA |> 8036 32 /XOR BYTE PTR DS:*ESI*,32*br*004010DD |. 46 |INC ESI*br*004010DE |.^ E2 FA \LOOPD SHORT crackme.004010DA*br*004010E0 |. BE 44304000 MOV ESI,crackme.00403044*br*004010E5 |. B9 04000000 MOV ECX,4*br*004010EA |> 8A06 /MOV AL,BYTE PTR DS:*ESI**br*004010EC |. 8A5E 01 |MOV BL,BYTE PTR DS:*ESI+1**br*004010EF |. 32C3 |XOR AL,BL*br*004010F1 |. 8887 4C304000 |MOV BYTE PTR DS:*EDI+40304C*,AL*br*004010F7 |. 83C6 02 |ADD ESI,2*br*004010FA |. 47 |INC EDI*br*004010FB |.^ E2 ED \LOOPD SHORT crackme.004010EA*br*004010FD |. BE 4C304000 MOV ESI,crackme.0040304C*br*00401102 |. 8A06 MOV AL,BYTE PTR DS:*ESI**br*00401104 |. 8A5E 01 MOV BL,BYTE PTR DS:*ESI+1**br*00401107 |. 32C3 XOR AL,BL*br*00401109 |. 8A5E 02 MOV BL,BYTE PTR DS:*ESI+2**br*0040110C |. 8A4E 03 MOV CL,BYTE PTR DS:*ESI+3**br*0040110F |. 32D9 XOR BL,CL*br**br*004010DA |> /8036 32 /XOR BYTE PTR DS:*ESI*,32 ; 第一次处理*br*004010DD |. |46 |INC ESI*br*004010DE |.^\E2 FA \LOOPD SHORT crackme.004010DA*br**br**br*应该看得懂这几句的意思吧,就是把输入的注册码12345678对应的*码31,32,33,34,35,36,37,38分别和32H异或运算*br*运算后是:3,0,1,6,7,4,5,a*br**br**br*004010E5 |. B9 04000000 MOV ECX,4*br*004010EA |> 8A06 /MOV AL,BYTE PTR DS:*ESI* ; 第二次处理*br*004010EC |. 8A5E 01 |MOV BL,BYTE PTR DS:*ESI+1**br*004010EF |. 32C3 |XOR AL,BL*br*004010F1 |. 8887 4C304000 |MOV BYTE PTR DS:*EDI+40304C*,AL*br*004010F7 |. 83C6 02 |ADD ESI,2*br*004010FA |. 47 |INC EDI*br*004010FB |.^ E2 ED \LOOPD SHORT crackme.004010EA*br**br*这里是把与32h异或运算后的结果,每两位异或然后保存在40304c中即8位变4位*br**br*004010FD |. BE 4C304000 MOV ESI,crackme.0040304C ; 第三次处理*br*00401102 |. 8A06 MOV AL,BYTE PTR DS:*ESI**br*00401104 |. 8A5E 01 MOV BL,BYTE PTR DS:*ESI+1**br*00401107 |. 32C3 XOR AL,BL*br*00401109 |. 8A5E 02 MOV BL,BYTE PTR DS:*ESI+2**br*0040110C |. 8A4E 03 MOV CL,BYTE PTR DS:*ESI+3**br*0040110F |. 32D9 XOR BL,CL*br*00401111 |. 32C3 XOR AL,BL*br**br*这里4位变2位*br**br*最后变一位保存在al中,最后al的值是8*br**br*最后这里00401113 |. B9 08000000 MOV ECX,8*br*00401118 |. BE 44304000 MOV ESI,crackme.00403044*br*0040111D |> 3006 /XOR BYTE PTR DS:*ESI*,AL*br*0040111F |. 46 |INC ESI*br*00401120 |.^ E2 FB \LOOPD SHORT crackme.0040111D*br**br*是将每一位跟al异或*br**br*保存在BYTE PTR DS:*ESI**br**br*数据将变成b,8,9,e,f,c,d,2*br**br*总的来讲流程是:*br*1 原始数据*br*与32h异或 31,32,33,34,35,36,37,38*br*2 异或后8》4,4》2,2》1 保存在al,这个数据时al=8*br**br*3 与al异或*br**br*生成与注册码用同样方法生成的数据比较,敏合即注册码正确*br**br*我们来看看结果00403044这里保存了运算结果,看结果跟我们前面说的一样。b,8,9,e,f,c,d,2*br**br*好了我们看看正确的结果是什么?*br**br*0040112C |. BF 08304000 MOV EDI,crackme.00403008*br*00403008保存了正确的结果:分别是:71,18,59,1b,79,42,45,4c*br**br*那么如何从这些数据得到正确的注册码呢?*br*对了,就像是数学中类似的反函数了,就是将数据反过来运算一次就能得到原始数据*br**br*将71,18,59,1b,79,42,45,4c*br*进行第二部2 异或后8》4,4》2,2》1 保存在al,此时al为19*br**br*将71,18,59,1b,79,42,45,4c 与19异或*br**br*将71,18,59,1b,79,42,45,4c与 32异或(注意这里32,19和其他数字都是16进制的)*br**br*最后得到 5a,33,72,30,52,69,6e,67*br*对应*:Z,3,r,0,R,i,n,g(Z3r0Ring)*br**br*我们试试看。。。。。。。。。。。*br**br*破解成功了。*br**br*
全部回复 (27)
2012-07-28 11:28:00
沙发
你牛,我顶!
2012-07-28 11:31:00
板凳
看帖回帖是美德!
2012-07-28 11:38:00
地板
看帖回帖是美德!
2012-07-28 23:51:00
#5
看帖回帖是美德!
2012-08-01 20:14:00
#6
支持你!
2012-11-16 16:29:00
#7
看帖回帖是美德!
2012-11-16 23:52:00
#8
好帖,要顶!
2013-01-17 16:34:00
#9
支持你!
2013-01-22 09:44:00
#10
这帖不错,该顶!
2013-01-27 10:46:00
#11
你牛,我顶!
2013-01-27 10:46:00
#12
你牛,我顶!
2013-01-27 10:46:00
#13
你牛,我顶!
2013-01-27 10:46:00
#14
你牛,我顶!
2013-01-27 10:46:00
#15
你牛,我顶!
2013-01-29 15:29:00
#16
好帖,要顶!
2013-04-10 19:28:00
#17
看帖回帖是美德!
2013-11-17 06:17:00
#18
.
2015-04-18 10:51:00
#19
啦啦啦啦啦
2015-04-20 00:25:00
#20
,,
2015-04-25 13:46:00
#21
干的漂亮
登录 后才能回复
flag举报帖子