cu629944 发表于 2011-5-3 14:53

自己加NoobyProtect次数限制的一个简单的CM的追码

本帖最后由 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:在00524DB3处F4运行到此处,然后F8单步走~
00524D47    FF75 FC         PUSH DWORD PTR SS:
00524D4A    E8 02C9F8FF   CALL VC++_nps.004B1651
00524D4F    FF75 FC         PUSH DWORD PTR SS:
在这里的时候,我们在00524D4F 下F2 int3中断,F9运行,断下来后,在堆栈窗口==》 右键==》数据窗口跟随
在0018FA3C处,下硬件访问断点==》DWORD,并取消 00521B80处的F2断点,F9运行

00525959    3918            CMP DWORD PTR DS:,EBX
0052595B^ 74 D2         JE SHORT VC++_nps.0052592F
0052595D    8B4D F3         MOV ECX,DWORD PTR SS:程序断在了00525959这里,我们删除硬件断点,然后F8单步跟踪,
00525A3B    64:0942 01      OR DWORD PTR FS:,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:
00525B98    FF40 10         INC DWORD PTR DS:
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|0043E7C9Crack.0043E7C9
0012FE68|00526626返回到 Crack.00526626 来自 Crack.004B9B1E
0012FE6C|00000001
0012FE70|00000004
0012FE74|00601B80
0012FE78|004000E0ASCII "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:
00401BB4    8A1E            MOV BL,BYTE PTR DS:
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:
00401BC3    8A5E 01         MOV BL,BYTE PTR DS:
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


cu629944 发表于 2011-5-3 14:54

自己沙发~嘿嘿~别跟我抢哦~大家给点热心和评分呗~

zone0826 发表于 2011-5-3 15:09

不错……今天分加光了……明天再加吧。。

坦克总动员 发表于 2011-5-3 15:29

不错不错。。相当之好的东西

zhi5231 发表于 2011-5-3 18:24

{:1_918:}看了发现!原来可以这样子过掉的- -!

qzy0549 发表于 2011-5-3 19:23

楼主幸苦了 是个好教程

zhi5231 发表于 2011-5-3 19:32

{:1_924:}我承认
在这里的时候,我们在00524D4F 下F2 int3中断,F9运行,断下来后,在堆栈窗口==》 右键==》数据窗口跟随
在0018FA3C处,下硬件访问断点==》DWORD,并取消 00521B80处的F2断点,F9运行
- -!不明白!望下面的大牛简略说下

mycc 发表于 2011-5-3 19:33

哦,看不明白也顶一下

qzy0549 发表于 2011-5-3 19:35

楼主 SE加壳的软件,他用SE壳生成的注册文件来验证 这个该怎么弄

kelvar 发表于 2011-5-3 19:45

Nisycc,呵呵。名字让我想到一个人。是不是为了过这个视频的限制:loveliness:
页: [1] 2 3 4
查看完整版本: 自己加NoobyProtect次数限制的一个简单的CM的追码