分类分类
关注+2004-10-15作者:蓝点
CrackMe下载
破解CoDe_InSiDe:
终于,把CoDe_InSiDe的这个程序给破了,说实在,这个东东实在不好破...这个作者制作CEACKME的水平还真高,给我破了的三个作品都费了我好大好大的力气.(我菜吗!)其实这个程序是在破他的那个KeyGenMe之前我就试过了,但不幸的是,那时我根本无法找到进程序核心的断点...说实在,找断点菜鸟我就用了破这个程序总时间的1/2以上...不幸!
开始我用GETDLGITEMTEXTA设断,当你的MOUSE移到CHECK按纽上时,程式就中断了...(是不是有点怪?)用F11好样的,进去了.再用F10找到了取得NAME,ORG.和NUM.的三个CALL,好,有一个RET?按F10.唉?到了,系统的DLL了?以后就无法到程序核心去,多按几次F12又会回到GETDLGITEMTEXTA的那个地方...:-(
于是我看了一下别人破解这程序的文章,文中说用GETDLGITEMTEXTA到了第三个GETDLGITEMTEXTA后就delete all breakpoint, set breakpoint to 'push ebp' and then press "Check".好那我就用BPX PUSH EBP...O,SICE说没有这种东东,我迷惘啊...我太菜了...又用BPX EBP,好死机了...反正这这里我想了好久,我也太菜了...
...
0167:00401060 6A15 PUSH BYTE +15
0167:00401062 68301E4000 PUSH DWORD 00401E30
0167:00401067 68AAAA0000 PUSH DWORD AAAA
0167:0040106C FF750C PUSH DWORD [EBP+0C]
0167:0040106F FF15701D4000 CALL `USER32!GetDlgItemTextA`/*取得NAME->00401E30*/
0167:00401075 5D POP EBP
0167:00401076 55 PUSH EBP
0167:00401077 8BEC MOV EBP,ESP
0167:00401079 6A15 PUSH BYTE +15
0167:0040107B 68501E4000 PUSH DWORD 00401E50
0167:00401080 68BBBB0000 PUSH DWORD BBBB
0167:00401085 FF750C PUSH DWORD [EBP+0C]
0167:00401088 FF15701D4000 CALL `USER32!GetDlgItemTextA`/*取得ORG.->00401E50*/
0167:0040108E 5D POP EBP
0167:0040108F 55 PUSH EBP
0167:00401090 8BEC MOV EBP,ESP
0167:00401092 6A15 PUSH BYTE +15
0167:00401094 68701E4000 PUSH DWORD 00401E70
0167:00401099 68CCCC0000 PUSH DWORD CCCC
0167:0040109E FF750C PUSH DWORD [EBP+0C]
0167:004010A1 FF15701D4000 CALL `USER32!GetDlgItemTextA`/*取得NUM.->00401E70*/
0167:004010A7 5D POP EBP
0167:004010A8 C3 RET /*这个好利害的RET*/
0167:004010A9 33C0 XOR EAX,EAX
0167:004010AB BF301E4000 MOV EDI,00401E30/*我看到了这个*/
...
如何是好?啊?我看到了:004010AB MOV 这一行.这不是传入NAME吗?那我就在这一行设断...用F5,回到程序再按CHECK,!!!!回到:004010AB了,终于进来了...呵呵...(多少也受到了set breakpoint to 'push ebp' and then press "Check"这句的一点提示.要press 'Check'后回到程序...)细想,程式是在你按CHECK以前便取得NAME,ORG.和NUM.的,并在取得了所要的东东后回到WINDOWS的,现从你按CHECK后回到程序里...所以要那样才行...这样的程序我还是第一次见到,是用于反跟踪吗?反正我就被套了...
...
0167:004010AB BF301E4000 MOV EDI,00401E30/*传入NAME*/
0167:004010B0 33C9 XOR ECX,ECX
0167:004010B2 B131 MOV CL,31
0167:004010B4 BE00234000 MOV ESI,00402300
0167:004010B9 8A07 MOV AL,[EDI]
0167:004010BB 3C00 CMP AL,00
0167:004010BD 7406 JZ 004010C5
0167:004010BF 880C30 MOV [EAX+ESI],CL
0167:004010C2 47 INC EDI
0167:004010C3 EBF4 JMP SHORT 004010B9
0167:004010C5 BF501E4000 MOV EDI,00401E50/*传入ORG.*/
0167:004010CA BEFF234000 MOV ESI,004023FF
0167:004010CF 33C0 XOR EAX,EAX
0167:004010D1 33C9 XOR ECX,ECX
0167:004010D3 B131 MOV CL,31
0167:004010D5 8A07 MOV AL,[EDI]
0167:004010D7 3C00 CMP AL,00
0167:004010D9 740A JZ 004010E5
0167:004010DB F7D0 NOT EAX
0167:004010DD 880C30 MOV [EAX+ESI],CL
0167:004010E0 47 INC EDI
0167:004010E1 33C0 XOR EAX,EAX
0167:004010E3 EBF0 JMP SHORT 004010D5
0167:004010E5 33C0 XOR EAX,EAX
0167:004010E7 B100 MOV CL,00
0167:004010E9 BF00234000 MOV EDI,00402300
...
这一段是用于计算正确的NUM.有关的,用NAME和ORG.(我填入了NAME:Vitamin C,ORG.:abc)算出一个可以在00401E90找到的字符串:!DWbjnouVWX(12位).用的是一种我这种菜菜看不出来的算法:-(...
然后会来到这:
...
0167:004010E9 BF00234000 MOV EDI,00402300
0167:004010EE BE901E4000 MOV ESI,00401E90
0167:004010F3 56 PUSH ESI
0167:004010F4 8A07 MOV AL,[EDI]
0167:004010F6 3C00 CMP AL,00
0167:004010F8 7417 JZ 00401111
0167:004010FA 3C30 CMP AL,30
0167:004010FC 7504 JNZ 00401102
0167:004010FE 41 INC ECX
0167:004010FF 47 INC EDI
0167:00401100 EBF2 JMP SHORT 004010F4
0167:00401102 3C31 CMP AL,31
0167:00401104 7404 JZ 0040110A
0167:00401106 41 INC ECX
0167:00401107 47 INC EDI
0167:00401108 EBEA JMP SHORT 004010F4
0167:0040110A 41 INC ECX
0167:0040110B 880E MOV [ESI],CL
0167:0040110D 46 INC ESI
0167:0040110E 47 INC EDI
0167:0040110F EBE3 JMP SHORT 004010F4
0167:00401111 5F POP EDI
...
这段则是将!DWbjnouVWX进行处理,如果里面的东东有在键盘上找不到的字符则将之变成可以找到的字符(20H--7EH).
...
0167:004011B8 B000 MOV AL,00
0167:004011BA 33FF XOR EDI,EDI
0167:004011BC BEA91F4000 MOV ESI,00401FA9
0167:004011C1 BF901E4000 MOV EDI,00401E90
0167:004011C6 8B36 MOV ESI,[ESI]
0167:004011C8 8B07 MOV EAX,[EDI]
0167:004011CA 85C0 TEST EAX,EAX
0167:004011CC 740A JZ 004011D8
0167:004011CE 33C6 XOR EAX,ESI
0167:004011D0 894720 MOV [EDI+20],EAX
0167:004011D3 83C704 ADD EDI,BYTE +04
0167:004011D6 EBF0 JMP SHORT 004011C8
...
这段则是将!DWbjnouVWX每四个字符和0A0B0C0DH XOR.如'bWD!' XOR 0A0B0C0DH...以此类推,可以得到!DWbjnouVWX->,H\hgbdO[[S:这就是那个正确的NUM.了...
...
0167:00401146 BA701E4000 MOV EDX,00401E70
0167:0040114B 8A02 MOV AL,[EDX]
0167:0040114D 3C00 CMP AL,00
0167:0040114F 7404 JZ 00401155
0167:00401151 41 INC ECX
0167:00401152 42 INC EDX
0167:00401153 EBF6 JMP SHORT 0040114B
0167:00401155 2BF7 SUB ESI,EDI
0167:00401157 39CE CMP ESI,ECX
0167:00401159 7302 JNC 0040115D
0167:0040115B EB2D JMP SHORT 0040118A
...
这段是用于比较NAME+ORG.的长度是否<NUM.的长度,但NUM.是12位的,所以NAME+ORG.<=12.要不是不行的.(我一开始用的NAME:Vitamin C,ORG.:Sing就不行了...
...
0167:00401208 8B07 MOV EAX,[EDI]
0167:0040120A 8B0E MOV ECX,[ESI]
0167:0040120C 85C0 TEST EAX,EAX
0167:0040120E 743E JZ 0040124E
0167:00401210 3BC1 CMP EAX,ECX
0167:00401212 7402 JZ 00401216
0167:00401214 EB08 JMP SHORT 0040121E
...
这段是输入的NUM.和正确的NUM.的最终的比较了...是每四位每四位来比的.好了.也就完了.没能找出全部算法有点可惜,好在我是菜鸟也就罢了...
OK!
NAME:Vitamin C
ORG.:abc
NUM.:,H\hgbdO[[S:
Vitamin C[抗坏血酸].2002.2.6.HY.GD.CHI.
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论