171026 逆向-Patch(CrackMe之41)

1625-5 王子昂 总结《2017年10月26日》 【连续第391天总结】
A. CrackMe41–patch
B.

解压有一个Rules文件和EXE

说明显示EXE是Delphi写的

Rules说明需要为EXE的菜单栏的Exit添加确认弹窗,当点击Yes的时候才退出,否则无效

试运行,发现一级菜单Ficken下有两个二级菜单项,分别是About和Exit
点击About将会弹出看规则的提示,点击Exit毫无反应

于是先用DeDe反编译一下看看:
这里写图片描述

可以看到,About有一个OnClick事件,很明显就是那个弹窗了;而Exit连事件都没有……这个添加的就麻烦啦,如果有事件只是做别的事情那么很好Hook,然而没有事件就意味着还要给他加个事件咯

IDA反编译一下,跟着字符串找到了About2Click事件:
这里写图片描述
很明显调用方法应该是把事件作为Callback设置到Windows消息处理函数中,是个动态过程,因此查看交叉引用当然是找不到的

只好在OD中的43E270处下断,然后查看调用堆栈啦:
这里写图片描述
可以看到是从42F42E调用过来的,它应该就是消息处理函数咯
在IDA中分析42F42E:
这里写图片描述
根据反汇编可以发现,函数地址和参数等等都是依靠v2=result,即eax/ebx的
那么这个地址大概率就是控件结构体的指针了

重新在42F42E所在函数的第一行下断,再次点击,可以发现ebx中的确存放着很多信息,包含Caption和onClick的字符串

那么最简单的方法就是手动为Exit控件增加callBack啦:
首先找CallBack放置的地址,OD拖到最后发现0x43E4BC往后都是00,我们就把函数放这儿吧
直接写汇编或者自己手动写C函数然后反汇编都可以
C语言就是:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值