jcyhlh 发表于 2008-9-19 18:16

系统优化大师的算法分析

看到ps520写的破解夫子的"系统优化大师"过程,见http://www.52pojie.cn/read.php?tid-10268.html
他用了爆破,自己跟了一下,把自己的分析过程写出来,与大家共享,不过这里面有一个地方自己也不清楚,跟了半天也不知所以然,如果有知道的别忘了告一声,先谢了,说实在的象我等小鸟,写算法分析真难。
同样,先脱壳,aspack的很好脱,esp定律法。
找断点,经od字符串分析找到“软件注册成功!谢谢注册!”往上找,找到段首。如下:(注意,确认码要为数字)

0054E520 .55 push ebp
0054E521 .8BEC mov ebp,esp
0054E523 .81C4 84FEFFFFadd esp,-17C
0054E529 .33C9 xor ecx,ecx
0054E52B .898D A0FEFFFFmov dword ptr ss:,ecx
0054E531 .898D 98FEFFFFmov dword ptr ss:,ecx
0054E537 .898D 94FEFFFFmov dword ptr ss:,ecx
0054E53D .898D 8CFEFFFFmov dword ptr ss:,ecx
0054E543 .898D 88FEFFFFmov dword ptr ss:,ecx
0054E549 .898D 84FEFFFFmov dword ptr ss:,ecx
0054E54F .898D 90FEFFFFmov dword ptr ss:,ecx
0054E555 .898D 9CFEFFFFmov dword ptr ss:,ecx
0054E55B .898D A8FEFFFFmov dword ptr ss:,ecx
0054E561 .898D A4FEFFFFmov dword ptr ss:,ecx
0054E567 .8945 FCmov dword ptr ss:,eax
0054E56A .33C0 xor eax,eax
0054E56C .55 push ebp
0054E56D .68 F7E75400push 1_.0054E7F7
0054E572 .64:FF30push dword ptr fs:
0054E575 .64:8920mov dword ptr fs:,esp
0054E578 .8D95 A8FEFFFFlea edx,dword ptr ss:
0054E57E .8B45 FCmov eax,dword ptr ss:
0054E581 .8B80 FC020000mov eax,dword ptr ds:
0054E587 .E8 341CF0FFcall 1_.004501C0;获取确认码
0054E58C .83BD A8FEFFFF 00 cmp dword ptr ss:,0;和0比较,为空则跳
0054E593 .74 1Dje short 1_.0054E5B2
0054E595 .8D95 A4FEFFFFlea edx,dword ptr ss:
0054E59B .8B45 FCmov eax,dword ptr ss:
0054E59E .8B80 04030000mov eax,dword ptr ds:
0054E5A4 .E8 171CF0FFcall 1_.004501C0;获取假码
0054E5A9 .83BD A4FEFFFF 00 cmp dword ptr ss:,0;不为空则跳
0054E5B0 .75 0Fjnz short 1_.0054E5C1
0054E5B2 >B8 0CE85400mov eax,1_.0054E80C ;注册信息没有填写齐全
0054E5B7 .E8 58A8EFFFcall 1_.00448E14
0054E5BC .E9 CC010000jmp 1_.0054E78D
0054E5C1 >8D95 9CFEFFFFlea edx,dword ptr ss:
0054E5C7 .8B45 FCmov eax,dword ptr ss:
0054E5CA .8B80 04030000mov eax,dword ptr ds:
0054E5D0 .E8 EB1BF0FFcall 1_.004501C0;获取假码
0054E5D5 .8B85 9CFEFFFFmov eax,dword ptr ss:
0054E5DB .8D95 A0FEFFFFlea edx,dword ptr ss:
0054E5E1 .E8 7EB4EBFFcall 1_.00409A64
0054E5E6 .8B85 A0FEFFFFmov eax,dword ptr ss:
0054E5EC .50 push eax
0054E5ED .8D95 90FEFFFFlea edx,dword ptr ss:
0054E5F3 .8B45 FCmov eax,dword ptr ss:
0054E5F6 .8B80 FC020000mov eax,dword ptr ds:
0054E5FC .E8 BF1BF0FFcall 1_.004501C0;获取确认码
0054E601 .8B85 90FEFFFFmov eax,dword ptr ss:
0054E607 .E8 54B7EBFFcall 1_.00409D60;确认码的规则判断
0054E60C .B9 48000000mov ecx,48
0054E611 .99 cdq
0054E612 .F7F9 idiv ecx
0054E614 .8BC2 mov eax,edx
0054E616 .8D95 94FEFFFFlea edx,dword ptr ss:
0054E61C .E8 5FB6EBFFcall 1_.00409C80
0054E621 .8D85 94FEFFFFlea eax,dword ptr ss:
0054E627 .50 push eax
0054E628 .8D95 84FEFFFFlea edx,dword ptr ss:
0054E62E .8B45 FCmov eax,dword ptr ss:
0054E631 .8B80 FC020000mov eax,dword ptr ds:
0054E637 .E8 841BF0FFcall 1_.004501C0
0054E63C .8B85 84FEFFFFmov eax,dword ptr ss:
0054E642 .E8 19B7EBFFcall 1_.00409D60
0054E647 .8D95 88FEFFFFlea edx,dword ptr ss:
0054E64D .E8 2EFCFFFFcall 1_.0054E280------------------------第一次算法
0054E652 .8B85 88FEFFFFmov eax,dword ptr ss:-----------计算的字符串入eax
0054E658 .E8 03B7EBFFcall 1_.00409D60
0054E65D .8D95 8CFEFFFFlea edx,dword ptr ss:
0054E663 .E8 F8FCFFFFcall 1_.0054E360---------------------第二次计算,计算出一个字符串
0054E668 .8B95 8CFEFFFFmov edx,dword ptr ss:
0054E66E .58 pop eax
0054E66F .E8 9069EBFFcall 1_.00405004----------与一个数(怎么来的跟了半天也没有找到,郁闷)相连得出真正注册码
0054E674 .8B85 94FEFFFFmov eax,dword ptr ss:--------------------真码出现
0054E67A .8D95 98FEFFFFlea edx,dword ptr ss:
0054E680 .E8 DFB3EBFFcall 1_.00409A64
0054E685 .8B95 98FEFFFFmov edx,dword ptr ss:
0054E68B .58 pop eax
0054E68C .E8 AF6AEBFFcall 1_.00405140------------------判断
0054E691 .0F85 CC000000jnz 1_.0054E763--------------跳则出错
0054E697 .BA 2CE85400mov edx,1_.0054E82C ;sett.dll
0054E69C .8D85 ACFEFFFFlea eax,dword ptr ss:
0054E6A2 .E8 9D4AEBFFcall 1_.00403144
0054E6A7 .BA 01000000mov edx,1
0054E6AC .8D85 ACFEFFFFlea eax,dword ptr ss:
0054E6B2 .E8 5D50EBFFcall 1_.00403714
0054E6B7 .E8 EC42EBFFcall 1_.004029A8
0054E6BC .33C0 xor eax,eax
0054E6BE .55 push ebp
0054E6BF .68 31E75400push 1_.0054E731
0054E6C4 .64:FF30push dword ptr fs:
0054E6C7 .64:8920mov dword ptr fs:,esp
0054E6CA .6A 00push 0; /Arg1 = 00000000
0054E6CC .8D55 FBlea edx,dword ptr ss:; |
0054E6CF .B9 01000000mov ecx,1 ; |
0054E6D4 .8D85 ACFEFFFFlea eax,dword ptr ss:; |
0054E6DA .E8 C14BEBFFcall 1_.004032A0; \1_.004032A0
0054E6DF .E8 C442EBFFcall 1_.004029A8
0054E6E4 .BA 0A000000mov edx,0A
0054E6E9 .8D85 ACFEFFFFlea eax,dword ptr ss:
0054E6EF .E8 2C50EBFFcall 1_.00403720
0054E6F4 .E8 AF42EBFFcall 1_.004029A8
0054E6F9 .6A 00push 0; /Arg1 = 00000000
0054E6FB .8D55 FBlea edx,dword ptr ss:; |
0054E6FE .B9 01000000mov ecx,1 ; |
0054E703 .8D85 ACFEFFFFlea eax,dword ptr ss:; |
0054E709 .E8 924BEBFFcall 1_.004032A0; \1_.004032A0
0054E70E .E8 9542EBFFcall 1_.004029A8
0054E713 .33C0 xor eax,eax
0054E715 .5A pop edx
0054E716 .59 pop ecx
0054E717 .59 pop ecx
0054E718 .64:8910mov dword ptr fs:,edx
0054E71B .68 38E75400push 1_.0054E738
0054E720 >8D85 ACFEFFFFlea eax,dword ptr ss:
0054E726 .E8 954BEBFFcall 1_.004032C0
0054E72B .E8 7842EBFFcall 1_.004029A8
0054E730 .C3 retn
0054E731 .^ E9 925FEBFFjmp 1_.004046C8
0054E736 .^ EB E8jmp short 1_.0054E720
0054E738 .B8 40E85400mov eax,1_.0054E840 ;软件注册成功!谢谢注册!
0054E73D .E8 D2A6EFFFcall 1_.00448E14
0054E742 .A1 A8815D00mov eax,dword ptr ds:
0054E747 .8B00 mov eax,dword ptr ds:
0054E749 .8B80 00050000mov eax,dword ptr ds:
0054E74F .BA 64E85400mov edx,1_.0054E864 ;软件已注册
0054E754 .E8 971AF0FFcall 1_.004501F0
0054E759 .8B45 FCmov eax,dword ptr ss:
0054E75C .E8 CBF3F1FFcall 1_.0046DB2C
0054E761 .EB 2Ajmp short 1_.0054E78D
0054E763 >8B45 FCmov eax,dword ptr ss:
0054E766 .8B80 04030000mov eax,dword ptr ds:
0054E76C .33D2 xor edx,edx
0054E76E .E8 7D1AF0FFcall 1_.004501F0
0054E773 .8B45 FCmov eax,dword ptr ss:
0054E776 .8B80 FC020000mov eax,dword ptr ds:
0054E77C .33D2 xor edx,edx
0054E77E .E8 6D1AF0FFcall 1_.004501F0
0054E783 .B8 78E85400mov eax,1_.0054E878 ;注册失败,注册用户请重试!\n如有问题,请直接与作者联系!
0054E788 .E8 87A6EFFFcall 1_.00448E14
0054E78D >33C0 xor eax,eax


