最简单的NAG去除术
【破文标题】最简单的NAG去除术【破文作者】blitz
【破解工具】OD,PEiD
【破解平台】WinXP SP2
【软件名称】ASCII及进制转换
【软件大小】483 KB
【原版下载】见附件
【保护方式】ASPack 2.12
【软件简介】破解者常用软件,顺手修改下,就是因为关闭时的NAG.
【破解声明】一些常见破解方式的应用.
------------------------------------------------------------------------
【破解过程】Peid检测 :ASPack 2.12 -> Alexey Solodovnikov
ESP轻松脱壳,顺便捎带下,熟悉者可跳过.
用OD载入,根据ESP定理,在第一句压栈操作后hr esp,本例操作,运行第一步后hr 0012ffa4.
F9运行,中断在0050D3B0 . /75 08 JNZ SHORT turns4.0050D3BA
F8单步到返回(retn)后即到程序入口点OEP.
可直接在0048D254点右键Dump.
用OD载入脱壳后的程序,选择OD的插件-超级字串-查找ASCII,在文本字串里找到"真的要退出?",双击来到相关代码.
0048B98F .FF92 C4000000 CALL DWORD PTR DS:
0048B995 .8B83 40030000 MOV EAX,DWORD PTR DS:
0048B99B .E8 4401FBFF CALL 2222.0043BAE4
0048B9A0 .5B POP EBX
0048B9A1 .C3 RETN
0048B9A2 8BC0 MOV EAX,EAX
0048B9A4 .53 PUSH EBX
0048B9A5 EB 1D JMP SHORT 2222.0048B9C4
0048B9A7 .6A 00 PUSH 0 ; /Arg1 = 00000000
0048B9A9 .66:8B0D C8B94>MOV CX,WORD PTR DS:; |
0048B9B0 .B2 03 MOV DL,3 ; |
0048B9B2 .B8 D4B94800 MOV EAX,2222.0048B9D4 ; |真的要退出? //来到这一行了.
0048B9B7 .E8 08D5F9FF CALL 2222.00428EC4 ; \2222.00428EC4
0048B9BC .83F8 07 CMP EAX,7
0048B9BF .75 03 JNZ SHORT 2222.0048B9C4
0048B9C1 .C603 00 MOV BYTE PTR DS:,0
0048B9C4 >5B POP EBX
0048B9C5 .C3 RETN
我们往上看,因为程序的在OD的运行顺序是从上往下的(当然,除了执行了跳转或相关指令外),我们来关注下
0048B9A4 .53 PUSH EBX
这一行.它的上边是
0048B9A1 .C3 RETN
0048B9A2 8BC0 MOV EAX,EAX
retn把它上边的子程序都返回了,所以根据经验0048B9A4就是按钮"确定"的相关程序,而这一行就是子程序的开头.
因为人家把EBX压栈了,我们就从子程序的第二行
0048B9A5 8BD9 MOV EBX,ECX
修改代码,直接跳过此窗口.我们在压栈完后直接把下边的运算命令强跳到EBX出栈那一句,因为出栈后就返回了.
所以其结果是我们修改0048B9A5的内容为JMP SHORT 0048B9C4
我看很多人直接JMP到RETN上,我试了好多次,都会引起程序出错.所以还是有进(PUSH)有出(POP)保险.
------------------------------------------------------------------------
【破解总结】修改的关键,在于找到正确的子程序开头和正确地修改跳转.
希望各初学者可以理解,高手指教!
------------------------------------------------------------------------
【版权声明】转载请注明来自PYG. 学习一下啊/:014 不错啊 谢谢 :loveliness: 新手学习了 照着来一次 下载学习,谢谢分享。 自己测试下!
Peid检测 :ASPack 2.12 -> Alexey Solodovnikov
用AspackDie直接脱壳!
OD载入插件-超级字串-查找ASCII,在文本字串里找到"真的要退出?",双击来到相关代码.
0048B9A7 .6A 00 PUSH 0 ; /Arg1 = 00000000 我将这里修改jmp0048B9C5
0048B9A9 .66:8B0D C8B94>MOV CX,WORD PTR DS: ; |
0048B9B0 .B2 03 MOV DL,3 ; |
0048B9B2 .B8 D4B94800 MOV EAX,unpacked.0048B9D4 ; |真的要退出?
0048B9B7 .E8 08D5F9FF CALL unpacked.00428EC4 ; \unpacked.00428EC4
0048B9BC .83F8 07 CMP EAX,7
0048B9BF .75 03 JNZ SHORT unpacked.0048B9C4
0048B9C1 .C603 00 MOV BYTE PTR DS:,0
0048B9C4 >5B POP EBX
0048B9C5 .C3 RETN
如果直接将 0048B9A7后修改jmp 0048B9C5
保存后可以运行!
没有错误提示!
不知道是什么原因,期待高手指点!
[ 本帖最后由 lmg7005 于 2007-12-25 22:26 编辑 ] 回5楼.
0048B9A7 .6A 00 PUSH 0 ; /Arg1 = 00000000
0048B9A9 .66:8B0D C8B94>MOV CX,WORD PTR DS:; |
0048B9B0 .B2 03 MOV DL,3 ; |
0048B9B2 .B8 D4B94800 MOV EAX,2222.0048B9D4 ; |真的要退出? //来到这一行了.
0048B9B7 .E8 08D5F9FF CALL 2222.00428EC4 ; \2222.00428EC4
几行应该是对弹出对话框CALL的参数设置.
需要声明的是,文中的修改方式是我个人总结的,所以很可能不尽人意,但基本可以保证程序不出错.
网上好多教程修改都是从子程序入口的.我在调试的过程中,不出栈操作的话很容易出错.
谢谢指教!.
[ 本帖最后由 blitz 于 2007-12-26 08:39 编辑 ] 谢谢分享,学习了。。。 学习不少呀,我也照着来试试 感谢!!学习了.. 感谢!!学习了../:good /:good