老文章档案 · 2003 年

flashget 1.40 的粗略分析和探讨

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-06-22 · 作者:oOOOo 人气: · 出处:嬴政天下整理收藏)

F****g*t 1.40 的粗略分析和探讨.[修改版]

先建立如下条件:

[HKEY_CURRENT_USER\Software\JetCar\JetCar\General]

"RegDisp",注册框中显示的名字

"RegName",有可能用于注册校验的用户名.

"RegPass",注册码.

感谢Aming的帖子!他可真痴情!好男子就应该这样![请有空多锻炼身体,以后有用!]

bpx 41C65A

:0041C65A 8B13 mov edx, dword ptr [ebx]

:0041C65C 8B42F8 mov eax, dword ptr [edx-08]

:0041C65F 83F82C cmp eax, 0000002C ;此处有比较注册码长度的代码,应为0x2C,(44)

:0041C662 0F85D1000000 jne 0041C739

* Possible StringData Ref from Data Obj ->"fgc-" ;此处比较注册码开头可是为"fgc-" (4)

:0041C668 687C144F00 push 004F147C

:0041C66D 8BCB mov ecx, ebx

:0041C66F E8CED70700 call 00499E42

:0041C674 85C0 test eax, eax

:0041C676 7506 jne 0041C67E

:0041C678 897C2410 mov dword ptr [esp+10], edi

:0041C67C EB18 jmp 0041C696

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041C676(C)

* Possible StringData Ref from Data Obj ->"fgf-"

:0041C67E 6874144F00 push 004F1474 ;此处比较注册码开头是否为"fgf-" (4)

:0041C683 8BCB mov ecx, ebx

:0041C685 E8B8D70700 call 00499E42

:0041C68A 85C0 test eax, eax

:0041C68C 0F85A7000000 jne 0041C739

:0041C692 89442410 mov dword ptr [esp+10], eax

所以,我们假设注册码型如:

fgc-a123b456c789d012e345f678g901h234i567j890

另外,作者有一个隐含的字符串:"kevinhouhytzl"

其中"hytzl"是flashget旧版本的加密字符串,好象是0.95还用着,其他的没有尝试.

以下这段代码在校验a123和b456

;-------------------------------------------

:0041C6A8 8B4500 mov eax, dword ptr [ebp+00]

:0041C6AB 8BCF mov ecx, edi

:0041C6AD 83C504 add ebp, 00000004

:0041C6B0 83E900 sub ecx, 00000000

:0041C6B3 8944241C mov dword ptr [esp+1C], eax

:0041C6B7 741C je 0041C6D5

:0041C6B9 49 dec ecx

:0041C6BA 7533 jne 0041C6EF

:0041C6BC 0FBE74241E movsx esi, byte ptr [esp+1E]

:0041C6C1 0FBE54241F movsx edx, byte ptr [esp+1F]

:0041C6C6 0FBECC movsx ecx, ah

:0041C6C9 23F1 and esi, ecx

:0041C6CB 0FAFF2 imul esi, edx

:0041C6CE 0FBEC0 movsx eax, al

:0041C6D1 03F0 add esi, eax

:0041C6D3 EB1A jmp 0041C6EF

:0041C6D5 8A4C241E mov cl, byte ptr [esp+1E]

:0041C6D9 8AD4 mov dl, ah

:0041C6DB 33CA xor ecx, edx

:0041C6DD 0FBE54241F movsx edx, byte ptr [esp+1F]

:0041C6E2 83E17F and ecx, 0000007F

:0041C6E5 0FAFCA imul ecx, edx

:0041C6E8 0FBEC0 movsx eax, al

:0041C6EB 03C8 add ecx, eax

:0041C6ED 8BF1 mov esi, ecx

:0041C6EF 8B442410 mov eax, dword ptr [esp+10]

:0041C6F3 85C0 test eax, eax

:0041C6F5 740C je 0041C703

:0041C6F7 0FBE0D43F64E00 movsx ecx, byte ptr [004EF643]

