目录
一、MessageBox.exe修改程序标题内容——修改函数传入值
二、TraceMe.exe暴力破解程序登陆界面——搜索函数、寻找附近调用取值的地方
三、reverseMe.exe暴力破解/打补丁实现注册——分析文件结构 逆向注册文件
四、reverseMe.exe去除NAG窗口——修改跳转条件跳过对话框,使得MessageBox失效:父句柄设为空白,修改文件PE结构入口AddressOfEntryPoint
3.修改文件PE结构入口AddressOfEntryPoint
六、pixtopianbook破解功能限制——定位至引用弹出NAG窗口的地址、搜索字符串改变值
2.搜索字符串改变UNREGISTERED VERSION字符串
2.查找地址常量 https://blog.csdn.net/wlswls1711/article/details/97145997
一点铺垫:基础知识
1.汇编语言
EBP:主要是用于栈和栈帧。
ESP:指向当前进程的栈空间地址。
EIP:总是指向下一条要被执行的指令。
2.NAG窗口
nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口。一般nag在程序启动或退出的时候弹出来,或者在程序运行的某个时刻突然蹦出来吓你一跳。
3.SEH
SEH(Structured Exception Handling),即结构化异常处理。
SEH是Windows操作系统提供的功能,跟开发工具无关。
Windows程序设计中最重要的理念就是消息传递,事件驱动。 当GUI应用程序触发一个消息时,系统将把该消息放入消息队列,然后去查找并调用窗体的消息处理函数(CALLBACK),传递的参数当然就是这个消息。
我们同样可以把异常也当作是一种消息,应用程序发生异常时就触发了该消息并告知系统。
系统接收后同样会找它的“回调函数”,也就是我们的异常处理例程。
当然,如果我们在程序中没有做异常处理的话,系统也不会置之不理,它将弹出我们常见的应用程序错误框,然后结束该程序。 所以,当我们改变思维方式,以CALLBACK 的思想来看待SEH,SEH 将不再神秘。
4.断点类型
软件断点只能断点程序领空,不能断点动态链接库,如果需要断点动态链接库,就需要用到硬件断点。
一、MessageBox.exe修改程序标题内容——修改函数传入值
int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
1.找到MessageBox的传入值
2.修改传入的lpText值
二、TraceMe.exe暴力破解程序登陆界面——搜索函数、寻找附近调用取值的地方
(1)使用OD加载程序,搜索分别搜索GetDlgItemTextA、GetDlgItemTextW、GetWindowTextA、GetWindowTextW,搜索到的都下断点。
(2)运行程序,在程序弹出对话框时,输入用户名和系列号,然后按F8单步,在消息窗口观察哪条语句有我们刚刚输入的用户名和系列号。如下图:
(3)找到后,就在这条语句的附件会有校验和跳转(那个test就是效验,je就是跳转),我们可以修改效验结果,或者直接NOP掉跳转。(我这里直接NOP掉了跳转)
三、reverseMe.exe暴力破解/打补丁实现注册——分析文件结构 逆向注册文件
首先分析代码结构:
修改跳转条件暴力破解:
直接将弹出还未注册的窗口判断语句(je,jle,jnz等)更改为nop(不希望它执行)或jmp(希望它执行),即可实现。