补充详细注解~~~~新手参考~~~~~高手请指点~~~~~~~~多谢大家~~~~ (14千字)
不好意思上次漏掉些重要的东西~~~~~这次补上~~~~~~可能写得太多太罗嗦啦~~~请不要见怪~~~因为这是我一边跟一边写的~~~所以很详细~~~~毕竟我是新手嘛~~~~很多不懂的都要作下记录~~~而且也想让一些新手看得懂~~~现丑啦~~我跟的部分是注册码运算的过程~~~~至于核心判断的地方我还没找到~~~应该在下面的好几个call当中~~~但我功力有限~~~~只能先去补习补习~~~~还请各位高手跟下去~~~~~~先多谢啦~~~~~~* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A734(C)
|
:0041A739 C1FA02 sar edx, 02
:0041A73C 8955BC mov dword ptr [ebp-44], edx
:0041A73F 33C9 xor ecx, ecx
:0041A741 894DB0 mov dword ptr [ebp-50], ecx
:0041A744 8B45B0 mov eax, dword ptr [ebp-50]
:0041A747 3B45BC cmp eax, dword ptr [ebp-44]
:0041A74A 0F8DC1000000 jnl 0041A811
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A80B(C)
|
:0041A750 8B55C8 mov edx, dword ptr [ebp-38]
:0041A753 8B4DB0 mov ecx, dword ptr [ebp-50] 假注册码首位数
:0041A756 8A048A mov al, byte ptr [edx+4*ecx] <----我用的是67676767
:0041A759 04D0 add al, D0 <----36=>6 :0041A75B 8B55C8 mov edx, dword ptr [ebp-38] <----注册码地址C74454=>edx
:0041A75E 8B4DB0 mov ecx, dword ptr [ebp-50] <----0=>ecx
:0041A761 8A548A01 mov dl, byte ptr [edx+4*ecx+01]<----假注册码第二位edx=C74437
:0041A765 80C2D0 add dl, D0 <----edx=C74407
:0041A768 C1E206 shl edx, 06 <----edx=31D101C0
:0041A76B 0AC2 or al, dl <----eax=000000C6
:0041A76D 8B4DB0 mov ecx, dword ptr [ebp-50]
:0041A770 8D0C49 lea ecx, dword ptr [ecx+2*ecx]
:0041A773 8B55C0 mov edx, dword ptr [ebp-40]
:0041A776 88040A mov byte ptr [edx+ecx], al <----结果写入地址C8C604
:0041A779 8B45BC mov eax, dword ptr [ebp-44] <----eax=2
:0041A77C 85C0 test eax, eax
:0041A77E 7903 jns 0041A783 <----Jump!
:0041A780 83C003 add eax, 00000003
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A77E(C)
|
:0041A783 C1F802 sar eax, 02
:0041A786 8D0C40 lea ecx, dword ptr [eax+2*eax] <----0
:0041A789 41 inc ecx
:0041A78A 83C104 add ecx, 00000004 <----5
:0041A78D 894D9C mov dword ptr [ebp-64], ecx <----地址74F928
:0041A790 33C0 xor eax, eax
:0041A792 8945A0 mov dword ptr [ebp-60], eax
:0041A795 DF6D9C fild qword ptr [ebp-64] -----|此处何解
:0041A798 DC0524AA4100 fadd qword ptr [0041AA24] |是否浮点<--46BACF74
:0041A79E DD5DA4 fstp qword ptr [ebp-5C] -----|运算??<--E23C5905
:0041A7A1 8B55C8 mov edx, dword ptr [ebp-38]
:0041A7A4 8B4DB0 mov ecx, dword ptr [ebp-50]
:0041A7A7 33C0 xor eax, eax
:0041A7A9 8A448A01 mov al, byte ptr [edx+4*ecx+01]<----注册码第二位7
:0041A7AD 83C0D0 add eax, FFFFFFD0 <----37=>6
:0041A7B0 C1F802 sar eax, 02 <----eax=1
:0041A7B3 8B55C8 mov edx, dword ptr [ebp-38]
:0041A7B6 8B4DB0 mov ecx, dword ptr [ebp-50]
:0041A7B9 8A548A02 mov dl, byte ptr [edx+4*ecx+02]<----注册码第三位6
:0041A7BD 80C2D0 add dl, D0 <----edx=00C74406
:0041A7C0 C1E204 shl edx, 04 <----edx=0C744060
:0041A7C3 0AC2 or al, dl <----eax=61
:0041A7C5 8B4DB0 mov ecx, dword ptr [ebp-50]
:0041A7C8 8D0C49 lea ecx, dword ptr [ecx+2*ecx]
:0041A7CB 8B55C0 mov edx, dword ptr [ebp-40]
:0041A7CE 88440A01 mov byte ptr [edx+ecx+01], al <----地址C8C604
:0041A7D2 8B45C8 mov eax, dword ptr [ebp-38]
:0041A7D5 8B4DB0 mov ecx, dword ptr [ebp-50]
:0041A7D8 0FB6448802 movzx eax, byte ptr [eax+4*ecx+02]<----注册码第三位6
:0041A7DD 83C0D0 add eax, FFFFFFD0 <----36=>6
:0041A7E0 C1F804 sar eax, 04 <----eax=0
:0041A7E3 8B55C8 mov edx, dword ptr [ebp-38]
:0041A7E6 8B4DB0 mov ecx, dword ptr [ebp-50]
:0041A7E9 8A548A03 mov dl, byte ptr [edx+4*ecx+03]<----注册码第四位7
:0041A7ED 80C2D0 add dl, D0 <----edx=00C74407
:0041A7F0 C1E202 shl edx, 02 <----edx=31D101C
:0041A7F3 0AC2 or al, dl <----eax=1C
:0041A7F5 8B4DB0 mov ecx, dword ptr [ebp-50]
:0041A7F8 8D0C49 lea ecx, dword ptr [ecx+2*ecx]
:0041A7FB 8B55C0 mov edx, dword ptr [ebp-40]
:0041A7FE 88440A02 mov byte ptr [edx+ecx+02], al
:0041A802 FF45B0 inc [ebp-50]
:0041A805 8B45B0 mov eax, dword ptr [ebp-50] <----eax=1
:0041A808 3B45BC cmp eax, dword ptr [ebp-44] <----[ebp-44]=2
:0041A80B 0F8C3FFFFFFF jl 0041A750 <----小于2就跳了程序将我后四位注册
用同样方法运算最后得结果放在
地址C8C604中结果是:
C6 61 1C C6 61 1C---结果1
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A74A(C)
|
:0041A811 8B4DBC mov ecx, dword ptr [ebp-44]
:0041A814 8D0C49 lea ecx, dword ptr [ecx+2*ecx] <----ecx=6
:0041A817 894DBC mov dword ptr [ebp-44], ecx
:0041A81A 8B45B8 mov eax, dword ptr [ebp-48] <----eax=A
:0041A81D 0345BC add eax, dword ptr [ebp-44] <----eax=10
:0041A820 8945B4 mov dword ptr [ebp-4C], eax
:0041A823 8B55B4 mov edx, dword ptr [ebp-4C]
:0041A826 4A dec edx
:0041A827 8955B0 mov dword ptr [ebp-50], edx
:0041A82A 837DB000 cmp dword ptr [ebp-50], 00000000 <--F cmp 0
:0041A82E 0F8CC4000000 jl 0041A8F8 <----小于0就跳
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A8F2(C)
|
:0041A834 33C9 xor ecx, ecx
:0041A836 894DAC mov dword ptr [ebp-54], ecx
:0041A839 EB36 jmp 0041A871 <----Jump!!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A878(C)
|
:0041A83B 8B45AC mov eax, dword ptr [ebp-54]<---eax=0
:0041A83E 0345B0 add eax, dword ptr [ebp-50]<---eax=F
:0041A841 99 cdq
:0041A842 F77DB8 idiv [ebp-48] <---F mod A=>edx=5
:0041A845 8B4DC4 mov ecx, dword ptr [ebp-3C]<---ecx=C7Bd50
d ecx->060347221N----字串1
:0041A848 8B45C0 mov eax, dword ptr [ebp-40]<---上面运算结果1的地址
:0041A84B 8B5DAC mov ebx, dword ptr [ebp-54]
:0041A84E 0FB6441801 movzx eax, byte ptr [eax+ebx+01]<---结果1的第二位61
:0041A853 0FAF45B0 imul eax, dword ptr [ebp-50] <---61*F=5AF
:0041A857 8B5DC0 mov ebx, dword ptr [ebp-40]
:0041A85A 8B75AC mov esi, dword ptr [ebp-54]
:0041A85D 8A1C33 mov bl, byte ptr [ebx+esi] <---结果1的第一位C6=>ebx=C8C6C6
:0041A860 2AD8 sub bl, al <---C6-AF=17
:0041A862 2A1C11 sub bl, byte ptr [ecx+edx] <---17-37=E0(bl减字串1的第6位)
:0041A865 8B45C0 mov eax, dword ptr [ebp-40]
:0041A868 8B55AC mov edx, dword ptr [ebp-54]
:0041A86B 881C10 mov byte ptr [eax+edx], bl <---将E0放入结果1的首地址中
:0041A86E FF45AC inc [ebp-54] <---加1
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A839(U)
|
:0041A871 8B4DBC mov ecx, dword ptr [ebp-44]<----ecx=6
:0041A874 49 dec ecx
:0041A875 3B4DAC cmp ecx, dword ptr [ebp-54]<----5 cmp 0
:0041A878 7FC1 jg 0041A83B <----大于就跳,循环5次最后结果放在结
果1的地址里结果是:E0 8B 50 E6 6F
1C(最后一位仍有用)----结果2
:0041A87A 8B45BC mov eax, dword ptr [ebp-44]<----eax=6
:0041A87D 85C0 test eax, eax
:0041A87F 7903 jns 0041A884 <----Jump!!!
:0041A881 83C003 add eax, 00000003
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A87F(C)
|
:0041A884 C1F802 sar eax, 02 <---eax=1
:0041A887 8D1440 lea edx, dword ptr [eax+2*eax]<---edx=3
:0041A88A 42 inc edx
:0041A88B 83C204 add edx, 00000004
:0041A88E 89559C mov dword ptr [ebp-64], edx <---edx=8
:0041A891 33C9 xor ecx, ecx
:0041A893 894DA0 mov dword ptr [ebp-60], ecx
:0041A896 DF6D9C fild qword ptr [ebp-64] <---这三个地址里的数是(我不懂结果):8
:0041A899 DC0524AA4100 fadd qword ptr [0041AA24] <---46BACF74
:0041A89F DD5DA4 fstp qword ptr [ebp-5C] <---A35D67BA
:0041A8A2 8B45BC mov eax, dword ptr [ebp-44]
:0041A8A5 48 dec eax
:0041A8A6 8945AC mov dword ptr [ebp-54], eax<---eax=5
:0041A8A9 837DAC00 cmp dword ptr [ebp-54], 00000000
:0041A8AD 7E3C jle 0041A8EB <---小于或等于就跳
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A8E9(C)
|
:0041A8AF 8B45AC mov eax, dword ptr [ebp-54] <---eax=5
:0041A8B2 0345B0 add eax, dword ptr [ebp-50] <---5+F=14
:0041A8B5 99 cdq
:0041A8B6 F77DB8 idiv [ebp-48] <---14/A=>edx=0
:0041A8B9 8B4DC4 mov ecx, dword ptr [ebp-3C] <---字串1首地址C7Bd50
:0041A8BC 8B45C0 mov eax, dword ptr [ebp-40]
:0041A8BF 8B5DAC mov ebx, dword ptr [ebp-54]
:0041A8C2 0FB64418FF movzx eax, byte ptr [eax+ebx-01]<---结果2第五位 eax=6F
:0041A8C7 0FAF45B0 imul eax, dword ptr [ebp-50] <---6F*F=681
:0041A8CB 8B5DC0 mov ebx, dword ptr [ebp-40]
:0041A8CE 8B75AC mov esi, dword ptr [ebp-54]
:0041A8D1 8A1C33 mov bl, byte ptr [ebx+esi] <---结果2最后一位ebx=C8C61C
:0041A8D4 2AD8 sub bl, al <---1C-81=9B
:0041A8D6 2A1C11 sub bl, byte ptr [ecx+edx] <---9B-30=6B(bl减字串1的第1位)
第二次是减字串1的最后一位第
三次是第9位第四次第8位第五次 第7位
:0041A8D9 8B45C0 mov eax, dword ptr [ebp-40]
:0041A8DC 8B55AC mov edx, dword ptr [ebp-54]
:0041A8DF 881C10 mov byte ptr [eax+edx], bl <---将结果放入结果1的地址最后一位里
:0041A8E2 FF4DAC dec [ebp-54]
:0041A8E5 837DAC00 cmp dword ptr [ebp-54], 00000000<---4
:0041A8E9 7FC4 jg 0041A8AF <---大于就跳
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A8AD(C)
|
:0041A8EB FF4DB0 dec [ebp-50] <---F-1
:0041A8EE 837DB000 cmp dword ptr [ebp-50], 00000000
:0041A8F2 0F8D3CFFFFFF jnl 0041A834 <---跳了,循环15次最后结果是:
AF EB 75 01 F6 EA---结果3
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A82E(C)
|
:0041A8F8 6A04 push 00000004
:0041A8FA FF75C0 push [ebp-40]
:0041A8FD 8D4DB8 lea ecx, dword ptr [ebp-48]
:0041A900 51 push ecx
:0041A901 E812BF0800 call 004A6818 <-----此call将运算结果放到74F944里,但程序只取了 前四个字,以下的比较搞不懂
:0041A906 83C40C add esp, 0000000C
:0041A909 8B45B8 mov eax, dword ptr [ebp-48]<---01 75 EB AF(结果3)
:0041A90C 3B45BC cmp eax, dword ptr [ebp-44]<---00 00 00 06
:0041A90F 7E08 jle 0041A919 <--此处和下面的比较不知是否
是关键,我改动后没结果下面的几个 call可能才是关键,我有时间再跟下去
:0041A911 8B55BC mov edx, dword ptr [ebp-44]
:0041A914 8955B8 mov dword ptr [ebp-48], edx
:0041A917 EB0B jmp 0041A924
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A90F(C)
|
:0041A919 837DB800 cmp dword ptr [ebp-48], 00000000
:0041A91D 7D05 jge 0041A924
:0041A91F 33C9 xor ecx, ecx
:0041A921 894DB8 mov dword ptr [ebp-48], ecx
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041A917(U), :0041A91D(C)
|
:0041A924 8B45C0 mov eax, dword ptr [ebp-40]
:0041A927 8B55B8 mov edx, dword ptr [ebp-48]
:0041A92A C644100400 mov [eax+edx+04], 00
:0041A92F 66C745DC2000 mov [ebp-24], 0020
:0041A935 DD45A4 fld qword ptr [ebp-5C]
:0041A938 DC0D1CAA4100 fmul qword ptr [0041AA1C]
:0041A93E DD5DA4 fstp qword ptr [ebp-5C]
:0041A941 66C745DC2C00 mov [ebp-24], 002C
:0041A947 8B55C0 mov edx, dword ptr [ebp-40]
:0041A94A 83C204 add edx, 00000004
:0041A94D 8D45F4 lea eax, dword ptr [ebp-0C]
:0041A950 E857900900 call 004B39AC <---此call将结果3后两位数进行处理,不过
太复杂啦,搞不清楚~~~~~~