:0041C6FE 83FF02 cmp edi, 00000002

:0041C701 7407 je 0041C70A

:0041C703 0FBE8F40F64E00 movsx ecx, byte ptr [edi+004EF640]

:0041C70A 8BC6 mov eax, esi

:0041C70C 33D2 xor edx, edx

:0041C70E F7F1 div ecx

:0041C710 8BC7 mov eax, edi

:0041C712 83E800 sub eax, 00000000

:0041C715 740A je 0041C721

:0041C717 48 dec eax

:0041C718 750B jne 0041C725

:0041C71A 83FA08 cmp edx, 00000008

:0041C71D 7511 jne 0041C730

:0041C71F EB04 jmp 0041C725

:0041C721 85D2 test edx, edx

:0041C723 750B jne 0041C730

:0041C725 47 inc edi

:0041C726 83FF02 cmp edi, 00000002

:0041C729 7D23 jge 0041C74E

:0041C72B E978FFFFFF jmp 0041C6A8

:0041C730 6AFF push FFFFFFFF

:0041C732 8BCB mov ecx, ebx

:0041C734 E8BC220800 call 0049E9F5

:0041C739 5F pop edi

:0041C73A 5E pop esi

:0041C73B 5D pop ebp

:0041C73C 33C0 xor eax, eax

:0041C73E 5B pop ebx

:0041C73F 8B4C2420 mov ecx, dword ptr [esp+20]

:0041C743 64890D00000000 mov dword ptr fs:[00000000], ecx

:0041C74A 83C42C add esp, 0000002C

:0041C74D C3 ret

a123=0x61,0x31,0x32,0x33,并取kevin中的"k"=0x6b

必须满足:(((0x32^0x33)&0x7F)*0x34+0x61)%0x6B==0

b456=0x62,0x34,0x35,0x36,并取kevinhouhytzl中"e"=0x65

必须满足:((0x34&0x35)*0x36+0x62)%0x65==0x08

鉴于Aming说的不便公开的情况,请自己计算应该是哪些字符吧! :-)

;-------------------------------------------

程序到这里就不再校验字符串中其他部分.而是将内存标志

4F7BD4=1,表示已注册.然后开始运行,没有广告窗口.

但......

暗地里有个动作: set privatetimer ,timerinterval=0xD98 即3480(d)

相当于运行到58分时,嘿嘿~~~~~~:

:0042A651 E88A83FEFF call 004129E0

:0042A656 8BC8 mov ecx, eax

:0042A658 E8E31EFFFF call 0041C540 ;比较 4F7BD4 内存标记

:0042A65D 85C0 test eax, eax ;注册了吗? ;-)

:0042A65F 7427 je 0042A688 ;没有注册的话就跳过去.

:0042A661 A1F87C4F00 mov eax, dword ptr [004F7CF8] ;有的话就进行时间判断.

:0042A666 3D980D0000 cmp eax, 00000D98 ;58分了吗?

:0042A66B 750E jne 0042A67B ;不到时间的话,就增加计数值去

:0042A66D E86E83FEFF call 004129E0 ;到时间了![这个call没有跟]

:0042A672 8BC8 mov ecx, eax

:0042A674 E8678FFFFF call 004235E0 ;隐含比较注册码中字段,见下(A)

:0042A679 EB0D jmp 0042A688 ;这个jmp似乎应该为 jmp 42A682,见下(B)

:0042A67B 3DA10D0000 cmp eax, 00000DA1 ;58分又过9秒了吗? 这段代码由于上面的分析,可能永远不会走到.

:0042A680 7406 je 0042A688 ;是则不再使用这个隐含timer

:0042A682 40 inc eax ;

:0042A683 A3F87C4F00 mov dword ptr [004F7CF8], eax

:0042A688 8BCF mov ecx, edi

:0042A68A E895490700 call 0049F024

:0042A68F 8B4C242C mov ecx, dword ptr [esp+2C]

:0042A693 5F pop edi

:0042A694 5E pop esi

:0042A695 5B pop ebx