第一次计算,进入代码如下:

0054E280/$55 push ebp
0054E281|.8BEC mov ebp,esp
0054E283|.33C9 xor ecx,ecx
0054E285|.51 push ecx
0054E286|.51 push ecx
0054E287|.51 push ecx
0054E288|.51 push ecx
0054E289|.53 push ebx
0054E28A|.56 push esi
0054E28B|.8BF2 mov esi,edx
0054E28D|.8BD8 mov ebx,eax--------------确认码入ebx
0054E28F|.33C0 xor eax,eax-------------eax清零
0054E291|.55 push ebp
0054E292|.68 50E35400push 1_.0054E350
0054E297|.64:FF30push dword ptr fs:
0054E29A|.64:8920mov dword ptr fs:,esp
0054E29D|.81F3 F1250B00xor ebx,0B25F1-----------------ebx=确认码与0B25F1异或
0054E2A3|.8BC3 mov eax,ebx---------------------将异或结果入eax
0054E2A5|.33D2 xor edx,edx----------------------edx清零
0054E2A7|.52 push edx; /Arg2 => 00000000
0054E2A8|.50 push eax; |Arg1
0054E2A9|.8D45 FClea eax, ; |
0054E2AC|.E8 FFB9EBFFcall 1_.00409CB0
0054E2B1|.8B45 FCmov eax,---------------十进制结果入eax
0054E2B4|.0FB600 movzx eax,byte ptr ds:-------取第一位入eax
0054E2B7|.8B55 FCmov edx,----------------十进制结果入edx
0054E2BA|.0FB652 01movzx edx,byte ptr ds:------取第二位入edx
0054E2BE|.03C2 add eax,edx----------------------第一位ascii和第二位ascii相加结果入eax
0054E2C0|.B9 05000000mov ecx,5-----------------------ecx=5
0054E2C5|.99 cdq
0054E2C6|.F7F9 idiv ecx---------------------eax/5,商入eax,余数入edx
0054E2C8|.80C2 34add dl,34-----------------------余数与34相加入edx,
0054E2CB|.8855 F8mov byte ptr ss:,dl--------第一次运算结果入*
0054E2CE|.8B45 FCmov eax,------------十进制结果入eax
0054E2D1|.0FB640 02movzx eax,byte ptr ds:--------取第三位入eax
0054E2D5|.8B55 FCmov edx,----------------十进制结果入edx
0054E2D8|.0FB652 03movzx edx,byte ptr ds:---------取第四位入edx
0054E2DC|.03C2 add eax,edx------------------------相加
0054E2DE|.B9 05000000mov ecx,5
0054E2E3|.99 cdq
0054E2E4|.F7F9 idiv ecx
0054E2E6|.8BDA mov ebx,edx
0054E2E8|.80C3 33add bl,33-----------------------------同上面计算
0054E2EB|.885D F9mov byte ptr ss:,bl---------第二次运算结果入
0054E2EE|.8D45 F4lea eax,
0054E2F1|.8A55 F8mov dl,byte ptr ss:----------将第一次运算(上面*处)的结果入edx
0054E2F4|.E8 2B6CEBFFcall 1_.00404F24
0054E2F9|.8B45 F4mov eax,
0054E2FC|.8D55 FClea edx,
0054E2FF|.B9 1B000000mov ecx,1B
0054E304|.E8 D36FEBFFcall 1_.004052DC
0054E309|.8D45 F0lea eax,
0054E30C|.8BD3 mov edx,ebx
0054E30E|.E8 116CEBFFcall 1_.00404F24
0054E313|.8B45 F0mov eax,
0054E316|.8D55 FClea edx,
0054E319|.B9 19000000mov ecx,19
0054E31E|.E8 B96FEBFFcall 1_.004052DC------------------将异或的结果与上面计算的结果(edx低位dl)相连
0054E323|.8BC6 mov eax,esi
0054E325|.8B55 FCmov edx,--------------相连后的字符串入edx
0054E328|.E8 6B6AEBFFcall 1_.00404D98
0054E32D|.33C0 xor eax,eax
0054E32F|.5A pop edx
0054E330|.59 pop ecx
0054E331|.59 pop ecx
0054E332|.64:8910mov dword ptr fs:,edx
0054E335|.68 57E35400push 1_.0054E357
0054E33A|>8D45 F0lea eax,
0054E33D|.BA 02000000mov edx,2
0054E342|.E8 216AEBFFcall 1_.00404D68
0054E347|.8D45 FClea eax,
0054E34A|.E8 F569EBFFcall 1_.00404D44
0054E34F\.C3 retn
0054E350 .^ E9 7363EBFFjmp 1_.004046C8
0054E355 .^ EB E3jmp short 1_.0054E33A
0054E357 .5E pop esi
0054E358 .5B pop ebx
0054E359 .8BE5 mov esp,ebp
0054E35B .5D pop ebp
0054E35C .C3 retn
第二次计算:

