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
whyida 发表于 2017-1-28 14:57
网络验证还没看,但一直联网还没发现问题。可能是有些功能还没仔细研究。
6点几版本我破解的时候遇到过,导入下面注册表应该可以重现,可以试试:
Windows Registry Editor Version 5.00
"ThreadingModel"="1690300289" 本帖最后由 whyida 于 2017-1-30 08:52 编辑
dfui 发表于 2017-1-29 23:51
哎,你点 关于------- 点 注册点检查许可证。
你点工具--------点 注册点 检查 ...
本来就是逆向算出的用户名,注册码。软件公司的服务器没有相应的用户名肯定不能正常通过检查。
一般对付网络验证的方法是网络验证转本地验证。
修改hosts文件加入下面一行(Windows\System32\drivers\etc)
127.0.0.1 www.sweetscape.com
来看看,学习了 感谢分享!有时间学习一下。 楼主你跟我一样,也喜欢这么直接贴代码~~
我们的审美都一样,不喜欢黑乎乎的代码版
@whyida 楼主 是怎么确定算法的? 怎么看出取第几位呢 冥界3大法王 发表于 2017-1-27 18:55
楼主你跟我一样,也喜欢这么直接贴代码~~
我们的审美都一样,不喜欢黑乎乎的代码版
@whyida
贴代码更清晰直观一些。 ChinaFox 发表于 2017-1-27 20:01
楼主 是怎么确定算法的? 怎么看出取第几位呢
一步一步跟踪。F7 或者F8 liuhaijiji5807 发表于 2017-1-27 18:59
谢谢了 楼主太帅了
谢谢夸奖。 真的挺厉害,学习了