:0042A696 64890D00000000 mov dword ptr fs:[00000000], ecx

:0042A69D 83C42C add esp, 0000002C

:0042A6A0 C20400 ret 0004

(A)只发现比较d012,从call 4235E0跟进,代码在下,不知道有无其他比较,请续进!:

如果不满足d012这个的话,程序会在注册表中建立一个value,用你的regpass作为名字!!

很长哦!我没有让它这么做.似乎下次启动会检测[当a123,d012满足条件时],至于结果,

我也没有尝试,我好怕怕!他会干什么??????

(B)

见代码中的注释,程序似乎并不比较计数值==0xDA1,也许是那个jmp错了.kevinhou似乎

是想到58分9秒时不再计数了,但好象没有走到哦,计数一旦到0xD98就会停止. ???

以下校验d012

;-------------------------------------------

:00423618 0FBE44240E movsx eax, byte ptr [esp+0E]

:0042361D 0FBED5 movsx edx, ch

:00423620 0BC2 or eax, edx

:00423622 0FBE54240F movsx edx, byte ptr [esp+0F]

:00423627 0FAFC2 imul eax, edx

:0042362A 0FBEC9 movsx ecx, cl

:0042362D 03C1 add eax, ecx

:0042362F 33D2 xor edx, edx

:00423631 0FBE0D43F64E00 movsx ecx, byte ptr [004EF643]

:00423638 F7F1 div ecx

:0042363A 8BCE mov ecx, esi

:0042363C 85D2 test edx, edx

:0042363E 741E je 0042365E

:00423640 E8B0B30700 call 0049E9F5

:00423645 8B16 mov edx, dword ptr [esi]

:00423647 6A00 push 00000000

:00423649 52 push edx

:0042364A 68ACF14E00 push 004EF1AC

:0042364F 8BCF mov ecx, edi

:00423651 E808700800 call 004AA65E

:00423656 5F pop edi

:00423657 33C0 xor eax, eax

:00423659 5E pop esi

:0042365A 83C408 add esp, 00000008

:0042365D C3 ret

d012=0x64,0x30,0x31,0x32,并取kevinhouhytzl中的"i"=0x69

必须满足:((0x30|0x31)*0x32+0x64)%0x69==0

也请自行计算

;-------------------------------------------

未完成的任务:

1)注册码其余字段没有比较,可能有其他timer![极有可能],我没有时间跟了.

2)也可能他再完成特殊动作时再比较,比如,下载某个大体积的软件时忽然做比较[给你少下几个豆][不会这么坏吧]

3)也可能他要到后续版本再出来比较.反正kevinhouhytzl这几个字符都要用到.

4)也有可能在上面的(A)处写入以regpass为名字的values再启动后有花招,我也没有跟.

5)也许下载一个旧的flashget 1.30就会发现其他的比较代码,我也没有跟.

6)改为fgf-开头看看?

7)由于有以上的不确定因素,所以我暂时也没有注册,只是用 bpm 4F7BD4 来观察它根据注册情况的createwindow

强行改了4处跳转,使主程序不显示广告窗口,要让Site Explorer也不显示的话,还应该改几处.

请兄弟们跟进!趁星期天!

by oOOOo 2003/01

(出处:嬴政天下整理收藏)

相关文章:

·ASProtect的加密算法初步分析

·MD5算法研究

·Active Ebook Compiler的注册算法

·语音界面2.0算法分析及注册机源码!

·简单算法——小护士 V1.2

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·加密算法之RSA算法

·加密算法之DES算法

·加密算法之ElGamal算法

相关软件:

·胜新通用人事工资管理系统 V5.01注册码算法

·胜新出纳-支票打印软件 V4.0X 的注册码算法

·胜新现代办公百宝箱 V5.01 的注册码算法

·胜新信函宝典-信封打印软件 V2.02 注册码的算法

·胜新通用企业计划管理系统的注册码算法

·共享软件加密算法库 V3.0

·操作系统内存分配银行家算法模拟系统 XP

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史