whyida 发表于 2017-1-27 13:37

010 Editor 7.02 注册算法分析

本帖最后由 whyida 于 2017-1-29 14:02 编辑

010 Editor 7.02 是一款文本编辑工具,算法相对简单,没有采用不可逆的加密算法。
用od或者x64dbg等工具打开010 Editor 7.02
按格式输入随意密码点击注册,出现错误提示。搜索字符串“thank you",很容易找到关键位置。



eax为2D 注册成功,E7则失败。下面的代码已经添加注释,应该能看懂。
010D584D | 8A 5D DF            | mov bl,byte ptr ss:       |
010D5850 | 8A 7D E1            | mov bh,byte ptr ss:       |
010D5853 | 80 FB 9C            | cmp bl,9C                         | ;密码第2组第2位是否为9C
010D5856 | 75 70               | jne 010editor1.10D58C8            |
010D5858 | 8A 45 DC            | mov al,byte ptr ss:       | 密码第一组第1位
010D585B | 32 45 E2            | xor al,byte ptr ss:       | 密码第一组第1位 xor 密码第四组第一位
010D585E | 88 45 E8            | mov byte ptr ss:,al       |
010D5861 | 8A 45 DD            | mov al,byte ptr ss:       |
010D5864 | 32 45 E3            | xor al,byte ptr ss:       | 密码第一组第2位 xor 密码第四组第2位
010D5867 | FF 75 E8            | push dword ptr ss:      |
010D586A | 0F B6 C8            | movzx ecx,al                      |
010D586D | B8 00 01 00 00      | mov eax,100                     |
010D5872 | 66 0F AF C8         | imul cx,ax                        |
010D5876 | 8A 45 DE            | mov al,byte ptr ss:       | 密码第二组第1位
010D5879 | 32 C7               | xor al,bh                         | 密码第二组第1位 xor 密码第三组第2位
010D587B | 0F B6 C0            | movzx eax,al                      |
010D587E | 66 03 C8            | add cx,ax                         |
010D5881 | 0F B7 F1            | movzx esi,cx                      |
010D5884 | E8 6F 1E 33 FF      | call 010editor1.4076F8            | ;算法1,结果必须为0xFC
010D5889 | 0F B6 C0            | movzx eax,al                      |
010D588C | 56                  | push esi                        |
010D588D | 89 47 1C            | mov dword ptr ds:,eax   |
010D5890 | E8 B6 2A 33 FF      | call 010editor1.40834B            | ;算法2,eax必须为小于等于0x3E8
010D5895 | 8B 4F 1C            | mov ecx,dword ptr ds:   |
010D5898 | 83 C4 08            | add esp,8                         |
010D589B | 0F B7 C0            | movzx eax,ax                      |
010D589E | 89 47 20            | mov dword ptr ds:,eax   | edi+20:L"χ"
010D58A1 | 85 C9               | test ecx,ecx                      |
010D58A3 | 0F 84 BC 01 00 00   | je 010editor1.10D5A65             |
010D58A9 | 85 C0               | test eax,eax                      |
010D58AB | 0F 84 B4 01 00 00   | je 010editor1.10D5A65             |
010D58B1 | 3D E8 03 00 00      | cmp eax,3E8                     | ;eax必须为小于等于0x3E8
010D58B6 | 0F 87 A9 01 00 00   | ja 010editor1.10D5A65             |
010D58BC | 83 F9 02            | cmp ecx,2                         |
010D58BF | 1B F6               | sbb esi,esi                     |
010D58C1 | 23 F1               | and esi,ecx                     |
010D58C3 | E9 B3 00 00 00      | jmp 010editor1.10D597B            |
010D58C8 | 80 FB FC            | cmp bl,FC                         |
010D58CB | 75 1F               | jne 010editor1.10D58EC            |
010D58CD | C7 47 1C FF 00 00 00| mov dword ptr ds:,FF      |
010D58D4 | BE FF 00 00 00      | mov esi,FF                        |
010D58D9 | C7 47 20 01 00 00 00| mov dword ptr ds:,1       | edi+20:L"χ"
010D58E0 | C7 47 30 01 00 00 00| mov dword ptr ds:,1       |
010D58E7 | E9 8F 00 00 00      | jmp 010editor1.10D597B            |
010D58EC | 80 FB AC            | cmp bl,AC                         |
010D58EF | 0F 85 70 01 00 00   | jne 010editor1.10D5A65            |
010D58F5 | 8A 45 DD            | mov al,byte ptr ss:       |
010D58F8 | 32 45 E3            | xor al,byte ptr ss:       |
010D58FB | 0F B6 C8            | movzx ecx,al                      |
010D58FE | B8 00 01 00 00      | mov eax,100                     |
010D5903 | 66 0F AF C8         | imul cx,ax                        |
010D5907 | 8A 45 DE            | mov al,byte ptr ss:       |
010D590A | 32 C7               | xor al,bh                         |
010D590C | C7 47 1C 02 00 00 00| mov dword ptr ds:,2       |
010D5913 | 0F B6 C0            | movzx eax,al                      |
010D5916 | 66 03 C8            | add cx,ax                         |
010D5919 | 0F B7 C1            | movzx eax,cx                      |
010D591C | 50                  | push eax                        |
010D591D | E8 29 2A 33 FF      | call 010editor1.40834B            | ;算法2
010D5922 | 0F B7 C0            | movzx eax,ax                      |
010D5925 | 83 C4 04            | add esp,4                         |
010D5928 | 89 47 20            | mov dword ptr ds:,eax   | edi+20:L"χ"
010D592B | 85 C0               | test eax,eax                      |
010D592D | 0F 84 32 01 00 00   | je 010editor1.10D5A65             |
010D5933 | 3D E8 03 00 00      | cmp eax,3E8                     |
010D5938 | 0F 87 27 01 00 00   | ja 010editor1.10D5A65             |
010D593E | 0F B6 55 E5         | movzx edx,byte ptr ss:    |
010D5942 | 0F B6 4D E0         | movzx ecx,byte ptr ss:    |
010D5946 | 0F B6 C7            | movzx eax,bh                      |
010D5949 | 33 D0               | xor edx,eax                     |
010D594B | 0F B6 45 E4         | movzx eax,byte ptr ss:    |
010D594F | 33 C8               | xor ecx,eax                     |
010D5951 | C1 E2 08            | shl edx,8                         |
010D5954 | 0F B6 45 E2         | movzx eax,byte ptr ss:    |
010D5958 | 03 D1               | add edx,ecx                     |
010D595A | 0F B6 4D DC         | movzx ecx,byte ptr ss:    |
010D595E | C1 E2 08            | shl edx,8                         |
010D5961 | 33 C8               | xor ecx,eax                     |
010D5963 | 03 D1               | add edx,ecx                     |
010D5965 | 68 27 8C 5B 00      | push 010editor1.5B8C27            |
010D596A | 52                  | push edx                        |
010D596B | E8 7E 4A 33 FF      | call 010editor1.40A3EE            |
010D5970 | 83 C4 08            | add esp,8                         |
010D5973 | 89 45 F0            | mov dword ptr ss:,eax   |
010D5976 | 89 47 34            | mov dword ptr ds:,eax   |
010D5979 | 8B F0               | mov esi,eax                     |
010D597B | 8D 45 EC            | lea eax,dword ptr ss:   |
010D597E | 50                  | push eax                        |
010D597F | 8D 4F 04            | lea ecx,dword ptr ds:      | edi+4:"若&"
010D5982 | FF 15 D4 7A 6C 02   | call dword ptr ds:[<&public: clas |
010D5988 | FF 77 20            | push dword ptr ds:      | edi+20:L"χ"
010D598B | 33 C0               | xor eax,eax                     |
010D598D | C7 45 FC 00 00 00 00| mov dword ptr ss:,0      |
010D5994 | 80 FB FC            | cmp bl,FC                         |
010D5997 | 8D 4D EC            | lea ecx,dword ptr ss:   |
010D599A | 56                  | push esi                        |
010D599B | 0F 95 C0            | setne al                        |
010D599E | 50                  | push eax                        |
010D599F | FF 15 90 74 6C 02   | call dword ptr ds:[<&public: char |
010D59A5 | 50                  | push eax                        |
010D59A6 | E8 39 D2 32 FF      | call 010editor1.402BE4            | ;算法3.根据用户名计算注册码
010D59AB | 8B D0               | mov edx,eax                     |
010D59AD | 83 C4 10            | add esp,10                        |
010D59B0 | 38 55 E0            | cmp byte ptr ss:,dl       | ;注册码第三组第一位
010D59B3 | 0F 85 81 00 00 00   | jne 010editor1.10D5A3A            |
010D59B9 | 8B CA               | mov ecx,edx                     |
010D59BB | C1 E9 08            | shr ecx,8                         |
010D59BE | 3A F9               | cmp bh,cl                         | ;注册码第三组第二位
010D59C0 | 75 78               | jne 010editor1.10D5A3A            |
010D59C2 | 8B CA               | mov ecx,edx                     |
010D59C4 | C1 E9 10            | shr ecx,10                        |
010D59C7 | 38 4D E2            | cmp byte ptr ss:,cl       | ;注册码第四组第一位
010D59CA | 75 6E               | jne 010editor1.10D5A3A            |
010D59CC | C1 E8 18            | shr eax,18                        |
010D59CF | 38 45 E3            | cmp byte ptr ss:,al       | ;注册码第四组第二位
010D59D2 | 75 66               | jne 010editor1.10D5A3A            |
010D59D4 | 80 FB 9C            | cmp bl,9C                         | ;注册码第二组第二位
010D59D7 | 75 0F               | jne 010editor1.10D59E8            |
010D59D9 | 8B 45 08            | mov eax,dword ptr ss:      |
010D59DC | 3B 47 1C            | cmp eax,dword ptr ds:   |
010D59DF | 76 52               | jbe 010editor1.10D5A33            | ;必须跳转。

关键断点

成功位置


附一组密码提供测试。
whyida
147C-C89C-8F26-17D4

whyida
66DE-989C-E3F0-0E40
去网络验证,修改hosts文件加入下面一行,目录(Windows\System32\drivers\etc)
127.0.0.1       www.sweetscape.com

Hmily 发表于 2017-1-28 15:34

whyida 发表于 2017-1-28 14:57
网络验证还没看,但一直联网还没发现问题。可能是有些功能还没仔细研究。

6点几版本我破解的时候遇到过,导入下面注册表应该可以重现,可以试试:

Windows Registry Editor Version 5.00




"ThreadingModel"="1690300289"

whyida 发表于 2017-1-30 08:16

本帖最后由 whyida 于 2017-1-30 08:52 编辑

dfui 发表于 2017-1-29 23:51
哎,你点   关于------- 点 注册点检查许可证。
       你点工具--------点 注册点   检查 ...
本来就是逆向算出的用户名,注册码。软件公司的服务器没有相应的用户名肯定不能正常通过检查。
一般对付网络验证的方法是网络验证转本地验证。
修改hosts文件加入下面一行(Windows\System32\drivers\etc)
127.0.0.1       www.sweetscape.com

qwertyui 发表于 2017-1-27 15:17

来看看,学习了

charonly 发表于 2017-1-27 18:01

感谢分享!有时间学习一下。

冥界3大法王 发表于 2017-1-27 18:55

楼主你跟我一样,也喜欢这么直接贴代码~~
我们的审美都一样,不喜欢黑乎乎的代码版
@whyida

liuhaijiji5807 发表于 2017-1-27 18:59

ChinaFox 发表于 2017-1-27 20:01

楼主 是怎么确定算法的? 怎么看出取第几位呢

whyida 发表于 2017-1-27 21:49

冥界3大法王 发表于 2017-1-27 18:55
楼主你跟我一样,也喜欢这么直接贴代码~~
我们的审美都一样,不喜欢黑乎乎的代码版
@whyida

贴代码更清晰直观一些。

whyida 发表于 2017-1-27 21:50

ChinaFox 发表于 2017-1-27 20:01
楼主 是怎么确定算法的? 怎么看出取第几位呢

一步一步跟踪。F7 或者F8

whyida 发表于 2017-1-27 21:51

liuhaijiji5807 发表于 2017-1-27 18:59
谢谢了 楼主太帅了

谢谢夸奖。

无影黑侠 发表于 2017-1-28 12:41

真的挺厉害,学习了
页: [1] 2 3 4
查看完整版本: 010 Editor 7.02 注册算法分析