|
[已解决]一个程序的算法问题
呵呵,一个求助帖与一个花时间整理出来,同等待遇!!!无人问津,呵呵,发贴失败。 我就没有明白,一贴多发是什么意思,一个求助帖与一个花幸苦时间整理出来的贡献给其他人学习一样吗?我单独开贴,就是方面大家直接看到,标题能与求助帖区别。方面大家学习。如果管管觉得一贴多发,我认为删除那求助帖就可以,以救助帖法出来不知道有什么人回去看?呵呵 |
|
[已解决]一个程序的算法问题
标 题: 一个小程序的算法分析送给初学者 作 者: mkamao 时 间: 2009-06-11,23:00 链接:http://bbs.pediy.com/showthread.php?p=640505#post640505 小弟刚学破解,分析过程可那有点乱或者错误,清谅解。 本程序无壳,直接用od加载程序,查找关键字符串来到关键call 00491B80 /. 55 PUSH EBP 00491B81 |. 8BEC MOV EBP,ESP 00491B83 |. 6A 00 PUSH 0 00491B85 |. 6A 00 PUSH 0 00491B87 |. 53 PUSH EBX 00491B88 |. 56 PUSH ESI 00491B89 |. 8BF0 MOV ESI,EAX 00491B8B |. 33C0 XOR EAX,EAX 00491B8D |. 55 PUSH EBP 00491B8E |. 68 651C4900 PUSH crackme.00491C65 00491B93 |. 64:FF30 PUSH DWORD PTR FS:[EAX] 00491B96 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 00491B99 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4] 00491B9C |. 8B86 FC020000 MOV EAX,DWORD PTR DS:[ESI+2FC] 00491BA2 |. E8 211CFBFF CALL crackme.004437C8 00491BA7 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491BAA |. E8 69FFFFFF CALL crackme.00491B18 ; 此call为关键call,按f7进入 00491BAF |. 84C0 TEST AL,AL 00491BB1 |. 0F84 89000000 JE crackme.00491C40 ; 此跳为关键跳,但是改此跳不能完美爆破。程序重启后还得重新注册。 我输入的用户名:maomao 假注册码:A1234567B910 进入此(00491BAA |. E8 69FFFFFF CALL crackme.00491B18call,f8单步来到 00491B38 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491B3B |. E8 9C2CF7FF CALL crackme.004047DC 00491B40 |. 83F8 0A CMP EAX,0A ; 判断注册码是否大于10位,否则直接跳过算法部分 ,00491B43 |. 7C 0E JL SHORT crackme.00491B53 00491B45 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491B48 |. E8 F7FCFFFF CALL crackme.00491844 ; 此call重要,必须进入 00491B4D |. 84C0 TEST AL,AL 00491B4F |. 74 02 JE SHORT crackme.00491B53 继续f7进入后,单步来到 00491892 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] 00491895 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 00491898 |. 8A52 01 MOV DL,BYTE PTR DS:[EDX+1] ; 读取假注册码的第二位 0049189B |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 0049189E |. C600 01 MOV BYTE PTR DS:[EAX],1 004918A1 |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18] 004918A4 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C] 004918A7 |. E8 2816F7FF CALL crackme.00402ED4 004918AC |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 004918AF |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 004918B2 |. 8A52 04 MOV DL,BYTE PTR DS:[EDX+4] ; 读取第五位 004918B5 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 004918B8 |. C600 01 MOV BYTE PTR DS:[EAX],1 004918BB |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 004918BE |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C] 004918C1 |. B1 02 MOV CL,2 004918C3 |. E8 DC15F7FF CALL crackme.00402EA4 004918C8 |. 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C] ; 把从假注册码取出的两位放在一起 004918CB |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24] 004918CE |. E8 0116F7FF CALL crackme.00402ED4 004918D3 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 004918D6 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 004918D9 |. 8A52 06 MOV DL,BYTE PTR DS:[EDX+6] ; 读取第7位 004918DC |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 004918DF |. C600 01 MOV BYTE PTR DS:[EAX],1 004918E2 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 004918E5 |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24] 004918E8 |. B1 03 MOV CL,3 004918EA |. E8 B515F7FF CALL crackme.00402EA4 004918EF |. 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24] 004918F2 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C] 004918F5 |. E8 DA15F7FF CALL crackme.00402ED4 004918FA |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 004918FD |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 00491900 |. 8A52 07 MOV DL,BYTE PTR DS:[EDX+7] ; 读取第八位 00491903 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 00491906 |. C600 01 MOV BYTE PTR DS:[EAX],1 00491909 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 0049190C |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C] 0049190F |. B1 04 MOV CL,4 00491911 |. E8 8E15F7FF CALL crackme.00402EA4 00491916 |. 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C] 00491919 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34] 0049191C |. E8 B315F7FF CALL crackme.00402ED4 00491921 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 00491924 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 00491927 |. 8A52 09 MOV DL,BYTE PTR DS:[EDX+9] ; 读取第九位 0049192A |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 0049192D |. C600 01 MOV BYTE PTR DS:[EAX],1 00491930 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 00491933 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34] 00491936 |. B1 05 MOV CL,5 00491938 |. E8 6715F7FF CALL crackme.00402EA4 0049193D |. 8D55 CC LEA EDX,DWORD PTR SS:[EBP-34] 00491940 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] 00491943 |. E8 382EF7FF CALL crackme.00404780 00491948 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14] 0049194B |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 0049194E |. 59 POP ECX ; 这出站的是假注册码的位数 0049194F |. E8 D42EF7FF CALL crackme.00404828 00491954 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 从假注册码中取出的2、5、7、10位和注册码的位数放在一起,我假设为x 00491957 |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX] ; 从x中取出第一位 0049195A |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 0049195D |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取出第二位 00491961 |. 03C2 ADD EAX,EDX ; 貌似主要的算法从这开始 00491963 |. B9 05000000 MOV ECX,5 00491968 |. 99 CDQ 00491969 |. F7F9 IDIV ECX 0049196B |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b 0049196E |. 8855 F4 MOV BYTE PTR SS:[EBP-C],DL 00491971 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 00491974 |. 33C9 XOR ECX,ECX 00491976 |. 8A48 02 MOV CL,BYTE PTR DS:[EAX+2] ; 取x的第3位 00491979 |. 8BC1 MOV EAX,ECX 0049197B |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 0049197E |. 0FB652 03 MOVZX EDX,BYTE PTR DS:[EDX+3] ; 第4为 00491982 |. 03C2 ADD EAX,EDX 00491984 |. BE 05000000 MOV ESI,5 00491989 |. 99 CDQ 0049198A |. F7FE IDIV ESI 0049198C |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e 0049198F |. 8855 F5 MOV BYTE PTR SS:[EBP-B],DL 00491992 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 00491995 |. 0FB640 04 MOVZX EAX,BYTE PTR DS:[EAX+4] ; 第5位 00491999 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 0049199C |. 0FB652 05 MOVZX EDX,BYTE PTR DS:[EDX+5] ; 第6位 004919A0 |. 03C2 ADD EAX,EDX 004919A2 |. BE 05000000 MOV ESI,5 004919A7 |. 99 CDQ 004919A8 |. F7FE IDIV ESI 004919AA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b 004919AD |. 8855 F6 MOV BYTE PTR SS:[EBP-A],DL 004919B0 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 004919B3 |. 0FB640 06 MOVZX EAX,BYTE PTR DS:[EAX+6] ; 第7位 004919B7 |. 03C1 ADD EAX,ECX 004919B9 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 004919BC |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取x的第二位 004919C0 |. 03C2 ADD EAX,EDX 004919C2 |. B9 05000000 MOV ECX,5 004919C7 |. 99 CDQ 004919C8 |. F7F9 IDIV ECX 004919CA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e 004919CD |. 8855 F7 MOV BYTE PTR SS:[EBP-9],DL 接下来继续: 004919D0 |. 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38] 004919D3 |. 8A55 F4 MOV DL,BYTE PTR SS:[EBP-C] ; 取x中的数算出的结果为bebb的第一位 004919D6 |. E8 292DF7FF CALL crackme.00404704 004919DB |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38] 004919DE |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 004919E1 |. B9 01000000 MOV ECX,1 004919E6 |. E8 D130F7FF CALL crackme.00404ABC ; 把b放到14678912 004919EB |. 8D45 C4 LEA EAX,DWORD PTR SS:[EBP-3C] 004919EE |. 8A55 F7 MOV DL,BYTE PTR SS:[EBP-9] ; 取bbeb的最后一位 004919F1 |. E8 0E2DF7FF CALL crackme.00404704 004919F6 |. 8B45 C4 MOV EAX,DWORD PTR SS:[EBP-3C] 004919F9 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 004919FC |. B9 03000000 MOV ECX,3 00491A01 |. E8 B630F7FF CALL crackme.00404ABC ; 变为b467912 00491A06 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491A09 |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX] 00491A0C |. B9 3B000000 MOV ECX,3B 00491A11 |. 33D2 XOR EDX,EDX 00491A13 |. F7F1 DIV ECX 00491A15 |. 83FA 2E CMP EDX,2E ; 判断假注册码的第一位是否为字母,否为注册失败 00491A18 |. 0F87 A4000000 JA crackme.00491AC2 00491A1E |. 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40] 00491A21 |. 8A55 F5 MOV DL,BYTE PTR SS:[EBP-B] ; 取bbeb的第三位 00491A24 |. E8 DB2CF7FF CALL crackme.00404704 00491A29 |. 8B45 C0 MOV EAX,DWORD PTR SS:[EBP-40] 00491A2C |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 00491A2F |. B9 05000000 MOV ECX,5 00491A34 |. E8 8330F7FF CALL crackme.00404ABC ; e67912 00491A39 |. 8D45 BC LEA EAX,DWORD PTR SS:[EBP-44] 00491A3C |. 8A55 F6 MOV DL,BYTE PTR SS:[EBP-A] 00491A3F |. E8 C02CF7FF CALL crackme.00404704 00491A44 |. 8B45 BC MOV EAX,DWORD PTR SS:[EBP-44] 00491A47 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 00491A4A |. B9 09000000 MOV ECX,9 00491A4F |. E8 6830F7FF CALL crackme.00404ABC 00491A54 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] ; b12 00491A57 |. B9 01000000 MOV ECX,1 00491A5C |. BA 09000000 MOV EDX,9 00491A61 |. E8 0E30F7FF CALL crackme.00404A74 00491A66 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] ; b1b4e67912 00491A69 |. B9 01000000 MOV ECX,1 00491A6E |. BA 07000000 MOV EDX,7 00491A73 |. E8 FC2FF7FF CALL crackme.00404A74 00491A78 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491A7B |. 0FB640 08 MOVZX EAX,BYTE PTR DS:[EAX+8] 00491A7F |. B9 3D000000 MOV ECX,3D 00491A84 |. 33D2 XOR EDX,EDX 00491A86 |. F7F1 DIV ECX 00491A88 |. 83FA 2A CMP EDX,2A 00491A8B |. 77 35 JA SHORT crackme.00491AC2 ; 判断假注册码的第九位是否为字母,否则注册失败 00491A8D |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 00491A90 |. B9 01000000 MOV ECX,1 00491A95 |. BA 02000000 MOV EDX,2 00491A9A |. E8 D52FF7FF CALL crackme.00404A74 ; bb4e6912 00491A9F |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 00491AA2 |. B9 01000000 MOV ECX,1 00491AA7 |. BA 06000000 MOV EDX,6 00491AAC |. E8 C32FF7FF CALL crackme.00404A74 00491AB1 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 00491AB4 |. BA 101B4900 MOV EDX,crackme.00491B10 ; bb4e612 00491AB9 |. E8 622EF7FF CALL crackme.00404920 ; 此值为软件给的固定值为be9c912,用来与用假注册码算出来的值进行比较,相等则注册成功 00491ABE |. 75 02 JNZ SHORT crackme.00491AC2 然后找注册码的存放位置: 00491BCC |. E8 83D9FDFF CALL crackme.0046F554 00491BD1 |. B1 01 MOV CL,1 00491BD3 |. BA 7C1C4900 MOV EDX,crackme.00491C7C ; software\lansee 根据这个提示我们就可以想到它的注册码放在注册表里面。 00491BD8 |. 8BC3 MOV EAX,EBX 00491BDA |. E8 D9D9FDFF CALL crackme.0046F5B8 00491BDF |. 84C0 TEST AL,AL 00491BE1 |. 74 1D JE SHORT crackme.00491C00 00491BE3 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 00491BE6 |. 8B86 FC020000 MOV EAX,DWORD PTR DS:[ESI+2FC] 00491BEC |. E8 D71BFBFF CALL crackme.004437C8 00491BF1 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] 00491BF4 |. BA 941C4900 MOV EDX,crackme.00491C94 ; serial 算法分析结果: 经过大致的分析,还有与be9c912比较,我们可以推出: 1.注册码必须是十二位的,第一位和第九位必须是字母,字母任意。 2.注册码的第五位和7位都必须是9 3.注册码的第2位与第5位相加结果对5求余+61,结果转化为ASCII码必须是b 4. 注册码的第7位与第8位相加结果对5求余+61,结果转化为ASCII码必须是c 5.注册码的第5位与第7位相加结果在加2,然后对5求余+61,结果转化为ASCII码必须是e 6.其余位数随便。 7.注册码保存在[HKEY_LOCAL_MACHINE\SOFTWARE\LanSee]下的。 这个算法必须进行逆推。才能找到知道注册码。 还有就是完美爆破的关键点: 爆破,爆破关键点在: 00491B69 .^\E9 5A23F7FF JMP crackme.00403EC8 00491B6E .^ EB F0 JMP SHORT crackme.00491B60 00491B70 . 8BC3 MOV EAX,EBX ; 此为爆破关键点,吧mov改为or 00491B72 . 5B POP EBX 00491B73 . 59 POP ECX 00491B74 . 5D POP EBP 00491B75 . C3 RETN btw:通过这次的算法分析,收获颇多。呵呵,这是俺第一次仔细分析,说来惭愧啊。学习了一两个月,看了黑鹰算法分析教程的几个例子,心就痒痒,总想自己分析一个,就下了一个小程序先分析了一下了,没有分析出来。然后在看雪求助:http://bbs.pediy.com/showthread.php?t=91136,谢谢blackeyes大哥的帮助。经过这一提示后,俺也花了一上午时间才分析出来,可能是小弟笨吧。但是幸苦分析出来了,心情还不错的。就好好地整理了一下,发出来吧,供我一样的菜菜鸟学习吧。 要想分析算法清楚明了并且速度快,还是得多多的看前辈的帖子。积累经验。就不会像我这样慢了。破解速度自然就快了。还有一点就是像前辈们说的要有一颗恒心,坚持到底。不放弃。 |
|
[已解决]一个程序的算法问题
小弟刚学破解,分析过程可那有点乱或者错误,清谅解。 我分析如下: 用od加载程序,查找关键字符串来到关键call 00491B80 /. 55 PUSH EBP 00491B81 |. 8BEC MOV EBP,ESP 00491B83 |. 6A 00 PUSH 0 00491B85 |. 6A 00 PUSH 0 00491B87 |. 53 PUSH EBX 00491B88 |. 56 PUSH ESI 00491B89 |. 8BF0 MOV ESI,EAX 00491B8B |. 33C0 XOR EAX,EAX 00491B8D |. 55 PUSH EBP 00491B8E |. 68 651C4900 PUSH crackme.00491C65 00491B93 |. 64:FF30 PUSH DWORD PTR FS:[EAX] 00491B96 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 00491B99 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4] 00491B9C |. 8B86 FC020000 MOV EAX,DWORD PTR DS:[ESI+2FC] 00491BA2 |. E8 211CFBFF CALL crackme.004437C8 00491BA7 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491BAA |. E8 69FFFFFF CALL crackme.00491B18 ; 此call为关键call,按f7进入 00491BAF |. 84C0 TEST AL,AL 00491BB1 |. 0F84 89000000 JE crackme.00491C40 ; 此跳为关键跳,但是改此跳不能完美爆破。程序重启后还得重新注册。 我输入的用户名:maomao 假注册码:0123456789 进入此(00491BAA |. E8 69FFFFFF CALL crackme.00491B18call,f8单步来到 00491B38 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491B3B |. E8 9C2CF7FF CALL crackme.004047DC 00491B40 |. 83F8 0A CMP EAX,0A ; 判断注册码是否大于10位,否则直接跳过算法部分 ,00491B43 |. 7C 0E JL SHORT crackme.00491B53 00491B45 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00491B48 |. E8 F7FCFFFF CALL crackme.00491844 ; 此call重要,必须进入 00491B4D |. 84C0 TEST AL,AL 00491B4F |. 74 02 JE SHORT crackme.00491B53 继续f7进入后,单步来到 00491892 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] 00491895 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 00491898 |. 8A52 01 MOV DL,BYTE PTR DS:[EDX+1] ; 读取假注册码的第二位 0049189B |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 0049189E |. C600 01 MOV BYTE PTR DS:[EAX],1 004918A1 |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18] 004918A4 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C] 004918A7 |. E8 2816F7FF CALL crackme.00402ED4 004918AC |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 004918AF |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 004918B2 |. 8A52 04 MOV DL,BYTE PTR DS:[EDX+4] ; 读取第五位 004918B5 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 004918B8 |. C600 01 MOV BYTE PTR DS:[EAX],1 004918BB |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 004918BE |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C] 004918C1 |. B1 02 MOV CL,2 004918C3 |. E8 DC15F7FF CALL crackme.00402EA4 004918C8 |. 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C] ; 把从假注册码取出的两位放在一起 004918CB |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24] 004918CE |. E8 0116F7FF CALL crackme.00402ED4 004918D3 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 004918D6 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 004918D9 |. 8A52 06 MOV DL,BYTE PTR DS:[EDX+6] ; 读取第7位 004918DC |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 004918DF |. C600 01 MOV BYTE PTR DS:[EAX],1 004918E2 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 004918E5 |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24] 004918E8 |. B1 03 MOV CL,3 004918EA |. E8 B515F7FF CALL crackme.00402EA4 004918EF |. 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24] 004918F2 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C] 004918F5 |. E8 DA15F7FF CALL crackme.00402ED4 004918FA |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 004918FD |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 00491900 |. 8A52 07 MOV DL,BYTE PTR DS:[EDX+7] ; 读取第八位 00491903 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 00491906 |. C600 01 MOV BYTE PTR DS:[EAX],1 00491909 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 0049190C |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C] 0049190F |. B1 04 MOV CL,4 00491911 |. E8 8E15F7FF CALL crackme.00402EA4 00491916 |. 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C] 00491919 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34] 0049191C |. E8 B315F7FF CALL crackme.00402ED4 00491921 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] 00491924 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] 00491927 |. 8A52 09 MOV DL,BYTE PTR DS:[EDX+9] ; 读取第九位 0049192A |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL 0049192D |. C600 01 MOV BYTE PTR DS:[EAX],1 00491930 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] 00491933 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34] 00491936 |. B1 05 MOV CL,5 00491938 |. E8 6715F7FF CALL crackme.00402EA4 0049193D |. 8D55 CC LEA EDX,DWORD PTR SS:[EBP-34] 00491940 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] 00491943 |. E8 382EF7FF CALL crackme.00404780 00491948 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14] 0049194B |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 0049194E |. 59 POP ECX ; 这出站的是假注册码的位数 0049194F |. E8 D42EF7FF CALL crackme.00404828 00491954 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 从假注册码中取出的2、5、7、10位和注册码的位数放在一起,我假设为x 00491957 |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX] ; 从x中取出第一位 0049195A |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 0049195D |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取出第二位 00491961 |. 03C2 ADD EAX,EDX ; 貌似主要的算法从这开始 00491963 |. B9 05000000 MOV ECX,5 00491968 |. 99 CDQ 00491969 |. F7F9 IDIV ECX 0049196B |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b 0049196E |. 8855 F4 MOV BYTE PTR SS:[EBP-C],DL 00491971 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 00491974 |. 33C9 XOR ECX,ECX 00491976 |. 8A48 02 MOV CL,BYTE PTR DS:[EAX+2] ; 取x的第3位 00491979 |. 8BC1 MOV EAX,ECX 0049197B |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 0049197E |. 0FB652 03 MOVZX EDX,BYTE PTR DS:[EDX+3] ; 第4为 00491982 |. 03C2 ADD EAX,EDX 00491984 |. BE 05000000 MOV ESI,5 00491989 |. 99 CDQ 0049198A |. F7FE IDIV ESI 0049198C |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e 0049198F |. 8855 F5 MOV BYTE PTR SS:[EBP-B],DL 00491992 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 00491995 |. 0FB640 04 MOVZX EAX,BYTE PTR DS:[EAX+4] ; 第5位 00491999 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 0049199C |. 0FB652 05 MOVZX EDX,BYTE PTR DS:[EDX+5] ; 第6位 004919A0 |. 03C2 ADD EAX,EDX 004919A2 |. BE 05000000 MOV ESI,5 004919A7 |. 99 CDQ 004919A8 |. F7FE IDIV ESI 004919AA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b 004919AD |. 8855 F6 MOV BYTE PTR SS:[EBP-A],DL 004919B0 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 004919B3 |. 0FB640 06 MOVZX EAX,BYTE PTR DS:[EAX+6] ; 第7位 004919B7 |. 03C1 ADD EAX,ECX 004919B9 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 004919BC |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取x的第二位 004919C0 |. 03C2 ADD EAX,EDX 004919C2 |. B9 05000000 MOV ECX,5 004919C7 |. 99 CDQ 004919C8 |. F7F9 IDIV ECX 004919CA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e 004919CD |. 8855 F7 MOV BYTE PTR SS:[EBP-9],DL 我就只能分析到这,下面的我就分析的模糊不清了,忘大侠指点一下关键之处!!!!谢谢!!! 注册码也没有追出来,哎!郁闷 只会爆破,爆破关键点在: 00491B69 .^\E9 5A23F7FF JMP crackme.00403EC8 00491B6E .^ EB F0 JMP SHORT crackme.00491B60 00491B70 . 8BC3 MOV EAX,EBX ; 此为爆破关键点,吧mov改为or 00491B72 . 5B POP EBX 00491B73 . 59 POP ECX 00491B74 . 5D POP EBP 00491B75 . C3 RETN 希望大大们指点一下 |
|
[已解决]一个程序的算法问题
哎,没有人回答, |
|
|
|
[原创]PE感染型病毒的研究和代码实现,附上代码和论文
thank you |
|
|
|
[求助]这个程序OD不能加载
我的主页也被改了,变haoda123了,我的也可以加载,能找到oep,可那楼主od有问题吧,换一个版本吧。 |
|
我来发牢骚了
版面换了,看起来还不错 |
|
[求助]"pediy"的意思是什么,是pe文件 自已设计吗?
呵呵,原来如此,以前还不知道呢 |
|
[求书]关于java与数据库链接方面的书
砸没有人回答呢?过来人帮帮俺 |
|
[已解决]od无法启动exe文件!急
多谢各位大哥,罪魁祸首就是eq。问题解决了。我把eq启动,开学习模式即可了。 我愿以为eq的关闭就不影响呢,没有想到还受到eq的常驻进程EQservice.exe影响。 谢谢各位大哥大姐了。很感谢你们 |
|
[已解决]od无法启动exe文件!急
谢谢各位的指点,重做系统之后就好了,但是现在又出现了问题,跟没有重装系统前一样的问题 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值