0054E360/$55 push ebp
0054E361|.8BEC mov ebp,esp
0054E363|.33C9 xor ecx,ecx
0054E365|.51 push ecx
0054E366|.51 push ecx
0054E367|.51 push ecx
0054E368|.51 push ecx
0054E369|.51 push ecx
0054E36A|.51 push ecx
0054E36B|.53 push ebx
0054E36C|.56 push esi
0054E36D|.8BF2 mov esi,edx
0054E36F|.8BD8 mov ebx,eax
0054E371|.33C0 xor eax,eax
0054E373|.55 push ebp
0054E374|.68 ACE45400push 1_.0054E4AC
0054E379|.64:FF30push dword ptr fs:
0054E37C|.64:8920mov dword ptr fs:,esp
0054E37F|.81F3 8776FBDDxor ebx,DDFB7687-----------------------第一次运算结果与DDFB7687异或
0054E385|.8BC3 mov eax,ebx------------------------第二次运算结果入eax
0054E387|.33D2 xor edx,edx
0054E389|.52 push edx
0054E38A|.50 push eax
0054E38B|.8D45 FClea eax,
0054E38E|.E8 1DB9EBFFcall 1_.00409CB0 ---转换成十进制
0054E393|.8B45 FCmov eax,
0054E396|.0FB600 movzx eax,byte ptr ds:---取第一位
0054E399|.8B55 FCmov edx,
0054E39C|.0FB652 01movzx edx,byte ptr ds:----------取第二位
0054E3A0|.03C2 add eax,edx---------------------相加
0054E3A2|.B9 05000000mov ecx,5
0054E3A7|.99 cdq
0054E3A8|.F7F9 idiv ecx--------------------除法
0054E3AA|.80C2 66add dl,66-----------------+66
0054E3AD|.8855 F8mov byte ptr ss:,dl----------结果1入变量
0054E3B0|.8B45 FCmov eax,
0054E3B3|.0FB640 02movzx eax,byte ptr ds:----取第三位
0054E3B7|.8B55 FCmov edx,
0054E3BA|.0FB652 03movzx edx,byte ptr ds:-----取第四位
0054E3BE|.03C2 add eax,edx---------------------相加
0054E3C0|.B9 05000000mov ecx,5
0054E3C5|.99 cdq
0054E3C6|.F7F9 idiv ecx--------------------------除法
0054E3C8|.80C2 75add dl,75-----------------------+75
0054E3CB|.8855 F9mov byte ptr ss:,dl----------结果2入
0054E3CE|.8B45 FCmov eax,
0054E3D1|.0FB640 04movzx eax,byte ptr ds:----取第五位
0054E3D5|.8B55 FCmov edx,
0054E3D8|.0FB652 05movzx edx,byte ptr ds:----取第六位
0054E3DC|.03C2 add eax,edx---------------------相加
0054E3DE|.B9 05000000mov ecx,5
0054E3E3|.99 cdq
0054E3E4|.F7F9 idiv ecx----------------除法
0054E3E6|.80C2 7Aadd dl,7A--------------加7A
0054E3E9|.8855 FAmov byte ptr ss:,dl-------结果3入
0054E3EC|.8B45 FCmov eax,
0054E3EF|.0FB640 06movzx eax,byte ptr ds:----取第七位
0054E3F3|.8B55 FCmov edx,
0054E3F6|.0FB652 07movzx edx,byte ptr ds:----取第八位
0054E3FA|.03C2 add eax,edx---------------------相加
0054E3FC|.8B55 FCmov edx,
0054E3FF|.0FB652 08movzx edx,byte ptr ds:-----取第九位
0054E403|.03C2 add eax,edx-----------------------与上面的第七位和第八位之和相加
0054E405|.B9 05000000mov ecx,5
0054E40A|.99 cdq
0054E40B|.F7F9 idiv ecx----------除法
0054E40D|.80C2 69add dl,69----------+69
0054E410|.8855 FBmov byte ptr ss:,dl----------结果4入
0054E413|.8D45 F4lea eax,
0054E416|.8A55 F8mov dl,byte ptr ss:-----------结果1相对应的字符入edx
0054E419|.E8 066BEBFFcall 1_.00404F24
0054E41E|.8B45 F4mov eax,
0054E421|.8D55 FClea edx,
0054E424|.B9 07000000mov ecx,7
0054E429|.E8 AE6EEBFFcall 1_.004052DC------------------------将上面所对应的字符与第二次运算结果的后四位相连
0054E42E|.8D45 F0lea eax,
0054E431|.8A55 FBmov dl,byte ptr ss:
0054E434|.E8 EB6AEBFFcall 1_.00404F24
0054E439|.8B45 F0mov eax,
0054E43C|.8D55 FClea edx,
0054E43F|.B9 03000000mov ecx,3
0054E444|.E8 936EEBFFcall 1_.004052DC
0054E449|.8D45 EClea eax,
0054E44C|.8A55 F9mov dl,byte ptr ss:
0054E44F|.E8 D06AEBFFcall 1_.00404F24
0054E454|.8B45 ECmov eax,
0054E457|.8D55 FClea edx,
0054E45A|.B9 05000000mov ecx,5
0054E45F|.E8 786EEBFFcall 1_.004052DC
0054E464|.8D45 E8lea eax,
0054E467|.8A55 FAmov dl,byte ptr ss:
0054E46A|.E8 B56AEBFFcall 1_.00404F24
0054E46F|.8B45 E8mov eax,
0054E472|.8D55 FClea edx,
0054E475|.B9 09000000mov ecx,9
0054E47A|.E8 5D6EEBFFcall 1_.004052DC
0054E47F|.8BC6 mov eax,esi
0054E481|.8B55 FCmov edx,
0054E484|.E8 0F69EBFFcall 1_.00404D98---------------------以上就是将上面所计算的结果相对应的字符相连
0054E489|.33C0 xor eax,eax
0054E48B|.5A pop edx
0054E48C|.59 pop ecx
0054E48D|.59 pop ecx
0054E48E|.64:8910mov dword ptr fs:,edx
一组可用注册码:
确认码123456,注册码:4836l5u412~f1449

uzcool 发表于 2008-9-19 18:45

学习。。不太懂算法。。。

mayl8822 发表于 2008-9-22 00:38

偶也是这方面的白白
页: [1]
查看完整版本: 系统优化大师的算法分析