分析基础逆向程序4

本文围绕程序逆向展开,先将程序载入OD,通过文本查找、观察代码,修改标志位等操作破解程序使用天数限制;后针对程序前后NAG提示,利用堆栈操作找到相关call语句,设置断点,通过修改标志位、编写代码等方式成功跳过NAG提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开程序
在这里插入图片描述
观察得知此程序使用天数已达,输入code后
在这里插入图片描述出现提示框
将程序载入od
先对输入code失败提示的字符串进行文本查找并观察程序代码
在这里插入图片描述观察到上方存在一个cmp + jnz语句,推测通过此判断即可跳过失败标志
同时注意到右侧有 case 3 of switch 提示,代码中应该有switch case结构
ctrl + G 查找到 switch语句的开头 4DBDA4
在这里插入图片描述推测有1~0B一共11个case+1个default
回到出现失败提示的case3语句,测试修改标志位能否实现目标
在这里插入图片描述修改两处jnz使得第一处跳转,第二处不跳转
在这里插入图片描述出现成功窗口
但是点击确认后依然回到倒计时结束界面
在这里插入图片描述继续观察代码
从switch处开始调试代码并观察
观察到程序最开始运行一次switch,case此处等于1.在输入序列号时,又运行一次switch,case此处为3
尝试在程序开始处将eax赋值为4
在这里插入图片描述在这里插入图片描述修改后发现代码过大已覆盖其他代码
在程序中挑选合适空位置进行补丁的安放
在这里插入图片描述在这里插入图片描述进行调试
在这里插入图片描述
出现死循环
观察代码出现死循环的原因
在这里插入图片描述观察case = 4处下方call语句能将代码跳转至开头switch
将case = 4 处的jnz成立来跳过call语句
在这里插入图片描述出现最后的default 同时case B 中有两段ASCII码
从default后走出程序到达dll领空
重新F9后回到switch循环

个人推测:程序在经过case4的判断后强制重新启动,下一次进入case判断时eax=B从而跳过死循环

尝试修改case为b
保存并调试
在这里插入图片描述载入后无nag提示,测试成功

打开程序
载入跳出一段nag
在这里插入图片描述
经过一段时间消失,然后跳出主界面
在这里插入图片描述点击exit,继续跳出nag
在这里插入图片描述
一段时间后消失
目的:将程序前后nag跳过

载入od
根据程序调用函数需使用堆栈进行操作,在nag跳出界面时暂停
点击od上方堆栈函数
在这里插入图片描述查看堆栈发现mfc中的dialog 点击调用来自
在这里插入图片描述发现call语句,设置断点进行测试
F8过出现nag,继续运行发现主界面和结束nag同样来自该call语句
在这里插入图片描述
观察发现上方存在je跳转
尝试修改标志位来跳过前后nag
实验成功
故现在目的为让第一三次跳转成立,第二次不成立
在数据段寻找有空位地址,编写代码来让目的成立
点击od窗口切换的m
在这里插入图片描述
点击进入寻找
在这里插入图片描述选择446000地址作为目的地址,同时选择在此处下硬件断点来测试此段有没有被操作
测试:无影响操作

在代码段选择无影响的代码进行操作
修改代码为
在这里插入图片描述
在这里插入图片描述在数据段设置字符来对call指令进行计数,第1和第3次跳转至跳过nag部分,第二次不进行跳转,仅仅对jmp占用的指令进行补充
测试修改
在这里插入图片描述
修改成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值