【破文标题】速填助手Quickfill 2.41不同于elance大侠的算法分析【破文作者】XXNB
【作者邮箱】
【作者主页】
【破解工具】OD
【破解平台】xpsp2
【软件名称】速填助手Quickfill 2.41
【软件大小】1514KB
【原版下载】http://www.newhua.com/soft/9719.htm
【保护方式】用户名注册码
【软件简介】速填助手Quickfill 是一款帮助您更轻松的实现键盘输入的软件。
主要功能:
热键速填功能:通过预设热键快速填写网页或其它应用程序表格;
拖动快速填表功能:直接将保存在 Quickfill 中的项拖动到输入窗口中进行填写。 适应于各种类型的字符输入,包括网页、Windows窗体、输
入框等的填写。
【破解声明】向大侠们学习!!!
------------------------------------------------------------------------
【破解过程】
刚才看了elance大侠关于Quickfill 2.4的算法分析。结果我去下载了源程序,分析了下。我发现很难通过elance大侠的算法分析得到注册码。
于是自己就跟了下。发现不同于他的另一种算法(难道他下的和我下载的不同??)。于是写下文章顺便用易语言写下注册机。请大家帮看看
是不是我错了??!!谢谢指教。
1、字符串查找可以找到:
004EC216 |. E8 0148F7FF call 00460A1C ; 计算位数函数
004EC21B |. 8B45 F8 mov eax, [ebp-8] ; 用户名
004EC21E |. E8 D58AF1FF call 00404CF8
004EC223 |. 8BF0 mov esi, eax ; 计算用户名位数
004EC225 |. 8D55 F4 lea edx, [ebp-C]
004EC228 |. 8B83 10030000 mov eax, [ebx+310]
004EC22E |. E8 E947F7FF call 00460A1C ; 计算位数函数
004EC233 |. 8B45 F4 mov eax, [ebp-C] ; 假码
004EC236 |. E8 BD8AF1FF call 00404CF8
004EC23B |. 0FAFF0 imul esi, eax
004EC23E |. 85F6 test esi, esi
004EC240 |. 0F84 CF010000 je 004EC415 ; 看看是否为0
004EC246 |. 8D55 E8 lea edx, [ebp-18]
004EC249 |. 8B83 0C030000 mov eax, [ebx+30C]
004EC24F |. E8 C847F7FF call 00460A1C
004EC254 |. 8B45 E8 mov eax, [ebp-18]
004EC257 |. 8D55 EC lea edx, [ebp-14]
004EC25A |. E8 71CCF1FF call 00408ED0 ; 变成大写
004EC25F |. 8B45 EC mov eax, [ebp-14]
004EC262 |. 8D4D F0 lea ecx, [ebp-10]
004EC265 |. 66:BA 3E03 mov dx, 33E
004EC269 |. E8 92D0FDFF call 004C9300 ;关键Call(1)
004EC26E |. 8B45 F0 mov eax, [ebp-10]
004EC271 |. 8D55 FC lea edx, [ebp-4]
004EC274 |. E8 FFD0FDFF call 004C9378 ;关键Call(2)
004EC279 |. 8D55 E4 lea edx, [ebp-1C]
004EC27C |. 8B83 10030000 mov eax, [ebx+310]
004EC282 |. E8 9547F7FF call 00460A1C ;
004EC287 |. 8B55 E4 mov edx, [ebp-1C] ; 假码
004EC28A |. 8B45 FC mov eax, [ebp-4] ; 我靠!明码比较
004EC28D |. E8 B28BF1FF call 00404E44
004EC292 |. 0F85 7D010000 jnz 004EC415 ; 关键跳
004EC298 |. A1 40F74E00 mov eax, [4EF740]
004EC29D |. C600 00 mov byte ptr [eax], 0
004EC2A0 |. 6A 40 push 40
004EC2A2 |. 68 84C44E00 push 004EC484 ; 注册:
004EC2A7 |. 68 8CC44E00 push 004EC48C ; 注册成功!\n真诚感谢您注册,好运永远伴随您。
2、跟进call 004C9300:
004C9331 |> /8BC5 /mov eax, ebp ; 循环
004C9333 |. |E8 18BCF3FF |call 00404F50
004C9338 |. |8BFB |mov edi, ebx
004C933A |. |81E7 FF000000 |and edi, 0FF
004C9340 |. |8B1424 |mov edx, [esp]
004C9343 |. |8A543A FF |mov dl, [edx+edi-1] ; 一个个的取字母
004C9347 |. |0FB7CE |movzx ecx, si ; 首次是定值33E。以后是上一个字母的运算的结果
004C934A |. |C1E9 08 |shr ecx, 8 ; 33E右移8
004C934D |. |32D1 |xor dl, cl ; 结果和第一个字母xor,得A 《-------这里
004C934F |. |885438 FF |mov [eax+edi-1], dl
004C9353 |. |8B45 00 |mov eax, [ebp]
004C9356 |. |0FB64438 FF |movzx eax, byte ptr [eax+edi-1]
004C935B |. |66:03F0 |add si, ax ; xor结果+33E,得si
004C935E |. |66:69C6 D500 |imul ax, si, 0D5 ; si=si×D5,只取后面4位,就是低4位
004C9363 |. |66:05 9805 |add ax, 598
004C9367 |. |8BF0 |mov esi, eax ; 放到esi。
004C9369 |. |43 |inc ebx
004C936A |. |FE4C24 04 |dec byte ptr [esp+4]
004C936E |.^\75 C1 \jnz short 004C9331 ;继续循环
其实这个循环最重要的结果就是A那个地方,每个用户名的字母对应一个结果(A,B...),后面那个si只是中间用到的数。
3、上个循环结束后,每个用户名字母变成了另一个数值,然后就进入下一个算法call 004C9378 :
004C93AF |. BB 01000000 mov ebx, 1
004C93B4 |> 8B45 FC /mov eax, [ebp-4] ; 又一个循环
004C93B7 |. 8A4418 FF |mov al, [eax+ebx-1] ; 一个个的取上次的结果(A,B.. 《----
004C93BB |. 3C 7A |cmp al, 7A
004C93BD |. 73 04 |jnb short 004C93C3 ; 大于或等于7A(122) “z”
004C93BF |. 3C 61 |cmp al, 61
004C93C1 |. 77 11 |ja short 004C93D4 ; 不小于61(97) “a”
004C93C3 |> 8B45 FC |mov eax, [ebp-4]
004C93C6 |. 8A5418 FF |mov dl, [eax+ebx-1]
004C93CA |. 80FA 5A |cmp dl, 5A
004C93CD |. 73 21 |jnb short 004C93F0 ; 大于或等于5a(90) “Z”
004C93CF |. 80FA 41 |cmp dl, 41
004C93D2 |. 76 1C |jbe short 004C93F0 ; 小于等于41(65) “A”
004C93D4 |> 8D45 EC |lea eax, [ebp-14]
004C93D7 |. 8B55 FC |mov edx, [ebp-4]
004C93DA |. 8A541A FF |mov dl, [edx+ebx-1]
004C93DE |. E8 3DB8F3FF |call 00404C20
004C93E3 |. 8B55 EC |mov edx, [ebp-14]
004C93E6 |. 8D45 F4 |lea eax, [ebp-C]
004C93E9 |. E8 12B9F3FF |call 00404D00
004C93EE |. EB 2E |jmp short 004C941E ; 就是这个小鬼
004C93F0 |> 8D45 F0 |lea eax, [ebp-10]
004C93F3 |. 50 |push eax
004C93F4 |. 8D55 E8 |lea edx, [ebp-18]
004C93F7 |. 8B45 FC |mov eax, [ebp-4]
004C93FA |. 0FB64418 FF |movzx eax, byte ptr [eax+ebx-1]
004C93FF |. E8 8400F4FF |call 00409488 ;下面的几个call把(A,B..)16进制转成10进制函数
004C9404 |. 8B45 E8 |mov eax, [ebp-18] ;转成的10进制连接后就是真正的注册码了。
004C9407 |. B9 02000000 |mov ecx, 2
004C940C |. 33D2 |xor edx, edx
004C940E |. E8 45BBF3FF |call 00404F58
004C9413 |. 8D45 F4 |lea eax, [ebp-C]
004C9416 |. 8B55 F0 |mov edx, [ebp-10]
004C9419 |. E8 E2B8F3FF |call 00404D00
004C941E |> 43 |inc ebx
004C941F |. 4E |dec esi
004C9420 |.^ 75 92 \jnz short 004C93B4 ;循环返回
上面jmp short 004C941E ;这个跳转很关键。如果上面计算用户名得到的数值(A,B..)满足:小于5a(90)“Z”或者大于41(65)“A
”的时候就会跳,就是说上次计算用户名的结果将不会变成10进制,而是变成字符。具体请看我的易语言注册机源代码。
4、易语言注册机(还有漏洞,但已经能处理大部分了。嘻嘻):
.版本 2
.局部变量 si, 长整数型
.局部变量 ecx, 长整数型
.局部变量 A, 长整数型
.局部变量 zimu, 长整数型
.局部变量 name, 文本型
.局部变量 len, 整数型
.局部变量 i, 整数型
.局部变量 daname, 文本型
.局部变量 lensi, 整数型
.局部变量 j, 整数型
.局部变量 xiaosi, 整数型
.局部变量 shiliu, 文本型
.局部变量 si2, 文本型
.局部变量 s3, 文本型
.局部变量 code, 文本型
.局部变量 CODE1, 文本型
i = 1
j = 1
si = 830
name = 编辑框1.内容
len = 取文本长度 (name)
lensi = 取文本长度 (取十六进制文本 (si))
daname = 到大写 (name)
.计次循环首 (len, i)
ecx = 右移 (si, 8)
zimu = 取代码 (daname, i)
A = 位异或 (zimu, ecx)
si = si + A
si = si × 213
si = si + 1432
s3 = 取十六进制文本 (si)
si2 = 取文本右边 (取十六进制文本 (si), 4)
si = 十六进制到十进制 (si2)
.如果 (A < 90 且 A > 65)
CODE1 = 字符 (A)
.否则
CODE1 = 取文本左边 (到文本 (A), 2)
.如果结束
code = code + CODE1
.计次循环尾 ()
编辑框2.内容 = 取十六进制文本 (A)
编辑框3.内容 = code
.子程序 十六进制到十进制, 整数型
.参数 十六进制文本, 文本型
.局部变量 文本, 文本型
.局部变量 最终值, 整数型
.局部变量 i, 整数型, , , 中间循环变量
.局部变量 临时数值, 文本型, , , 每一位上的值
文本 = 到小写 (十六进制文本)
.变量循环首 (1, 取文本长度 (文本), 1, i)
临时数值 = 取文本中间 (文本, i, 1)
.如果 (取代码 (临时数值, ) ≥ 取代码 (“a”, ) 且 取代码 (临时数值, ) ≤ 取代码 (“f”, ))
最终值 = 最终值 + (取代码 (临时数值, ) - 取代码 (“a”, ) + 10) × 求次方 (16, 取文本长度 (文本) - i)
.否则
最终值 = 最终值 + 到数值 (临时数值) × 求次方 (16, 取文本长度 (文本) - i)
.如果结束
.变量循环尾 ()
返回 (最终值)
------------------------------------------------------------------------
【破解总结】
1、只跟用户名有关系,注册码没参与计算。
2、用户名经过计算,一一对应一个变化后的数值A
3、通过判断数值A。来决定是否把A转换为10进制数。
4、上面的10进制(或者字符)连接起来就是注册码。
------------------------------------------------------------------------
由于论坛上传空间有限,如果不能运行下面的易语言注册机的请到:下载完整文件的注册机。谢谢
http://free.ys168.com/?binbinbin7456
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)