【文章标题】: 英语学习软件 2006 build 1201 真人发音版 算法分析
【文章作者】: anchovy
【作者邮箱】: canyun3160@tom.com
【作者QQ号】: 276055658
【软件名称】: 英语学习软件
【下载地址】: http://www.yyxxi.com/download.html
【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OllyICE
【操作平台】: WinXP
【软件介绍】: 助您学英语、单词、口语、音标和语法的极品英语学习
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
助您学英语、单词、口语、音标和语法的极品英语学习软件。
提供了幼儿,小学,中学,高中,大学,研究生,托福等各级别的230多个常用词库。
提供了情景对话,常用口语等10000多条。
软件用两个可爱的卡通人物对话的形式学习,十分有趣,让你在轻松的环境中学习,成倍提高学习效果。
软件用10多个动画文件帮助你全面学会弄懂音标,用100多个动画文件帮助你全面学会弄懂语法,每个动画里面还配有小测试哦。
学习内容可以转成mp3,可以拷到mp3随身播放器中播放。提供英语跟读功能,实时检查你的语音和标准语音的差别。
PEID检查无壳,乌龟不顶壳子,好危险啦!!!
用DeDe反编译,找到按钮事件,了解大概的流程,用OllyICE加载动态分析!
0049A848 >/. 55 push ebp
0049A849 |. 8BEC mov ebp, esp
0049A84B |. B9 08000000 mov ecx, 8
0049A850 |> 6A 00 /push 0
0049A852 |. 6A 00 |push 0
0049A854 |. 49 |dec ecx
0049A855 |.^ 75 F9 \jnz short 0049A850
0049A857 |. 8945 FC mov dword ptr [ebp-4], eax
0049A85A |. 33C0 xor eax, eax
0049A85C |. 55 push ebp
0049A85D |. 68 37AA4900 push <->System.@HandleFinally;>
0049A862 |. 64:FF30 push dword ptr fs:[eax]
0049A865 |. 64:8920 mov dword ptr fs:[eax], esp
0049A868 |. 8D55 F0 lea edx, dword ptr [ebp-10]
0049A86B |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A86E >|. 8B80 08030000 mov eax, dword ptr [eax+308]
0049A874 >|. E8 1390FBFF call 0045388C ; 得到用户名
0049A879 |. 8B45 F0 mov eax, dword ptr [ebp-10]
0049A87C |. 8D55 F4 lea edx, dword ptr [ebp-C]
0049A87F >|. E8 20E1F6FF call 004089A4 ; 用户名不能为空!
0049A884 |. 837D F4 00 cmp dword ptr [ebp-C], 0
0049A888 |. 0F84 4C010000 je 0049A9DA
0049A88E |. 8D55 E8 lea edx, dword ptr [ebp-18]
0049A891 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A894 >|. 8B80 10030000 mov eax, dword ptr [eax+310]
0049A89A >|. E8 ED8FFBFF call 0045388C ; 得到输入的注册码
0049A89F |. 8B45 E8 mov eax, dword ptr [ebp-18]
0049A8A2 |. 8D55 EC lea edx, dword ptr [ebp-14]
0049A8A5 >|. E8 FAE0F6FF call 004089A4
0049A8AA |. 837D EC 00 cmp dword ptr [ebp-14], 0 ; 注册码不能为空!
0049A8AE |. 0F84 26010000 je 0049A9DA
0049A8B4 |. 8D55 E0 lea edx, dword ptr [ebp-20]
0049A8B7 |. A1 E0774B00 mov eax, dword ptr [4B77E0]
0049A8BC |. 8B00 mov eax, dword ptr [eax]
0049A8BE >|. E8 5D93FDFF call 00473C20 ; GetExeName(TDdeMgr)
0049A8C3 |. 8B45 E0 mov eax, dword ptr [ebp-20]
0049A8C6 |. 8D55 E4 lea edx, dword ptr [ebp-1C]
0049A8C9 >|. E8 AAF6FFFF call 00499F78 ; ExtractFilePath(AnsiString):AnsiString
0049A8CE |. 8B55 E4 mov edx, dword ptr [ebp-1C]
0049A8D1 |. 8D45 F8 lea eax, dword ptr [ebp-8]
0049A8D4 |. B9 4CAA4900 mov ecx, 0049AA4C
0049A8D9 >|. E8 969FF6FF call 00404874 ; LStrCat3
0049A8DE |. 8D55 D4 lea edx, dword ptr [ebp-2C]
0049A8E1 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A8E4 >|. 8B80 10030000 mov eax, dword ptr [eax+310]
0049A8EA >|. E8 9D8FFBFF call 0045388C
0049A8EF |. 8B45 D4 mov eax, dword ptr [ebp-2C]
0049A8F2 |. 8D55 D8 lea edx, dword ptr [ebp-28]
0049A8F5 >|. E8 AAE0F6FF call 004089A4
0049A8FA |. 8B45 D8 mov eax, dword ptr [ebp-28]
0049A8FD |. 50 push eax
0049A8FE |. 8D55 CC lea edx, dword ptr [ebp-34]
0049A901 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A904 >|. 8B80 0C030000 mov eax, dword ptr [eax+30C]
0049A90A >|. E8 7D8FFBFF call 0045388C ; 得到机器码
0049A90F |. 8B45 CC mov eax, dword ptr [ebp-34]
0049A912 |. 8D55 D0 lea edx, dword ptr [ebp-30]
0049A915 >|. E8 8AE0F6FF call 004089A4
0049A91A |. 8B45 D0 mov eax, dword ptr [ebp-30]
0049A91D |. 8D4D DC lea ecx, dword ptr [ebp-24]
0049A920 |. 5A pop edx
0049A921 >|. E8 EEF1FFFF call 00499B14
0049A926 |. 8B55 DC mov edx, dword ptr [ebp-24]
0049A929 |. A1 8C744B00 mov eax, dword ptr [4B748C]
0049A92E >|. E8 899CF6FF call 004045BC
0049A933 |. 6A 00 push 0
0049A935 |. 8B15 8C744B00 mov edx, dword ptr [4B748C] ; English.004B8E3C
0049A93B |. 8B12 mov edx, dword ptr [edx]
0049A93D |. 8B4D F8 mov ecx, dword ptr [ebp-8]
0049A940 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A943 >|. E8 E0F6FFFF call 0049A028 ; ->关键call
0049A948 |. 84C0 test al, al
0049A94A |. 74 6A je short 0049A9B6 ; ->关键跳转
0049A94C |. A1 00764B00 mov eax, dword ptr [4B7600]
0049A951 |. C600 01 mov byte ptr [eax], 1
0049A954 |. 8D55 C4 lea edx, dword ptr [ebp-3C]
0049A957 |. A1 B0754B00 mov eax, dword ptr [4B75B0]
0049A95C |. 8B00 mov eax, dword ptr [eax]
0049A95E >|. E8 298FFBFF call 0045388C
0049A963 |. FF75 C4 push dword ptr [ebp-3C]
0049A966 |. 68 68AA4900 push 0049AA68 ; ASCII " - ["
0049A96B |. 8D55 C0 lea edx, dword ptr [ebp-40]
0049A96E |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A971 >|. 8B80 08030000 mov eax, dword ptr [eax+308]
0049A977 >|. E8 108FFBFF call 0045388C
0049A97C |. FF75 C0 push dword ptr [ebp-40]
0049A97F |. 68 78AA4900 push 0049AA78
0049A984 |. 8D45 C8 lea eax, dword ptr [ebp-38]
0049A987 |. BA 04000000 mov edx, 4
0049A98C >|. E8 579FF6FF call 004048E8
0049A991 |. 8B55 C8 mov edx, dword ptr [ebp-38]
0049A994 |. A1 B0754B00 mov eax, dword ptr [4B75B0]
0049A999 |. 8B00 mov eax, dword ptr [eax]
0049A99B >|. E8 1C8FFBFF call 004538BC
0049A9A0 |. 55 push ebp
0049A9A1 |. E8 BAFDFFFF call 0049A760
0049A9A6 |. 59 pop ecx
0049A9A7 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A9AA |. C780 4C020000>mov dword ptr [eax+24C], 1
0049A9B4 |. EB 24 jmp short 0049A9DA
0049A9B6 |> 6A 10 push 10
0049A9B8 |. 68 7CAA4900 push 0049AA7C
0049A9BD |. 68 88AA4900 push 0049AA88 ; 注册码输入错误
0049A9C2 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A9C5 >|. E8 E2F6FBFF call 0045A0AC
0049A9CA |. 50 push eax ; |hOwner
0049A9CB >|. E8 70C9F6FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0049A9D0 |. A1 8C744B00 mov eax, dword ptr [4B748C]
0049A9D5 >|. E8 8E9BF6FF call 00404568
0049A9DA |> 33C0 xor eax, eax
0049A9DC |. 5A pop edx
0049A9DD |. 59 pop ecx
0049A9DE |. 59 pop ecx
0049A9DF |. 64:8910 mov dword ptr fs:[eax], edx
0049A9E2 |. 68 3EAA4900 push 0049AA3E
0049A9E7 |> 8D45 C0 lea eax, dword ptr [ebp-40]
0049A9EA |. BA 04000000 mov edx, 4
0049A9EF >|. E8 989BF6FF call 0040458C
0049A9F4 |. 8D45 D0 lea eax, dword ptr [ebp-30]
0049A9F7 >|. E8 6C9BF6FF call 00404568
0049A9FC |. 8D45 D4 lea eax, dword ptr [ebp-2C]
0049A9FF >|. E8 649BF6FF call 00404568
0049AA04 |. 8D45 D8 lea eax, dword ptr [ebp-28]
0049AA07 |. BA 04000000 mov edx, 4
0049AA0C >|. E8 7B9BF6FF call 0040458C
0049AA11 |. 8D45 E8 lea eax, dword ptr [ebp-18]
0049AA14 >|. E8 4F9BF6FF call 00404568
0049AA19 |. 8D45 EC lea eax, dword ptr [ebp-14]
0049AA1C >|. E8 479BF6FF call 00404568
0049AA21 |. 8D45 F0 lea eax, dword ptr [ebp-10]
0049AA24 >|. E8 3F9BF6FF call 00404568
0049AA29 |. 8D45 F4 lea eax, dword ptr [ebp-C]
0049AA2C |. BA 02000000 mov edx, 2
0049AA31 >|. E8 569BF6FF call 0040458C
0049AA36 \. C3 retn
0049AA37 > .^ E9 1095F6FF jmp 00403F4C
0049AA3C .^ EB A9 jmp short 0049A9E7
0049AA3E . 8BE5 mov esp, ebp
0049AA40 . 5D pop ebp
0049AA41 . C3 retn
关键call的代码如下:
0049A028 /$ 55 push ebp
0049A029 |. 8BEC mov ebp, esp
0049A02B |. 81C4 70FAFFFF add esp, -590
0049A031 |. 53 push ebx
0049A032 |. 56 push esi
0049A033 |. 57 push edi
0049A034 |. 33DB xor ebx, ebx
0049A036 |. 895D E8 mov dword ptr [ebp-18], ebx
0049A039 |. 895D D0 mov dword ptr [ebp-30], ebx
0049A03C |. 894D F8 mov dword ptr [ebp-8], ecx
0049A03F |. 8955 FC mov dword ptr [ebp-4], edx
0049A042 |. 8B45 FC mov eax, dword ptr [ebp-4]
0049A045 |. E8 CEA9F6FF call 00404A18
0049A04A |. 8B45 F8 mov eax, dword ptr [ebp-8]
0049A04D |. E8 C6A9F6FF call 00404A18
0049A052 |. 33C0 xor eax, eax
0049A054 |. 55 push ebp
0049A055 |. 68 10A54900 push 0049A510
0049A05A |. 64:FF30 push dword ptr fs:[eax]
0049A05D |. 64:8920 mov dword ptr fs:[eax], esp
0049A060 |. 8D45 E8 lea eax, dword ptr [ebp-18]
0049A063 |. 8B55 FC mov edx, dword ptr [ebp-4]
0049A066 |. E8 95A5F6FF call 00404600
0049A06B |. 33DB xor ebx, ebx
0049A06D |. 8B45 F8 mov eax, dword ptr [ebp-8]
0049A070 |. E8 23FEFFFF call 00499E98 ; 判断"scene\英语900句.xml"文件是否存在
0049A075 |. 84C0 test al, al
0049A077 |. 0F84 68040000 je 0049A4E5
0049A07D |. BA 40000000 mov edx, 40
0049A082 |. 8B45 F8 mov eax, dword ptr [ebp-8]
0049A085 |. E8 5EFDFFFF call 00499DE8
0049A08A |. 8BF0 mov esi, eax
0049A08C |. 85F6 test esi, esi
0049A08E |. 0F8C 51040000 jl 0049A4E5
0049A094 |. 8BC6 mov eax, esi
0049A096 |. E8 19FEFFFF call 00499EB4 ; 返回文件长度
0049A09B |. 8BF8 mov edi, eax
0049A09D |. 83FF 08 cmp edi, 8 ; 长度小于8则Game Over
0049A0A0 |. 0F8C 3F040000 jl 0049A4E5
0049A0A6 |. 33C9 xor ecx, ecx
0049A0A8 |. 33D2 xor edx, edx
0049A0AA |. 8BC6 mov eax, esi
0049A0AC |. E8 F7FDFFFF call 00499EA8
0049A0B1 |. 8D55 F4 lea edx, dword ptr [ebp-C]
0049A0B4 |. B9 04000000 mov ecx, 4
0049A0B9 |. 8BC6 mov eax, esi
0049A0BB |. E8 2CFEFFFF call 00499EEC ; 文件首读取了4字节,比较是否是09750409
0049A0C0 |. 817D F4 09047>cmp dword ptr [ebp-C], 19750409
0049A0C7 |. 0F94C3 sete bl ; (initial cpu selection)
0049A0CA |. 80F3 01 xor bl, 1
0049A0CD |. 84DB test bl, bl
0049A0CF |. 75 0D jnz short 0049A0DE
0049A0D1 |. 33C9 xor ecx, ecx
0049A0D3 |. 33D2 xor edx, edx
0049A0D5 |. 8BC6 mov eax, esi
0049A0D7 |. E8 CCFDFFFF call 00499EA8
0049A0DC |. EB 65 jmp short 0049A143
0049A0DE |> B9 02000000 mov ecx, 2
0049A0E3 |. BA F8FFFFFF mov edx, -8
0049A0E8 |. 8BC6 mov eax, esi
0049A0EA |. E8 B9FDFFFF call 00499EA8
0049A0EF |. 8D55 F0 lea edx, dword ptr [ebp-10]
0049A0F2 |. B9 04000000 mov ecx, 4
0049A0F7 |. 8BC6 mov eax, esi
0049A0F9 |. E8 EEFDFFFF call 00499EEC
0049A0FE |. 8D55 F4 lea edx, dword ptr [ebp-C]
0049A101 |. B9 04000000 mov ecx, 4
0049A106 |. 8BC6 mov eax, esi
0049A108 |. E8 DFFDFFFF call 00499EEC
0049A10D |. 817D F4 09047>cmp dword ptr [ebp-C], 19750409
0049A114 |. 75 2D jnz short 0049A143
0049A116 |. 8BC7 mov eax, edi
0049A118 |. 83E8 0C sub eax, 0C
0049A11B |. 3B45 F0 cmp eax, dword ptr [ebp-10]
0049A11E |. 7E 23 jle short 0049A143
0049A120 |. 8B55 F0 mov edx, dword ptr [ebp-10]
0049A123 |. F7DA neg edx
0049A125 |. 83EA 0C sub edx, 0C
0049A128 |. B9 02000000 mov ecx, 2
0049A12D |. 8BC6 mov eax, esi
0049A12F |. E8 74FDFFFF call 00499EA8
0049A134 |. 8D55 EC lea edx, dword ptr [ebp-14]
0049A137 |. B9 04000000 mov ecx, 4
0049A13C |. 8BC6 mov eax, esi
0049A13E |. E8 A9FDFFFF call 00499EEC
0049A143 |> 8D55 AD lea edx, dword ptr [ebp-53]
0049A146 |. B9 23000000 mov ecx, 23
0049A14B |. 8BC6 mov eax, esi
0049A14D |. E8 9AFDFFFF call 00499EEC ; 文件是否小于23H
0049A152 |. 83F8 23 cmp eax, 23
0049A155 |. 0F9CC3 setl bl
0049A158 |. 84DB test bl, bl
0049A15A |. 75 0A jnz short 0049A166
0049A15C |. 817D AD 09047>cmp dword ptr [ebp-53], 19750409
0049A163 |. 0F95C3 setne bl
0049A166 |> 8B45 B3 mov eax, dword ptr [ebp-4D] ; 文件偏移7h处
0049A169 |. 8BD0 mov edx, eax
0049A16B |. 83E2 04 and edx, 4
0049A16E |. 83FA 04 cmp edx, 4
0049A171 |. 0F9445 E4 sete byte ptr [ebp-1C] ; 若相等则置此内存块为1,后面会用到此内存块
0049A175 |. 8BD0 mov edx, eax
0049A177 |. 83E2 20 and edx, 20
0049A17A |. 83FA 20 cmp edx, 20
0049A17D |. 0F9445 E3 sete byte ptr [ebp-1D] ; 若相等则置此内存块为1,后面会用到此内存块
0049A181 |. 83E0 01 and eax, 1 ; eax与4h相与等于4h 并且 与20h相与要等于20h
0049A184 |. 48 dec eax
0049A185 |. 75 22 jnz short 0049A1A9
0049A187 |. 8D85 73FAFFFF lea eax, dword ptr [ebp-58D]
0049A18D |. 8945 DC mov dword ptr [ebp-24], eax
0049A190 |. 84DB test bl, bl
0049A192 |. 75 15 jnz short 0049A1A9
0049A194 |. 8B55 DC mov edx, dword ptr [ebp-24]
0049A197 |. B9 10000000 mov ecx, 10
0049A19C |. 8BC6 mov eax, esi
0049A19E |. E8 49FDFFFF call 00499EEC ; 从文件23h处读10h字节
0049A1A3 |. 83F8 10 cmp eax, 10
0049A1A6 |. 0F9CC3 setl bl
0049A1A9 |> 84DB test bl, bl
0049A1AB |. 75 06 jnz short 0049A1B3
0049A1AD |. 8A5D E3 mov bl, byte ptr [ebp-1D]
0049A1B0 |. 80F3 01 xor bl, 1
0049A1B3 |> 84DB test bl, bl
0049A1B5 |. 75 13 jnz short 0049A1CA
0049A1B7 |. 8D55 E6 lea edx, dword ptr [ebp-1A]
0049A1BA |. B9 01000000 mov ecx, 1
0049A1BF |. 8BC6 mov eax, esi
0049A1C1 |. E8 26FDFFFF call 00499EEC ; 文件偏移33h处读1字节
0049A1C6 |. 48 dec eax
0049A1C7 |. 0F9CC3 setl bl
0049A1CA |> 84DB test bl, bl
0049A1CC |. 75 1C jnz short 0049A1EA
0049A1CE |. 33C9 xor ecx, ecx
0049A1D0 |. 8A4D E6 mov cl, byte ptr [ebp-1A] ; 要读取的字节数
0049A1D3 |. 8D95 93FCFFFF lea edx, dword ptr [ebp-36D]
0049A1D9 |. 8BC6 mov eax, esi
0049A1DB |. E8 0CFDFFFF call 00499EEC
0049A1E0 |. 33D2 xor edx, edx
0049A1E2 |. 8A55 E6 mov dl, byte ptr [ebp-1A]
0049A1E5 |. 3BC2 cmp eax, edx
0049A1E7 |. 0F9CC3 setl bl
0049A1EA |> 84DB test bl, bl
0049A1EC |. 0F85 64020000 jnz 0049A456
0049A1F2 |. 8D55 93 lea edx, dword ptr [ebp-6D]
0049A1F5 |. B9 1A000000 mov ecx, 1A
0049A1FA |. 8BC6 mov eax, esi
0049A1FC |. E8 EBFCFFFF call 00499EEC
0049A201 |. 83F8 1A cmp eax, 1A
0049A204 |. 0F9CC3 setl bl
0049A207 |. 84DB test bl, bl
0049A209 |. 0F85 2D020000 jnz 0049A43C
0049A20F |. 8B45 97 mov eax, dword ptr [ebp-69]
0049A212 |. 8945 F0 mov dword ptr [ebp-10], eax
0049A215 |. 807D E3 00 cmp byte ptr [ebp-1D], 0
0049A219 |. 74 1D je short 0049A238
0049A21B |. EB 03 jmp short 0049A220
0049A21D |> FF45 F0 /inc dword ptr [ebp-10]
0049A220 |> 8B45 F0 mov eax, dword ptr [ebp-10]
0049A223 |. 25 0F000080 |and eax, 8000000F
0049A228 |. 79 05 |jns short 0049A22F
0049A22A |. 48 |dec eax
0049A22B |. 83C8 F0 |or eax, FFFFFFF0
0049A22E |. 40 |inc eax
0049A22F |> 85C0 |test eax, eax
0049A231 |.^ 75 EA \jnz short 0049A21D ; 小型循环,修改ebp-10内存处的值,后面要用到。
0049A233 |. EB 16 jmp short 0049A24B
0049A235 |> FF45 F0 /inc dword ptr [ebp-10]
0049A238 |> 8B45 F0 mov eax, dword ptr [ebp-10]
0049A23B |. 25 07000080 |and eax, 80000007
0049A240 |. 79 05 |jns short 0049A247
0049A242 |. 48 |dec eax
0049A243 |. 83C8 F8 |or eax, FFFFFFF8
0049A246 |. 40 |inc eax
0049A247 |> 85C0 |test eax, eax
0049A249 |.^ 75 EA \jnz short 0049A235
0049A24B |> 84DB test bl, bl
0049A24D |. 75 13 jnz short 0049A262
0049A24F |. 8D55 E6 lea edx, dword ptr [ebp-1A]
0049A252 |. B9 01000000 mov ecx, 1
0049A257 |. 8BC6 mov eax, esi
0049A259 |. E8 8EFCFFFF call 00499EEC ; 又读1字节
0049A25E |. 48 dec eax
0049A25F |. 0F9CC3 setl bl
0049A262 |> 84DB test bl, bl
0049A264 |. 0F85 82000000 jnz 0049A2EC
0049A26A |. 807D E4 00 cmp byte ptr [ebp-1C], 0
0049A26E |. 75 20 jnz short 0049A290
0049A270 |. 33C9 xor ecx, ecx
0049A272 |. 8A4D E6 mov cl, byte ptr [ebp-1A]
0049A275 |. 41 inc ecx
0049A276 |. 8D95 93FDFFFF lea edx, dword ptr [ebp-26D]
0049A27C |. 8BC6 mov eax, esi
0049A27E |. E8 69FCFFFF call 00499EEC
0049A283 |. 33D2 xor edx, edx
0049A285 |. 8A55 E6 mov dl, byte ptr [ebp-1A]
0049A288 |. 42 inc edx
0049A289 |. 3BC2 cmp eax, edx
0049A28B |. 0F9CC3 setl bl
0049A28E |. EB 5C jmp short 0049A2EC
0049A290 |> 33C0 xor eax, eax
0049A292 |. 8A45 E6 mov al, byte ptr [ebp-1A] ; 将上次读取的1字节,经过一系列运算后,作为下次将读取的字节数
0049A295 |. 83C0 0F add eax, 0F
0049A298 |. C1E8 04 shr eax, 4
0049A29B |. 8BC8 mov ecx, eax
0049A29D |. C1E1 04 shl ecx, 4
0049A2A0 |. 41 inc ecx
0049A2A1 |. 8D95 93FEFFFF lea edx, dword ptr [ebp-16D]
0049A2A7 |. 8BC6 mov eax, esi
0049A2A9 |. E8 3EFCFFFF call 00499EEC
0049A2AE |. 33D2 xor edx, edx
0049A2B0 |. 8A55 E6 mov dl, byte ptr [ebp-1A]
0049A2B3 |. 83C2 0F add edx, 0F
0049A2B6 |. C1EA 04 shr edx, 4
0049A2B9 |. C1E2 04 shl edx, 4
0049A2BC |. 42 inc edx
0049A2BD |. 3BC2 cmp eax, edx
0049A2BF |. 0F9CC3 setl bl
0049A2C2 |. 8D85 94FDFFFF lea eax, dword ptr [ebp-26C]
0049A2C8 |. 50 push eax
0049A2C9 |. 33C9 xor ecx, ecx
0049A2CB |. 8A4D E6 mov cl, byte ptr [ebp-1A]
0049A2CE |. 8D95 94FEFFFF lea edx, dword ptr [ebp-16C]
0049A2D4 |. 8B45 E8 mov eax, dword ptr [ebp-18]
0049A2D7 |. E8 CCEAFFFF call 00498DA8
0049A2DC |. 33D2 xor edx, edx
0049A2DE |. 8A55 E6 mov dl, byte ptr [ebp-1A]
0049A2E1 |. 8D85 93FDFFFF lea eax, dword ptr [ebp-26D]
0049A2E7 |. E8 5488F6FF call 00402B40
0049A2EC |> 84DB test bl, bl
0049A2EE |. 75 13 jnz short 0049A303
0049A2F0 |. 8D55 E5 lea edx, dword ptr [ebp-1B] ; J
0049A2F3 |. B9 01000000 mov ecx, 1
0049A2F8 |. 8BC6 mov eax, esi
0049A2FA |. E8 EDFBFFFF call 00499EEC ; 再读1字节
0049A2FF |. 48 dec eax
0049A300 |. 0F9CC3 setl bl
0049A303 |> 807D E3 00 cmp byte ptr [ebp-1D], 0
0049A307 |. 74 13 je short 0049A31C
0049A309 |. 33C0 xor eax, eax
0049A30B |. 8A45 E5 mov al, byte ptr [ebp-1B]
0049A30E |. 83C0 0F add eax, 0F
0049A311 |. C1E8 04 shr eax, 4
0049A314 |. C1E0 04 shl eax, 4
0049A317 |. 8845 E7 mov byte ptr [ebp-19], al
0049A31A |. EB 11 jmp short 0049A32D
0049A31C |> 33C0 xor eax, eax
0049A31E |. 8A45 E5 mov al, byte ptr [ebp-1B]
0049A321 |. 83C0 07 add eax, 7
0049A324 |. C1E8 03 shr eax, 3
0049A327 |. C1E0 03 shl eax, 3
0049A32A |. 8845 E7 mov byte ptr [ebp-19], al
0049A32D |> 84DB test bl, bl
0049A32F |. 75 1C jnz short 0049A34D
0049A331 |. 33DB xor ebx, ebx
0049A333 |. 8A5D E7 mov bl, byte ptr [ebp-19] ; 对这次读取的字节做一系运算
0049A336 |. 43 inc ebx
0049A337 |. 8BCB mov ecx, ebx
0049A339 |. 8D95 93FAFFFF lea edx, dword ptr [ebp-56D]
0049A33F |. 8BC6 mov eax, esi
0049A341 |. E8 A6FBFFFF call 00499EEC
0049A346 |. 3BC3 cmp eax, ebx
0049A348 |. 0F9CC0 setl al
0049A34B |. 8BD8 mov ebx, eax
0049A34D |> 84DB test bl, bl
0049A34F |. 0F85 91000000 jnz 0049A3E6
0049A355 |. EB 79 jmp short 0049A3D0
0049A357 |> 8D55 E6 /lea edx, dword ptr [ebp-1A]
0049A35A |. B9 01000000 |mov ecx, 1
0049A35F |. 8BC6 |mov eax, esi
0049A361 |. E8 86FBFFFF |call 00499EEC
0049A366 |. 48 |dec eax
0049A367 |. 0F9CC3 |setl bl
0049A36A |. 84DB |test bl, bl
0049A36C |. 75 78 |jnz short 0049A3E6
0049A36E |. 807D E6 00 |cmp byte ptr [ebp-1A], 0
0049A372 |. 74 72 |je short 0049A3E6
0049A374 |. 807D E4 00 |cmp byte ptr [ebp-1C], 0
0049A378 |. 75 20 |jnz short 0049A39A
0049A37A |. 33C9 |xor ecx, ecx
0049A37C |. 8A4D E6 |mov cl, byte ptr [ebp-1A]
0049A37F |. 41 |inc ecx
0049A380 |. 8D95 93FBFFFF |lea edx, dword ptr [ebp-46D]
0049A386 |. 8BC6 |mov eax, esi
0049A388 |. E8 5FFBFFFF |call 00499EEC
0049A38D |. 33D2 |xor edx, edx
0049A38F |. 8A55 E6 |mov dl, byte ptr [ebp-1A]
0049A392 |. 42 |inc edx
0049A393 |. 3BC2 |cmp eax, edx
0049A395 |. 0F9CC3 |setl bl
0049A398 |. EB 32 |jmp short 0049A3CC
0049A39A |> 33C0 |xor eax, eax
0049A39C |. 8A45 E6 |mov al, byte ptr [ebp-1A]
0049A39F |. 83C0 0F |add eax, 0F
0049A3A2 |. C1E8 04 |shr eax, 4
0049A3A5 |. 8BC8 |mov ecx, eax
0049A3A7 |. C1E1 04 |shl ecx, 4
0049A3AA |. 41 |inc ecx
0049A3AB |. 8D95 93FEFFFF |lea edx, dword ptr [ebp-16D]
0049A3B1 |. 8BC6 |mov eax, esi
0049A3B3 |. E8 34FBFFFF |call 00499EEC
0049A3B8 |. 33D2 |xor edx, edx
0049A3BA |. 8A55 E6 |mov dl, byte ptr [ebp-1A]
0049A3BD |. 83C2 0F |add edx, 0F
0049A3C0 |. C1EA 04 |shr edx, 4
0049A3C3 |. C1E2 04 |shl edx, 4
0049A3C6 |. 42 |inc edx
0049A3C7 |. 3BC2 |cmp eax, edx
0049A3C9 |. 0F9CC3 |setl bl
0049A3CC |> 84DB |test bl, bl
0049A3CE |. 75 16 |jnz short 0049A3E6
0049A3D0 |> B9 01000000 mov ecx, 1
0049A3D5 |. 33D2 |xor edx, edx
0049A3D7 |. 8BC6 |mov eax, esi
0049A3D9 |. E8 CAFAFFFF |call 00499EA8 ; 文件总长度
0049A3DE |. 3BF8 |cmp edi, eax
0049A3E0 |.^ 0F8F 71FFFFFF \jg 0049A357
0049A3E6 |> 84DB test bl, bl
0049A3E8 |. 75 18 jnz short 0049A402
0049A3EA |. B9 01000000 mov ecx, 1
0049A3EF |. 33D2 xor edx, edx
0049A3F1 |. 8BC6 mov eax, esi
0049A3F3 |. E8 B0FAFFFF call 00499EA8
0049A3F8 |. 8BD7 mov edx, edi
0049A3FA |. 2BD0 sub edx, eax
0049A3FC |. 3B55 F0 cmp edx, dword ptr [ebp-10]
0049A3FF |. 0F9CC3 setl bl
0049A402 |> 84DB test bl, bl
0049A404 |. 75 36 jnz short 0049A43C
0049A406 |. 8B45 F0 mov eax, dword ptr [ebp-10]
0049A409 |. 05 FF1F0000 add eax, 1FFF
0049A40E |. 25 00E0FFFF and eax, FFFFE000
0049A413 |. 8945 D8 mov dword ptr [ebp-28], eax
0049A416 |. A1 98784B00 mov eax, dword ptr [4B7898]
0049A41B |. 0FB700 movzx eax, word ptr [eax]
0049A41E |. 8B55 D8 mov edx, dword ptr [ebp-28]
0049A421 |. E8 DED0F6FF call 00407504
0049A426 |. 8945 D4 mov dword ptr [ebp-2C], eax
0049A429 |. 8B55 D4 mov edx, dword ptr [ebp-2C]
0049A42C |. 8B4D F0 mov ecx, dword ptr [ebp-10]
0049A42F |. 8BC6 mov eax, esi
0049A431 |. E8 B6FAFFFF call 00499EEC
0049A436 |. 3B45 F0 cmp eax, dword ptr [ebp-10]
0049A439 |. 0F9CC3 setl bl
0049A43C |> 84DB test bl, bl
0049A43E |. 75 16 jnz short 0049A456
0049A440 |. B9 01000000 mov ecx, 1
0049A445 |. 33D2 xor edx, edx
0049A447 |. 8BC6 mov eax, esi
0049A449 |. E8 5AFAFFFF call 00499EA8
0049A44E |. 83EF 08 sub edi, 8
0049A451 |. 3BC7 cmp eax, edi
0049A453 |. 0F9CC3 setl bl
0049A456 |> 8BC6 mov eax, esi
0049A458 |. E8 CBF9FFFF call 00499E28
0049A45D |. 84DB test bl, bl
0049A45F |. 75 73 jnz short 0049A4D4
0049A461 |. 8B45 D4 mov eax, dword ptr [ebp-2C]
0049A464 |. 50 push eax
0049A465 |. 8B4D 97 mov ecx, dword ptr [ebp-69]
0049A468 |. 8B55 D4 mov edx, dword ptr [ebp-2C]
0049A46B |. 8B45 E8 mov eax, dword ptr [ebp-18]
0049A46E |. E8 25EAFFFF call 00498E98
0049A473 |. 8D8D 83FAFFFF lea ecx, dword ptr [ebp-57D]
0049A479 |. 8B55 97 mov edx, dword ptr [ebp-69]
0049A47C |. 8B45 D4 mov eax, dword ptr [ebp-2C]
0049A47F |. E8 28FBFFFF call 00499FAC ; 生成一字串数据 D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E
0049A484 |. BE 10000000 mov esi, 10
0049A489 |. 8D85 83FAFFFF lea eax, dword ptr [ebp-57D]
0049A48F |. 8D95 73FAFFFF lea edx, dword ptr [ebp-58D]
0049A495 |> 8A08 /mov cl, byte ptr [eax]
0049A497 |. 3A0A |cmp cl, byte ptr [edx] ; 与一串字符进行比较
0049A499 |. 74 02 |je short 0049A49D
0049A49B |. B3 01 |mov bl, 1
0049A49D |> 42 |inc edx
0049A49E |. 40 |inc eax
0049A49F |. 4E |dec esi
0049A4A0 |.^ 75 F3 \jnz short 0049A495
0049A4A2 |. 84DB test bl, bl
0049A4A4 |. 75 2E jnz short 0049A4D4
0049A4A6 |. 8D45 D0 lea eax, dword ptr [ebp-30]
0049A4A9 |. 8B55 D4 mov edx, dword ptr [ebp-2C]
0049A4AC |. E8 AFA2F6FF call 00404760
0049A4B1 |. 8D45 D0 lea eax, dword ptr [ebp-30]
0049A4B4 |. 8B55 97 mov edx, dword ptr [ebp-69]
0049A4B7 |. E8 F8A6F6FF call 00404BB4
0049A4BC |. 837D 08 00 cmp dword ptr [ebp+8], 0
0049A4C0 |. 74 12 je short 0049A4D4
0049A4C2 |. 8B45 D0 mov eax, dword ptr [ebp-30]
0049A4C5 |. E8 5EA5F6FF call 00404A28
0049A4CA |. 8BD0 mov edx, eax
0049A4CC |. 8B45 08 mov eax, dword ptr [ebp+8]
0049A4CF |. 8B08 mov ecx, dword ptr [eax]
0049A4D1 |. FF51 7C call dword ptr [ecx+7C]
0049A4D4 |> 837D D8 00 cmp dword ptr [ebp-28], 0
0049A4D8 |. 74 08 je short 0049A4E2
0049A4DA |. 8B45 D4 mov eax, dword ptr [ebp-2C]
0049A4DD |. E8 4ED0F6FF call 00407530
0049A4E2 |> 80F3 01 xor bl, 1
0049A4E5 |> 33C0 xor eax, eax
0049A4E7 |. 5A pop edx
0049A4E8 |. 59 pop ecx
0049A4E9 |. 59 pop ecx
0049A4EA |. 64:8910 mov dword ptr fs:[eax], edx
0049A4ED |. 68 17A54900 push 0049A517
0049A4F2 |> 8D45 D0 lea eax, dword ptr [ebp-30]
0049A4F5 |. E8 6EA0F6FF call 00404568
0049A4FA |. 8D45 E8 lea eax, dword ptr [ebp-18]
0049A4FD |. E8 66A0F6FF call 00404568
0049A502 |. 8D45 F8 lea eax, dword ptr [ebp-8]
0049A505 |. BA 02000000 mov edx, 2
0049A50A |. E8 7DA0F6FF call 0040458C
0049A50F \. C3 retn
0049A510 .^ E9 379AF6FF jmp 00403F4C
0049A515 .^ EB DB jmp short 0049A4F2
0049A517 . 8BC3 mov eax, ebx
0049A519 . 5F pop edi
0049A51A . 5E pop esi
0049A51B . 5B pop ebx
0049A51C . 8BE5 mov esp, ebp
0049A51E . 5D pop ebp
0049A51F . C2 0400 retn 4
0049A522 8BC0 mov eax, eax
0049A524 > . E8 375AFDFF call 0046FF60 ; ->Forms.TCustomForm.Close(TCustomForm);
0049A529 . C3 retn
--------------------------------------------------------------------------------
【经验总结】
用户名,注册码均不能为空
跟踪程序时并未发现机器码参与运算
首先判断安装目录下是否存在"scene\英语900句.xml"
从文件0h偏移处读取4字节与19750409相比较,这个可能是软件作者的生日,呵!!
第5个和第6个字节任意
从6h处读4个字节,与4h相与要等于4h 并且 与20h相与要等于20h
从0ah处放任意25个字节
23h处放D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E
33h处的1个字节表示长度,后面紧跟此长度的任意数据
39h处的4个字节任意
3dh处的4个字节 循环(自加1,然后与8000000F 相与) 循环结束时,这4字节的值要等于0
41h处12h个任意数据
53h处1个字节任意,
54h处 把53h偏移的1个字节加0Fh 然后右移4位,再左移动4位 再加1 得出一个数字,54h处就存放此长度的数据
紧接着存放任意1字节,设为A
对A加上7,然后右移3位,再左移3位,再自加1,得出一个值设为B
接着后面存放B长度的字节,内容任意
我伪造的"英语900句.xml"数据如下 16进制格式:
0904751906072500000009090909090909090909090909090909090909090909090909D41D8CD98F00B204E9800998ECF8427E050C0C
0C0C0C07070707000000000707070707070707070707070707070707070D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F010101010101
0101010101010101010101
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年04月05日 18:28:00
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!