我的Flash播放器3.0简单分析(菜鸟级的破文高手就免看了)
这两天没有闲着在看雪论坛闲逛看到CCDebuger兄的“用 DeDe 辅助快速定位Delphi程序关键点动画演示”文章发现哦
有用DEDE的动画演示,我在想不错好东西哦下学习学习。下了找一看是Flash的动画不想用IE看,想想找一个播放器看
起会比较舒服点,于是就到天空软件找找。哎!不错一看就找到一个叫“我的Flash播放器3.0”好了就是他了立马Down
了安装。这个“我的Flash播放器3.0”真是不厚道哦捆绑一大堆软件,而且没有提示就是在后台乱搞一通,装完一看惨
桌面多一大堆图标。我卸载竟然不给,火!!!!我狂删。搞定后运行看到主窗口有未注册字样,出于Crack的条件反射当
然不喜欢看到的字样,于是用PEID查哦没有穿马甲是Borland Delphi 6.0 - 7.0语言写的不错我喜欢。再看注册栏给
出了一串给出一大堆字母+符号+数字,提示要把这大串东西发给作者然后付钱注册成正式版!这个软件明显是要注册文
件才注册成功典型的KEYFILE保护方式,狂晕了一阵醒了!!!用OD载入看看有什么东东在里面,再用字符串参考工具发
现如下:
Ultra String Reference,项目 679
Address=004DCEB0
Disassembly=MOV EDX,MyFlashP.004DD2E4
Text String=\key.reg
这样我就找到有用的东西了,接下来用记事本来作一个假的KEY FILE来试试。在记事乱打一通数字保存为key.reg文件
拷到安装目录里,再接下来顺着004DCEB0往上找合适的地方下断吧,唠叨半天了(别砸我这个菜鸟了,没有卖关子呢)
。。原归正转,往上找到004DCE04下断吧,
004DCE04 55 PUSH EBP ; 下断F2
004DCE05 8BEC MOV EBP,ESP
004DCE07 B9 09000000 MOV ECX,9
004DCE0C 6A 00 PUSH 0
004DCE0E 6A 00 PUSH 0
004DCE10 49 DEC ECX
004DCE11 ^ 75 F9 JNZ SHORT MyFlashP.004DCE0C
004DCE13 51 PUSH ECX
004DCE14 53 PUSH EBX
004DCE15 56 PUSH ESI
004DCE16 57 PUSH EDI
004DCE17 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
004DCE1A 33C0 XOR EAX,EAX
004DCE1C 55 PUSH EBP
004DCE1D 68 41D24D00 PUSH MyFlashP.004DD241
004DCE22 64:FF30 PUSH DWORD PTR FS:[EAX]
004DCE25 64:8920 MOV DWORD PTR FS:[EAX],ESP
004DCE28 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
004DCE2B A1 90234E00 MOV EAX,DWORD PTR DS:[4E2390]
004DCE30 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCE32 8B80 F0020000 MOV EAX,DWORD PTR DS:[EAX+2F0]
004DCE38 E8 3793F6FF CALL MyFlashP.00446174
004DCE3D 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
004DCE40 BA 58D24D00 MOV EDX,MyFlashP.004DD258
004DCE45 E8 4E79F2FF CALL MyFlashP.00404798 ; 取机器码(3320040418:)7/+
kgdfnfjhhep ggggvgeE*^$KgJa20046587411)
004DCE4A 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] ; EAX=机器码
004DCE4D 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10]
004DCE50 E8 97D2FFFF CALL MyFlashP.004DA0EC ; ★★★运算注册码跟进!★★★
004DCE55 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; 运算后得到值保存到010DBFF8
004DCE58 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
004DCE5B E8 B0BBF2FF CALL MyFlashP.00408A10
004DCE60 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; EDX=运算好的值=010DDCF4
004DCE63 B8 10536700 MOV EAX,MyFlashP.00675310
004DCE68 E8 BF76F2FF CALL MyFlashP.0040452C ; 010DDCF4转存到00675310
004DCE6D A1 90234E00 MOV EAX,DWORD PTR DS:[4E2390]
004DCE72 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCE74 8B80 10030000 MOV EAX,DWORD PTR DS:[EAX+310]
004DCE7A 8B15 10536700 MOV EDX,DWORD PTR DS:[675310] ; EDX=010DDCF4
004DCE80 E8 1F93F6FF CALL MyFlashP.004461A4
004DCE85 33C0 XOR EAX,EAX
004DCE87 55 PUSH EBP
004DCE88 68 DFCE4D00 PUSH MyFlashP.004DCEDF
004DCE8D 64:FF30 PUSH DWORD PTR FS:[EAX]
004DCE90 64:8920 MOV DWORD PTR FS:[EAX],ESP
004DCE93 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
004DCE96 A1 98254E00 MOV EAX,DWORD PTR DS:[4E2598]
004DCE9B 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCE9D E8 DAA6F8FF CALL MyFlashP.0046757C ; 获取主运行程序的路径
004DCEA2 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C] ; EAX=C:\Program Files\我的
Flash播放器\MyFlashPlayer.exe
004DCEA5 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004DCEA8 E8 A3C2F2FF CALL MyFlashP.00409150 ; 获取安装目录路径
004DCEAD 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] ; EAX=C:\Program Files\我的
Flash播放器
004DCEB0 BA E4D24D00 MOV EDX,MyFlashP.004DD2E4 ; ASCII "\key.reg"
004DCEB5 E8 DE78F2FF CALL MyFlashP.00404798 ; 获取key.reg文件存放的路径
004DCEBA 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18] ; EAX=C:\Program Files\我的
Flash播放器\key.reg
004DCEBD A1 90234E00 MOV EAX,DWORD PTR DS:[4E2390]
004DCEC2 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCEC4 8B80 0C030000 MOV EAX,DWORD PTR DS:[EAX+30C]
004DCECA 8B80 20020000 MOV EAX,DWORD PTR DS:[EAX+220]
004DCED0 8B08 MOV ECX,DWORD PTR DS:[EAX]
004DCED2 FF51 68 CALL DWORD PTR DS:[ECX+68]
004DCED5 33C0 XOR EAX,EAX
004DCED7 5A POP EDX
004DCED8 59 POP ECX
004DCED9 59 POP ECX
004DCEDA 64:8910 MOV DWORD PTR FS:[EAX],EDX
004DCEDD EB 0A JMP SHORT MyFlashP.004DCEE9
004DCEDF ^ E9 686DF2FF JMP MyFlashP.00403C4C
004DCEE4 E8 CB70F2FF CALL MyFlashP.00403FB4
004DCEE9 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
004DCEEC A1 98254E00 MOV EAX,DWORD PTR DS:[4E2598]
004DCEF1 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCEF3 E8 84A6F8FF CALL MyFlashP.0046757C ; 获取主运行程序的路径
004DCEF8 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24] ; EAX=C:\Program Files\我的
Flash播放器\MyFlashPlayer.exe
004DCEFB 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004DCEFE E8 4DC2F2FF CALL MyFlashP.00409150 ; 获取安装目录路径
004DCF03 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] ; EAX=C:\Program Files\我的
Flash播放器
004DCF06 BA F8D24D00 MOV EDX,MyFlashP.004DD2F8 ; ASCII "\ad.txt"
004DCF0B E8 8878F2FF CALL MyFlashP.00404798 ; 获取ad.txt文件存放的路径
004DCF10 8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20] ; EDX=C:\Program Files\我的
Flash播放器\ad.txt
004DCF13 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004DCF16 8B80 B4040000 MOV EAX,DWORD PTR DS:[EAX+4B4]
004DCF1C 8B80 20020000 MOV EAX,DWORD PTR DS:[EAX+220]
004DCF22 8B08 MOV ECX,DWORD PTR DS:[EAX]
004DCF24 FF51 74 CALL DWORD PTR DS:[ECX+74]
004DCF27 C705 20536700 F>MOV DWORD PTR DS:[675320],-1
004DCF31 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
004DCF34 A1 90234E00 MOV EAX,DWORD PTR DS:[4E2390]
004DCF39 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCF3B 8B80 0C030000 MOV EAX,DWORD PTR DS:[EAX+30C]
004DCF41 E8 2E92F6FF CALL MyFlashP.00446174 ; 读取KEY.REG的假码
004DCF46 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28] ; EAX=假码
004DCF49 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
004DCF4C E8 BFBAF2FF CALL MyFlashP.00408A10
004DCF51 A1 90234E00 MOV EAX,DWORD PTR DS:[4E2390]
004DCF56 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCF58 8B80 0C030000 MOV EAX,DWORD PTR DS:[EAX+30C]
004DCF5E 8B10 MOV EDX,DWORD PTR DS:[EAX]
004DCF60 FF92 DC000000 CALL DWORD PTR DS:[EDX+DC]
004DCF66 8D55 D0 LEA EDX,DWORD PTR SS:[EBP-30]
004DCF69 A1 90234E00 MOV EAX,DWORD PTR DS:[4E2390]
004DCF6E 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCF70 8B80 10030000 MOV EAX,DWORD PTR DS:[EAX+310]
004DCF76 E8 F991F6FF CALL MyFlashP.00446174 ; 获取真码16进制长度21(10进制长
度为33)
004DCF7B 8B45 D0 MOV EAX,DWORD PTR SS:[EBP-30] ; 取前面33位字符作为真码出现(当
然不是明码的!!^_^)
004DCF7E 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C]
004DCF81 E8 8ABAF2FF CALL MyFlashP.00408A10
004DCF86 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] ; 真码出现(当然不是明码的!!^_^)
004DCF89 B8 10536700 MOV EAX,MyFlashP.00675310
004DCF8E E8 9975F2FF CALL MyFlashP.0040452C
004DCF93 A1 90234E00 MOV EAX,DWORD PTR DS:[4E2390]
004DCF98 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DCF9A 8B80 10030000 MOV EAX,DWORD PTR DS:[EAX+310]
004DCFA0 8B10 MOV EDX,DWORD PTR DS:[EAX]
004DCFA2 FF92 DC000000 CALL DWORD PTR DS:[EDX+DC]
004DCFA8 A1 10536700 MOV EAX,DWORD PTR DS:[675310] ; EAX=真码为33位长度数字+符号+
字母
004DCFAD 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; EDX=假码
004DCFB0 E8 1F79F2FF CALL MyFlashP.004048D4 ; 比较CALL
004DCFB5 0F84 A4000000 JE MyFlashP.004DD05F ; 关键跳转_爆破点哦!
==========================================================================
跟进004DA0EC
004DA0FC 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; 机器码送入0012FB50
004DA0FF 33C0 XOR EAX,EAX ; EAX清0
004DA101 55 PUSH EBP
004DA102 68 6CA14D00 PUSH MyFlashP.004DA16C
004DA107 64:FF30 PUSH DWORD PTR FS:[EAX]
004DA10A 64:8920 MOV DWORD PTR FS:[EAX],ESP
004DA10D 8BC6 MOV EAX,ESI
004DA10F E8 C4A3F2FF CALL MyFlashP.004044D8 ; 取机器码
004DA114 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; EAX=机器码
004DA117 E8 74A6F2FF CALL MyFlashP.00404790 ; 取BE
004DA11C 8BF8 MOV EDI,EAX ; EDI=EAX=BE
004DA11E 85FF TEST EDI,EDI
004DA120 7E 28 JLE SHORT MyFlashP.004DA14A ; 小于或等于转移
004DA122 BB 01000000 MOV EBX,1 ; EBX=1
004DA127 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
004DA12A 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] ; EDX=机器码
004DA12D 0FB6541A FF MOVZX EDX,BYTE PTR DS:[EDX+EBX-1] ; 依次取机器码送入EDX
004DA132 33D3 XOR EDX,EBX ; EDX和EBX做异或运算,保存回到
EDX
004DA134 83F2 45 XOR EDX,45 ; EDX和45做异或运算,保存回到
EDX
004DA137 E8 7CA5F2FF CALL MyFlashP.004046B8 ; 将机器码转存
004DA13C 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; EDX=0012FB4C
004DA13F 8BC6 MOV EAX,ESI ; EAX=ESI
004DA141 E8 52A6F2FF CALL MyFlashP.00404798
004DA146 43 INC EBX ; EBX+1
004DA147 4F DEC EDI ; EDI-1(BE-1)
004DA148 ^ 75 DD JNZ SHORT MyFlashP.004DA127 ; 循环计算190次!!狂晕
004DA14A 8BC6 MOV EAX,ESI
004DA14C BA 84A14D00 MOV EDX,MyFlashP.004DA184
004DA151 E8 42A6F2FF CALL MyFlashP.00404798
004DA156 33C0 XOR EAX,EAX
004DA158 5A POP EDX
004DA159 59 POP ECX
004DA15A 59 POP ECX
004DA15B 64:8910 MOV DWORD PTR FS:[EAX],EDX
004DA15E 68 73A14D00 PUSH MyFlashP.004DA173
004DA163 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
004DA166 E8 6DA3F2FF CALL MyFlashP.004044D8
004DA16B C3 RETN
004DA16C ^ E9 8F9DF2FF JMP MyFlashP.00403F00
004DA171 ^ EB F0 JMP SHORT MyFlashP.004DA163
004DA173 5F POP EDI
004DA174 5E POP ESI
004DA175 5B POP EBX
004DA176 59 POP ECX
004DA177 59 POP ECX
004DA178 5D POP EBP
004DA179 C3 RETN
===========================================================================
注册码算法过程
1、逐个取机器码的ASCII码,ASCII码和机器码自身的长度(是16进制的)做异或运算,得出值再和45做异或运算。
2、异或运算得出的值合并,取前33位作为真注册码。
结后语:
这个软件算法很简单适合我等算法入门菜鸟级,由于这个软件注册需要有找到一个KEYFILE文件,要找这到这个文件也
很容易这个文件名叫KEY.REG
文件格式也很简单就是一串注册码。希望能给入Crakc算法能提供点有用的信息吧!感谢您坚持看完我的菜文。有不好
不对的地方也希望您能给指正
一下3Q了!没想到会有这么简单注册运算过程的软件,算给我拾到软柿子了。
22:21 2006-1-15
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)