转贴
--------------------------------------------------------------------------------
【详细过程】
老办法,用PEid载入查壳,居然没有任何壳,Delphi编写,是程序员粗心还是过于自信?然后再OD载入运行, 输入试炼码123456789,出现错误提示“您的注册码不正确”,借此查找字符串,来到004DD93B处为关键算法过程. 发现算法居然这样……#$#(#%^%$^_)#*%)$%
004DD93B . 55 PUSH EBP
004DD93C . 68 15DB4D00 PUSH audio-ai.004DDB15
004DD941 . 64:FF30 PUSH DWORD PTR FS:[EAX]
004DD944 . 64:8920 MOV DWORD PTR FS:[EAX],ESP
004DD947 . 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] ;
(初始 cpu 选择)
004DD94A . 8B83 14030000 MOV EAX,DWORD PTR DS:[EBX+314]
004DD950 . E8 BF39F7FF CALL audio-ai.00451314 ;
读取试炼码
004DD955 . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
004DD958 . 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
004DD95B . E8 E4B4F2FF CALL audio-ai.00408E44
004DD960 . 837D F4 00 CMP DWORD PTR SS:[EBP-C],0 ;
注册码不能为空
004DD964 . 0F84 6B010000 JE audio-ai.004DDAD5
004DD96A . 33C0 XOR EAX,EAX
004DD96C . 55 PUSH EBP
004DD96D . 68 9CD94D00 PUSH audio-ai.004DD99C
004DD972 . 64:FF30 PUSH DWORD PTR FS:[EAX]
004DD975 . 64:8920 MOV DWORD PTR FS:[EAX],ESP
004DD978 . 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
004DD97B . 8B83 14030000 MOV EAX,DWORD PTR DS:[EBX+314]
004DD981 . E8 8E39F7FF CALL audio-ai.00451314 ;
读取试炼码
004DD986 . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004DD989 . E8 A2D2F2FF CALL audio-ai.0040AC30 ;
检测注册码合法性(为纯数字)
004DD98E . DD5D F8 FSTP QWORD PTR SS:[EBP-8]
004DD991 . 9B WAIT
004DD992 . 33C0 XOR EAX,EAX
004DD994 . 5A POP EDX
004DD995 . 59 POP ECX
004DD996 . 59 POP ECX
004DD997 . 64:8910 MOV DWORD PTR FS:[EAX],EDX
004DD99A . EB 58 JMP SHORT audio-ai.004DD9F4
004DD99C .^ E9 9765F2FF JMP audio-ai.00403F38
004DD9A1 . 6A 10 PUSH 10
004DD9A3 . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
004DD9A6 . 50 PUSH EAX
004DD9A7 . B9 2CDB4D00 MOV ECX,audio-ai.004DDB2C ;
注册码不合法。
004DD9AC . BA 44DB4D00 MOV EDX,audio-ai.004DDB44 ;
127
004DD9B1 . B8 50DB4D00 MOV EAX,audio-ai.004DDB50 ;
messages
004DD9B6 . E8 A517FFFF CALL audio-ai.004CF160
004DD9BB . 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
004DD9BE . E8 B172F2FF CALL audio-ai.00404C74
004DD9C3 . 50 PUSH EAX
004DD9C4 . A1 2C314F00 MOV EAX,DWORD PTR DS:[4F312C]
004DD9C9 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DD9CB . 8B80 5C090000 MOV EAX,DWORD PTR DS:[EAX+95C]
004DD9D1 . E8 9E72F2FF CALL audio-ai.00404C74
004DD9D6 . 8BC8 MOV ECX,EAX
004DD9D8 . A1 44334F00 MOV EAX,DWORD PTR DS:[4F3344]
004DD9DD . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DD9DF . 5A POP EDX
004DD9E0 . E8 7347F9FF CALL audio-ai.00472158
004DD9E5 . E8 B668F2FF CALL audio-ai.004042A0
004DD9EA . E9 E6000000 JMP audio-ai.004DDAD5
004DD9EF . E8 AC68F2FF CALL audio-ai.004042A0
004DD9F4 > A1 6C314F00 MOV EAX,DWORD PTR DS:[4F316C]
004DD9F9 . 8B00 MOV EAX,DWORD PTR DS:[EAX] ;
EAX=机器码
004DD9FB . E8 30D2F2FF CALL audio-ai.0040AC30 ;
把机器码转为浮点格式
004DDA00 . DB2D 5CDB4D00 FLD TBYTE PTR DS:[4DDB5C] ;
DS:[004DDB5C]=8631202577 (常量1)
004DDA06 . DEE1 FSUBRP ST(1),ST ;
ST=常量1 减去 机器码常量
004DDA08 . D825 68DB4D00 FSUB DWORD PTR DS:[4DDB68] ;
再减去常量3 [004DDB68]=1202.000
004DDA0E . DC5D F8 FCOMP QWORD PTR SS:[EBP-8] ;
和输入的注册码比较
004DDA11 . DFE0 FSTSW AX ;
不相等就 over
004DDA13 . 9E SAHF
004DDA14 . 75 7B JNZ SHORT audio-ai.004DDA91
004DDA16 . A1 48314F00 MOV EAX,DWORD PTR DS:[4F3148]
004DDA1B . C600 01 MOV BYTE PTR DS:[EAX],1
004DDA1E . A1 20344F00 MOV EAX,DWORD PTR DS:[4F3420]
004DDA23 . C600 00 MOV BYTE PTR DS:[EAX],0
004DDA26 . 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
004DDA29 . 8B83 14030000 MOV EAX,DWORD PTR DS:[EBX+314]
004DDA2F . E8 E038F7FF CALL audio-ai.00451314
004DDA34 . 8B55 E4 MOV EDX,DWORD PTR SS:[EBP-1C]
004DDA37 . A1 38344F00 MOV EAX,DWORD PTR DS:[4F3438]
004DDA3C . E8 D76DF2FF CALL audio-ai.00404818
004DDA41 . 6A 40 PUSH 40
004DDA43 . 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004DDA46 . 50 PUSH EAX
004DDA47 . B9 74DB4D00 MOV ECX,audio-ai.004DDB74 ;
您已经成功注册,谢谢使用听力通。
004DDA4C . BA A0DB4D00 MOV EDX,audio-ai.004DDBA0 ;
128
004DDA51 . B8 50DB4D00 MOV EAX,audio-ai.004DDB50 ;
messages
004DDA56 . E8 0517FFFF CALL audio-ai.004CF160
004DDA5B . 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
004DDA5E . E8 1172F2FF CALL audio-ai.00404C74
004DDA63 . 50 PUSH EAX
004DDA64 . A1 2C314F00 MOV EAX,DWORD PTR DS:[4F312C]
004DDA69 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DDA6B . 8B80 60090000 MOV EAX,DWORD PTR DS:[EAX+960]
004DDA71 . E8 FE71F2FF CALL audio-ai.00404C74
004DDA76 . 8BC8 MOV ECX,EAX
004DDA78 . A1 44334F00 MOV EAX,DWORD PTR DS:[4F3344]
004DDA7D . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DDA7F . 5A POP EDX
004DDA80 . E8 D346F9FF CALL audio-ai.00472158
004DDA85 . C783 4C020000>MOV DWORD PTR DS:[EBX+24C],1
004DDA8F . EB 44 JMP SHORT audio-ai.004DDAD5
004DDA91 > 6A 30 PUSH 30
004DDA93 . 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
004DDA96 . 50 PUSH EAX
004DDA97 . B9 ACDB4D00 MOV ECX,audio-ai.004DDBAC ;
您的注册码不正确。
004DDA9C . BA C8DB4D00 MOV EDX,audio-ai.004DDBC8 ;
129
004DDAA1 . B8 50DB4D00 MOV EAX,audio-ai.004DDB50 ;
messages
004DDAA6 . E8 B516FFFF CALL audio-ai.004CF160
004DDAAB . 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
004DDAAE . E8 C171F2FF CALL audio-ai.00404C74
004DDAB3 . 50 PUSH EAX
004DDAB4 . A1 2C314F00 MOV EAX,DWORD PTR DS:[4F312C]
004DDAB9 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DDABB . 8B80 64090000 MOV EAX,DWORD PTR DS:[EAX+964]
004DDAC1 . E8 AE71F2FF CALL audio-ai.00404C74
004DDAC6 . 8BC8 MOV ECX,EAX
004DDAC8 . A1 44334F00 MOV EAX,DWORD PTR DS:[4F3344]
004DDACD . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004DDACF . 5A POP EDX
004DDAD0 . E8 8346F9FF CALL audio-ai.00472158
004DDAD5 > 33C0 XOR EAX,EAX
004DDAD7 . 5A POP EDX
004DDAD8 . 59 POP ECX
004DDAD9 . 59 POP ECX
004DDADA . 64:8910 MOV DWORD PTR FS:[EAX],EDX
004DDADD . 68 1CDB4D00 PUSH audio-ai.004DDB1C
004DDAE2 > 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
004DDAE5 . BA 02000000 MOV EDX,2
004DDAEA . E8 F96CF2FF CALL audio-ai.004047E8
004DDAEF . 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
004DDAF2 . E8 CD6CF2FF CALL audio-ai.004047C4
004DDAF7 . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
004DDAFA . E8 C56CF2FF CALL audio-ai.004047C4
004DDAFF . 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
004DDB02 . BA 02000000 MOV EDX,2
004DDB07 . E8 DC6CF2FF CALL audio-ai.004047E8
004DDB0C . 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
004DDB0F . E8 B06CF2FF CALL audio-ai.004047C4
004DDB14 . C3 RETN
004DDB15 .^ E9 D266F2FF JMP audio-ai.004041EC
004DDB1A .^ EB C6 JMP SHORT audio-ai.004DDAE2
004DDB1C . 5F POP EDI
004DDB1D . 5E POP ESI
004DDB1E . 5B POP EBX
004DDB1F . 8BE5 MOV ESP,EBP
004DDB21 . 5D POP EBP
004DDB22 . C3 RETN
在偏移 004DDA00 处居然出现浮点计算过程,这可让我汗了一下,本人之前可从没有遇过涉及到浮点运算的算法,看来这样
难了,像其中某些命令
004DDA00 . DB2D 5CDB4D00 FLD TBYTE PTR DS:[4DDB5C] ;
DS:[004DDB5C]=8631202577 (常量1)
004DDA06 . DEE1 FSUBRP ST(1),ST ;
ST=常量1 减去 机器码常量
004DDA08 . D825 68DB4D00 FSUB DWORD PTR DS:[4DDB68] ;
再减去常量3 [004DDB68]=1202.000
004DDA0E . DC5D F8 FCOMP QWORD PTR SS:[EBP-8] ;
和输入的注册码比较
004DDA11 . DFE0 FSTSW AX ;
不相等就 over
004DDA13 . 9E SAHF
一开始摸不着头脑,而且这就正是算法的精华处。后来在还是通过自己的猜,把它理解掉。(网上关于它的详细介绍比较少)
结果发现算法简单处令人难以置信~~~~ -_-!!! 这到底是真是,还是在设计圈套呢??
【算法总结】: 真正注册码 = 8631202577 - 机器码 - 1202
【弦外之音】: 大侠们帮我留意偏移004DD9FB处的CALL,本人多次跟踪返回的结果是机器码变浮点,但有时候却不是,不知道是为什么??此外,哪位大侠能把这个软件的机器码算法过程分析出来,俺不知道在哪里断点啊 ~~~~
--------------------------------------------------------------------------------