本帖最后由 cu629944 于 2014-8-6 11:52 编辑
【文章标题】: 自己加NP次数限制的一个简单的CM的追码
【文章作者】: kinney
【软件名称】: 一个VC++的CreakMe
【软件大小】: 未加壳程序 200KB加壳程序1.25MB
【下载地址】: 自己搜索下载
【加壳方式】: NP的时间限制
【软件介绍】: 一个简单的CM~
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
保护加的这个。
因为加了NP的次数限制(我直接加了0次~呵呵~免得多打开几次,我嫌麻烦)载入后,程序停在这里
0053B6D6 > E8 18000000 CALL VC++_nps.0053B6F3
我们CTRL+G,输入CreateFileW这个函数,然后点击确定7C810800 > 8BFF MOV EDI,EDI
在这里下F2断点,然后F9运行,此时OD会有点卡(也不知道是不是我的电脑配置不好~),然后断下来了,观察堆栈
0012F984 00524B92 /CALL 到 CreateFileW 来自 VC++_nps.00524B8F
0012F988 0012FBD8 |FileName = "C:\Documents and Settings\Administrator\桌面\VC++.key"
0012F98C 80000000 |Access = GENERIC_READ
0012F990 00000001 |ShareMode = FILE_SHARE_READ
0012F994 00000000 |pSecurity = NULL
0012F998 00000003 |Mode = OPEN_EXISTING
0012F99C 00000080 |Attributes = NORMAL
0012F9A0 00000000 \hTemplateFile = NULL
此时我们取消断点,然后继续CTRL+G,来到CloseHandle这个函数,下断,F9运行。 0012F99C 00524DB3 /CALL 到 CloseHandle 来自 VC++_nps.00524DB0
0012F9A0 00000080 \hObject = 00000080 (窗口)
此时在堆栈窗口,右键==》跟随到反汇编窗口 00524DB3 3B7D 08 CMP EDI,DWORD PTR SS:[EBP+8]
在00524DB3处F4运行到此处,然后F8单步走~ 00524D47 FF75 FC PUSH DWORD PTR SS:[EBP-4]
00524D4A E8 02C9F8FF CALL VC++_nps.004B1651
00524D4F FF75 FC PUSH DWORD PTR SS:[EBP-4]
在这里的时候,我们在00524D4F 下F2 int3中断,F9运行,断下来后,在堆栈窗口==》 右键==》数据窗口跟随
在0018FA3C处,下硬件访问断点==》DWORD,并取消 00521B80处的F2断点,F9运行
00525959 3918 CMP DWORD PTR DS:[EAX],EBX
0052595B ^ 74 D2 JE SHORT VC++_nps.0052592F
0052595D 8B4D F3 MOV ECX,DWORD PTR SS:[EBP-D]
程序断在了00525959这里,我们删除硬件断点,然后F8单步跟踪,00525A3B 64:0942 01 OR DWORD PTR FS:[EDX+1],EAX
00525A3F E8 F1E7F8FF CALL VC++_nps.004B4235
00525A44 3BC3 CMP EAX,EBX
当单步到00525A3F这里时,在005251B1下F2断点,断下后,再取消断点,并继续F8单步跟踪。00525B90 E8 0B29F5FF CALL VC++_nps.004784A0
00525B95 8B40 10 MOV EAX,DWORD PTR DS:[EAX+10]
00525B98 FF40 10 INC DWORD PTR DS:[EAX+10]
00525B9B E8 CDEDF8FF CALL VC++_nps.004B496D
00525BA0 3BC3 CMP EAX,EBX
00525BA2 0F84 C6000000 JE VC++_nps.00525C6E
我们在00525BA2这里下断,F9~
断下后~我们发现,这个JE没有跳转,所以我们给修改为JMP~然后邮件复制到可执行文件==》
保存文件,并保存为Crack.exe 保存后,我们运行,发现提示“发生内部错误,请关闭调试器,
卸载监控工具”,可是我们没在OD里运行,所以,还有内存校验,我们OD载入,CTRL+G,输入
MessageBoxA,然后在断尾Retn处,下F2断点,并F9运行,当弹出错误提示框的时候,我们点击
确定,然后在RETN处断了下来,然后我们观察堆栈窗口,向下面翻,会看到这个~ 0012FE50 FFFFFFFF
0012FE54 /0012FF70
0012FE58 |00516B59 返回到 Crack.00516B59 来自 Crack.004A85A5
0012FE5C |00000001
0012FE60 |0018F9D0
0012FE64 |0043E7C9 Crack.0043E7C9
0012FE68 |00526626 返回到 Crack.00526626 来自 Crack.004B9B1E
0012FE6C |00000001
0012FE70 |00000004
0012FE74 |00601B80
0012FE78 |004000E0 ASCII "PE"
0012FE7C |00000000
我们看到在0012FE58和0012FE68有两个返回,我们一个一个反汇编窗口跟踪,第一个返回到没有有用信息
所以我们来反汇编窗口跟随第二个“返回到”。此时发现了有用信息哈~就是跳转,运气不错~ 0052661A /0F84 99040000 JE Crack.00526AB9
00526620 |50 PUSH EAX
00526621 |E8 F834F9FF CALL Crack.004B9B1E
00526626 |E9 8E040000 JMP Crack.00526AB9
0052662B |E8 0E2BF5FF CALL Crack.0047913E
00526630 |6A E9 PUSH -17
00526632 |35 0400006F XOR EAX,6F000004
00526637 |E6 74 OUT 74,AL ; I/O 命令
00526639 |13EE ADC EBP,ESI
0052663B |BB 6CE27017 MOV EBX,1770E26C
我们将0052661A这个JE给改成JMP强制跳转,然后右键==》保存
此时程序可以正常运行~到此,就将NP的时间限制去除掉了~接着我们追码~追码就简单了~
OD载入Crack.exe程序~F9运行起来,然后CTRL+G,跟随到00401000处,然后搜索ASCII码~
双击进入“破解成功”这个提示,因为我比较懒,我向上面翻,大略的看了一下子,就发现一个比较
00401BB2 8A10 MOV DL,BYTE PTR DS:[EAX]
00401BB4 8A1E MOV BL,BYTE PTR DS:[ESI]
00401BB6 8ACA MOV CL,DL
00401BB8 3AD3 CMP DL,BL
00401BBA 75 1E JNZ SHORT Crack.00401BDA
00401BBC 84C9 TEST CL,CL
00401BBE 74 16 JE SHORT Crack.00401BD6
00401BC0 8A50 01 MOV DL,BYTE PTR DS:[EAX+1]
00401BC3 8A5E 01 MOV BL,BYTE PTR DS:[ESI+1]
00401BC6 8ACA MOV CL,DL
00401BC8 3AD3 CMP DL,BL
00401BCA 75 0E JNZ SHORT Crack.00401BDA
00401BCC 83C0 02 ADD EAX,2
00401BCF 83C6 02 ADD ESI,2
00401BD2 84C9 TEST CL,CL
00401BD4 ^ 75 DC JNZ SHORT Crack.00401BB2
00401BD6 33C0 XOR EAX,EAX
00401BD8 EB 05 JMP SHORT Crack.00401BDF
00401BDA 1BC0 SBB EAX,EAX
00401BDC 83D8 FF SBB EAX,-1
00401BDF 85C0 TEST EAX,EAX
00401BE1 6A 00 PUSH 0
00401BE3 75 0C JNZ SHORT Crack.00401BF1
00401BE5 68 54B14200 PUSH Crack.0042B154 ; 恭喜你
00401BEA 68 48B14200 PUSH Crack.0042B148 ; 破解成功!
00401BEF EB 0A JMP SHORT Crack.00401BFB
00401BF1 68 3CB14200 PUSH Crack.0042B13C ; 破解失败
00401BF6 68 34B14200 PUSH Crack.0042B134 ; 重试?
00401BFB 8BCD MOV ECX,EBP
00401BFD E8 65700100 CALL Crack.00418C67
00401C02 6A 00 PUSH 0
00401C04 8BCD MOV ECX,EBP
00401C06 E8 B8770100 CALL Crack.004193C3
00401C0B 5F POP EDI
00401C0C 5E POP ESI
00401C0D 5D POP EBP
00401C0E 5B POP EBX
00401C0F 83C4 50 ADD ESP,50
00401C12 C3 RETN
所以我在00401BB8这里下F2断点,并输入假的注册名Nisycc和注册码11111111~点击确定,程序断下来了~是明码比较
在寄存器窗口的EAX寄存器窗口,发现了一串类似注册码的字符串
EAX 0012F88C ASCII "ab9016b-8cc142f-3d0a78c"
我们复制下来,关掉OD,输入注册名Nisycc和注册码ab9016b-8cc142f-3d0a78c,点击确定,看!提示成功了~算法我
没去分析,大家可以分析一下算法,写一个注册机给我哈~
--------------------------------------------------------------------------------
【经验总结】
这篇破文只是想过NP的次数限制,所以我没去加DLL模拟~但是应该注意,解除次数限制的时候,包括了内存校验,所以也要
去掉内存校验~呵呵~过NP的次数限制的方法很多~不止我这一种,还有像就利用MessageBoxA这个函数~大家可以去试试~如果
大家没看懂的话,我会录一个视频的~至于这个CM的追码特别简单,大家去分析一下,并写一个注册机吧~呵呵~顺便说一下,NP
的读取次数会生成一个文件,这个文件保存在C:\Documents and Settings\All Users\Application Data,删除掉,就可以去掉次数限制
--------------------------------------------------------------------------------
【版权声明】: 本文原创于Nisycc, 转载请注明作者并保持文章的完整, 谢谢!
2011年05月03日 PM 02:38:18
PS:录了一个视频~可以看看哈~大牛就不用看了~由于我传附加传了很长时间没传上去,就放到网盘上了~呵呵~下载地址: http://dl.dbank.com/c0m3qyei08
|